Результат всегда равен нулю

#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 647

4. Вы также можете использовать 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 типа данных.