Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Проблема с INSERT INTO в ASP / 8 сообщений из 8, страница 1 из 1
06.12.2004, 16:53
    #32814924
Alex112
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с INSERT INTO в ASP
Вот такой конструкцией пытаюсь вставить строку в таблицу Lalala на SQL Server'е:

Код: plaintext
INSERT INTO Lalala (Step, Parametr) VALUES ('" & rs("ParData") & "', " & rs("ParFloat") & ")"

Затыкаюсь на на этой строке, если второе значение - rs("ParFloat"), - которое беру из открытого заранее рекордсета, имеет знаки после запятой: код начинает ругаться, что число переданных значений в VALUES() больше, чем число объявленных столбцов.

Т.е. запятая в rs("ParFloat") воспринимается как разделитель VALUES. Если, ради эксперимента модернизирую строку так:

Код: plaintext
INSERT INTO Lalala (Step, Parametr) VALUES ('" & rs("ParData") & "', " & CLng(rs("ParFloat")) & ")"

т.е. CLng()'ом убираю запятую и знаки после нее, то все проходит без проблем.

Если пытаюсь передать второе значение как сторку:

Код: plaintext
INSERT INTO Lalala (Step, Parametr) VALUES ('" & rs("ParData") & "', '" & rs("ParFloat") & "')"


то код кричит об ошибке преобразования значения varchar во float.

Вопрос: как вставить с помощью INSERT INTO в поле таблицы (тип поля float) именно значение float, т.е. число со знаками после запятой?
...
Рейтинг: 0 / 0
06.12.2004, 17:47
    #32815088
RFT
RFT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с INSERT INTO в ASP
Попробовал у себя вот так:
"insert into t1 (str,num) values ('" & request("string") & "'," & cstr(request("number")) & ")"
И вот так тоже(что тоже самое, как у тебя):
"insert into t1 (str,num) values ('" & request("string") & "'," & request("number") & ")"

Прошло на ура. Никто не ругался. Поле num в базе - dectimal (пробовал на Access).
...
Рейтинг: 0 / 0
06.12.2004, 17:53
    #32815114
Alex112
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с INSERT INTO в ASP
На Access 100% пройдет, сам с него начинал. Поэтому и сам испытываю некоторые неудобства и удивление.

Не проходит именно под ASP. Пробую это все под DreamWeaver.
...
Рейтинг: 0 / 0
06.12.2004, 23:18
    #32815437
RFT
RFT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с INSERT INTO в ASP
ASP - инструмент, Access - хранилище. Ты меня недопонял: под тем, что я сказал про Access, я имел ввиду то, что из ASP insert в Access прошел удачно. Возможности попробовать на SQL Server не имею. Приведенный мной код - чистый ASP(уж это-то можно было увидеть).
...
Рейтинг: 0 / 0
07.12.2004, 09:47
    #32815715
Alex112
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с INSERT INTO в ASP
Уточню ситуацию. Таблица находится в базе на SQL Server 2000 со всеми Service Pack'ами. На компе (W2000) с которого работаю, прописан ODBC источник данных. Т.е. ASP код работает не напрямую с SQL Server, а через ODBC.

Независимо от типа поля в принимающей таблице - float или decimal - ситуация не меняется.

Например. Последовательно заношу в таблицу две таких строки:

rs("ParData") = 01.01.2004 rs("ParFloat") = 1111
rs("ParData") = 01.01.2004 rs("ParFloat") = 1111,222

Первая заносится без проблем. На второй выскакивает описанная выше ошибка:

Error Type:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC SQL Server Driver][SQL Server]There are fewer columns in the INSERT statement than values specified in the VALUES clause. The number of values in the VALUES clause must match the number of columns specified in the INSERT statement.
/test1/index.asp, line 729


Browser Type:
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322)

Т.е. запятая от дробной части второго передаваемого значения воспринимается как разделитель передаваемых значений: код считает, что передается ТРИ значения, а не два. Смена запятой на точку прямо в строке или в Regional Options ситуацию не меняет.

У меня нет большого опыта в ASP, может нужно как-то обозначить в строке с перечислением VALUES, что второе значение - это число с десятичным дробным разделителем?

RFF
Приведенный мной код - чистый ASP(уж это-то можно было увидеть).

С таким же успехом можно сказать, что это чистый Access VBA :)
...
Рейтинг: 0 / 0
07.12.2004, 12:18
    #32816211
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с INSERT INTO в ASP
Вы формируете SQL целиком, без параметров.
Значит надо преобразовать значение Float в строку, а потом, уже в строке, заменить запятую на точку.
replace(rs("ParFlat"),",",".")
Лучше написать функции преобразования и для Float и для Date. Принимающие поле rs и выдающие строку (Ведь бывает поле = Null).
...
Рейтинг: 0 / 0
07.12.2004, 12:28
    #32816252
RFT
RFT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с INSERT INTO в ASP
Ну приведу пример (файлик распакуещь в 1 папку, и по обратись к файлу s1.asp в браузере).
Кстати имей ввиду, что число, вводимое через запятую в поле ввода не является числом! Тут-то и кроется твоя ошибка, по-моему. Тебе надо проверять данные, полученные из формы на их тип. И если в базе у тебя тип поля числовой, то когда ты попытаешься туда запихнуть текст, она тебе сама скажет ошибку. Я попробовал разные варианты. И на твою ошибку наткнулся именно тогда, когда в числовое поле писал числа через запятую. В тексте таких проблем нет.
Вывод: ошибка в исходных данных и способе их передачи в базу.
...
Рейтинг: 0 / 0
07.12.2004, 13:10
    #32816379
Alex112
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с INSERT INTO в ASP
Worobjoff

Уже так и сделал. Все работает. Просто, было сомнение, что дополнительный REPLACE на больших объемах данных - реально заполняемых столбцов больше - будет вносить дополнительные задержки ...

RFT

Это немного не по теме: я не беру данные из формы. Я писал выше, что значение rs("ParFloat") - это УЖЕ десятичное число с десятичным разделителем и знаками после него ... Ваш код использует драйвер Access: повторно соглашаюсь - будет работать в Access, хотя у меня все-равно не запустился.

Как понял, с INSERT INTO в TSQL SQL Server'а другая история. Поискав в западных конфах, нашел кучу вопросов на эту тему. Кроме использования REPLACE никто ничего не предлагает.
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Проблема с INSERT INTO в ASP / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]