2010-02-09 2 views
0

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

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 
+0

Пожалуйста, отформатируйте код. Соответствующие отступы и более короткие имена переменных не повредят. Также используйте последовательность '' '# 'для комментариев вместо одного' '', это помогает синтаксису синтаксиса Stackoverflow, который слишком плохо настроен для кода VB. – AnthonyWJones

ответ

0

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

1

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

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

1

Поскольку ошибка является ошибкой типа несовпадения, вы, вероятно, ошибка несоответствия типов :)

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

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 
Смежные вопросы