Классический ASP, поставщик: ошибка несоответствия типов - PullRequest
0 голосов
/ 09 февраля 2010

У меня есть следующий код ASP, который используется при импорте из файла .csv. Я получаю сообщение об ошибке

rs_add_pg_asset_attr("level_3_integer_attribute_description") = rs_get_costs("sp_import_pg_attribute_value")

Я предполагаю, что код пытается установить 2 столбца в двух разных наборах записей, чтобы они были одинаковыми? Поправьте меня если я ошибаюсь. Данные в level_3_integer_attribute_description равны type decimal(13,3), NULL, а данные в sp_import_pg_attribute_value представляют собой целый ряд различных значений type varchar(255), NULL.

Я не могу понять, почему это не получается.

str_get_pg_attribute_id_sql = "SELECT * FROM tbl_level_3_cbs_attribute WHERE level_3_cbs_attribute_description = '" & rs_get_costs("sp_import_pg_attribute") & "'"
str_get_pg_attribute_id_sql = str_get_pg_attribute_id_sql & " AND level_3_cbs_id = " & int_level_3_id
rs_get_pg_attribute_id.Open str_get_pg_attribute_id_sql, dbConnection, 3
if rs_get_pg_attribute_id.RecordCount <> 0 then

   ''//Does the attribute already exist?
   str_get_pg_attribute_sql = "SELECT * FROM tbl_asset_level_3_attribute_link WHERE "
   str_get_pg_attribute_sql = str_get_pg_attribute_sql & "level_3_cbs_attribute_id = " & rs_get_pg_attribute_id("level_3_cbs_attribute_id") & " AND asset_level_3_id = " & int_pg_asset_id

   rs_get_pg_attribute.Open str_get_pg_attribute_sql, dbConnection, 3
   if rs_get_pg_attribute.RecordCount = 0 then
      ''//No, add the attribute record
      sqlString="select top 1 * from tbl_asset_level_3_attribute_link"
      rs_add_pg_asset_attr.Open sqlString, dbConnection, adOpenKeyset, adLockOptimistic
      rs_add_pg_asset_attr.AddNew
      rs_add_pg_asset_attr("level_3_cbs_attribute_id") = rs_get_pg_attribute_id("level_3_cbs_attribute_id")  
      rs_add_pg_asset_attr("asset_level_3_id") = int_pg_asset_id
      if rs_get_pg_attribute_id("level_3_cbs_attribute_type") = "I" then
          rs_add_pg_asset_attr("level_3_integer_attribute_description") = rs_get_costs("sp_import_pg_attribute_value")
      else 
          rs_add_pg_asset_attr("level_3_string_attribute_description") = rs_get_costs("sp_import_pg_attribute_value")
      end if

Ответы [ 3 ]

1 голос
/ 09 февраля 2010

Поскольку ошибка является ошибкой несоответствия типов, возможно, имеется ошибка несоответствия типов:)

Попробуйте это:

rs_add_pg_asset_attr("level_3_integer_attribute_description") = _
                       tryCDbl( rs_get_costs("sp_import_pg_attribute_value"))

и затем:

function tryCDbl( something )
    dim retval
    retval = 0 ''// fallback

    on error resume next
    if isNumeric( something ) then
       retval = cdbl( something) 
    end if

    tryCDbl = retval
end function
1 голос
/ 09 февраля 2010

Вы уверены, что level_3_integer_attribute_description - это существующее имя поля, нигде нет ошибки опечатки?

Если это так, являются ли данные, которые вы хотите поместить в это десятичное значение, правильным строковым представлением плавающего значения? Нет проблем с десятичными точками и запятыми?

0 голосов
/ 11 февраля 2010

Мы нашли ответ на этот вопрос. Проблема заключалась в том, что импорт пытался присвоить пробел в десятичном столбце. Спасибо за вашу помощь. Теперь я застрял на чем-то другом!

...