Как сделать вычисления со значениями базы данных в Classic ASP? - PullRequest
1 голос
/ 17 ноября 2011

Я должен сделать вычисление целочисленного значения в классическом asp, но я продолжаю получать ошибку «несоответствие типов» в этой строке: X = tempID + 1

это мой код:

 Set TheRS = Conn.Execute("select top 1 xx from W_TABLE order by IDX desc")
   tempID = TheRS("xx")
   X = tempID + 1
   TheRS.Close
   Set TheRS = nothing

tempX имеет тип "Пользовательский тип" ... я предполагаю, что именно поэтому он не позволит мне добавить 1 к нему ... как я могу это сделать?

Ответы [ 4 ]

3 голосов
/ 17 ноября 2011

У меня была эта проблема с числовыми / десятичными столбцами. ADO возвращает значение в виде десятичного типа, но VBScript на самом деле не поддерживает десятичный тип. Единственное, что вы можете сделать с переменной, содержащей значение типа Decimal, - это преобразовать ее, используя CInt, CDbl или любую другую функцию преобразования. Я предполагаю, что если бы вы проверили значение VarType(tempID), вы бы увидели 14, что соответствует vbDecimal.

Чтобы обойти это, вы должны преобразовать значение, используя CDbl (или CInt, если вам не нужна десятичная часть).

1 голос
/ 17 ноября 2011
  1. Проверьте, является ли набор записей первым в конце файла.(If TheRS.Eof Then)
  2. Мне кажется, что "xx", что бы это ни было, на самом деле не является целым числом.Вы уверены, что ваш запрос возвращает числовой ответ?
  3. Скорее всего, поэтому вы не можете добавить 1 к нему.Попробуйте сначала привести его к целому числу: X = CInt(tempID) + 1
  4. Response.Write (tempID) перед добавлением 1 и посмотрите, какое значение он имеет

Не хамить, но этот код неразборчив!W_TABLE?IDX?хх?Это все ужасные имена переменных и схем.Я искренне надеюсь, что вы только что очистили свои реальные переменные с соответствующими именами для более абстрактных, запутанных.

0 голосов
/ 17 ноября 2011

заработало, изменив выбор.

select top 1 xx+1 from W_TABLE order by IDX desc

спасибо всем!

0 голосов
/ 17 ноября 2011

Если вы не хотите беспокоиться о том, что возвращает запрос к вашей базе данных, это должно помочь:

X = CInt("0" & tempID) + 1
...