#asp-classic
#asp-classic
Вопрос:
При выполнении этого фрагмента кода на моем веб-сервере результат всегда 0 (ZERO)
Кто-нибудь может дать представление об этой проблеме (решение еще лучше:-D)
Dim MyTotalPages
Dim Recordset
Dim Connection
Dim aspDBcount
Dim ShowRowCount
ShowRowCount = 3 ' Fixed size
Set Connection = Server.CreateObject("ADODB.Connection")
Set Recordset = Server.CreateObject("ADODB.Recordset")
ConnString = "DRIVER={MySQL ODBC 5.3 Unicode Driver}; SERVER=server_address; UID=a_username;PASSWORD=a_password; OPTION=3; Port=a_port"
Connection.Open ConnString
SQL = "SELECT COUNT(*) AS MyRowCounts FROM `a_database`.`a_table`;"
Set Recordset = Connection.Execute(SQL)
aspDBcount = (Recordset("MyRowCounts") * 1)
Recordset.Close
MyTotalPages = (aspDBcount * 1) / (ShowRowCount * 1))
Response.Write aspDBcount amp; "HTML_NEW_LINE" amp; ShowRowCount amp; "HTML_NEW_LINE" amp; MyTotalPages
- Результат равен 10, 3, 0
- Должно быть 10, 3, 3.33333…(с текущими данными, доступными в базе данных)
Комментарии:
1. Попробуйте
aspDBcount = cInt(Recordset("MyRowCounts")) * 1
2. ИДЕАЛЬНО!!! Именно то, что мне нужно: D
3. В MySQL
SELECT COUNT()
возвращаетBIGINT
целочисленный тип и нуждается в преобразовании, прежде чем вы сможете правильно использовать его в VBScript.CInt
может конвертировать только числа от -32 767 до 32 767, если вашSELECT COUNT()
превышает этот диапазон, вам нужно будет использоватьCLng
вместо этого, который имеет диапазон от -2 147 483 648 до 2 147 483 6474. Вы также можете использовать
CDbl
, что немного странно. Он может преобразовывать ОГРОМНЫЕ числа и, похоже, не имеет переполнения. В конечном итоге он просто вернет «Недопустимое число», если вы передадите смехотворно длинное целое число.5. Просто старая привычка из JS гарантировать, что var возвращается как целое число, с плавающей точкой и т. Д…
Ответ №1:
Использование:
aspDBcount = cInt(Recordset("MyRowCounts")) * 1
В MySQL SELECT COUNT()
возвращает BIGINT
целочисленный тип и нуждается в преобразовании, прежде чем вы сможете манипулировать им и правильно использовать его в VBScript.
CInt
может преобразовывать числа только между -32,767
и 32,767
Если ваш SELECT COUNT()
превышает этот диапазон, вам нужно будет использовать CLng
вместо этого, который имеет диапазон -2,147,483,648
от 2,147,483,647
Вы также можете использовать CDbl
, что немного странно. Он может преобразовывать ОГРОМНЫЕ числа и, похоже, не имеет переполнения. В конечном итоге он просто вернет Invalid number
ошибку, если вы попытаетесь передать смехотворно большое целое число.
Комментарии:
1. Вы всегда должны использовать
CDbl()
дляBIGINT
типа данных.