Страница 1 из 1
Проблемы с написанием запроса INSERT в IBQuery
Добавлено: 09 мар 2006, 15:34
Pavel_ch
В D7 пишу клиентское приложение. Сервер IB7.0.1
Возникла проблема с динамическим получением текста запроса на добавление записи.
Проблема вот в чём.
Если общий вид запроса
Код: Выделить всё
INSERT INTO Money (Field1,Field2,Field3) VALUES(Val1,Val2,Val3)
то как быть, если, к примеру val1=1234,45 val2=2345,56 и val3= 1111,11? Ведь запятую IB понимает как разделитель значенй, а не как разделитель целой и дробной части.
Соответственно при попытке запустить такой запрос вылетает исключение с сообщением, что кол-во значений не соответствует кол-ву полей.
Добавлено: 09 мар 2006, 16:01
kdv
нет никакой проблемы. для sql формат дат и чисел, передаваемых как строка, то есть в ТЕКСТЕ sql-запроса, определен жестко. И разделителем дробной части является точка.
Альтернативно, вместо написания на клиенте
FloatToStr(Val1)+', '+FloatToStr(Val2)...
можно использовать параметры. Там разделителей "нет", т.к. данные передаются в двоичном виде, как есть.
insert into x (field1) values (:param1)
Добавлено: 09 мар 2006, 16:55
Pavel_ch
Вот метаданные таблицы в которую добавляются записи
Код: Выделить всё
CREATE TABLE "MONEY"
(
"ID" INTEGER NOT NULL,
"MONDATE" DATE,
"MONBEG" NUMERIC(2, 2),
"MONEND" NUMERIC(2, 2),
"MONRES" NUMERIC(2, 2),
"DAYOFWEEK" CHAR(2) CHARACTER SET WIN1251,
PRIMARY KEY ("ID")
);
В Delphi пишу запрос на добавление записи (этот текст генерится программой, в итоге в запрос попадает следующее)
Код: Выделить всё
INSERT INTO MONEY(ID,MONDATE,MONBEG,MONEND,MONRES,DAYOFWEEK)
VALUES(23,'08.03.2006',:BegSum,:EndSum,:Result,'Ср')
При попытке выполнить вылетает исключение:
arithmetic exception, numeric overflow or string truncation
Тоже самое говорит IBConsole при попытке выполнить запрос в Interactive SQL.
Суть задачи в том, что мне нужно хранить в полях MONBEG, MONEND и MONRES денежные суммы (рубли,копейки) и после запятой мне нужно только два знака. Думаю что конфликт возникает где-то в пределах между Float и Numeric. Но что к чему не разбирусь никак...
Добавлено: 09 мар 2006, 17:42
kdv
1. двойные кавычки у имени таблицы и столбцов зачем???
2. ошибка скорее всего из-за нечтения
www.ibase.ru/devinfo/ibrusfaq.htm
чарсет надо указывать в свойствах IBDatabase, в параметрах коннекта IBConsole, IBExpert и т.п..
Добавлено: 09 мар 2006, 18:17
Pavel_ch
двойные кавычки у имени таблицы и столбцов зачем???
Естественно, я так не делал когда таблицу создавал. Я ж написал, что это метаданные. Взял их из IBConsole
Я докопался до истины, у меня описание полей типа NUMERIC неверное было. Сделал NUMERIC(10,2) и всё заработало. У меня ж там рублей на десятки тысяч счёт идёт в одну запись, вот и не влезали они в мой тип данных.
Добавлено: 09 мар 2006, 18:29
kdv
Взял их из IBConsole
поставь IBExpert, IBConsole выкинь.
вот и не влезали они в мой тип данных
дык.

мог бы не экономить, и написать 15,2 или 18,2 - все равно начиная с 9,2 для numeric "внизу" используется один тип данных - int64 (в 3-ем диалекте).
Добавлено: 09 мар 2006, 19:14
Pavel_ch
поставь IBExpert, IBConsole выкинь.
Тока сегодня поставил. Вещь!
дык.

мог бы не экономить, и написать 15,2 или 18,2 - все равно начиная с 9,2 для numeric "внизу" используется один тип данных - int64 (в 3-ем диалекте).

Ну да, перебрал с легонца, там чисел таких и не будет, кажется.