![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Заполнение БД(FireBird 1.5) [D7]
Hell's Angel © (2006-08-14 02:09:00)Возникла следующая проблема:
При заполнении базы данных с помощью IBQuery (SQL запрос Insert) при занесении 3770-ой записи возникает ошибка:
EIBInterBaseError with message 'arithmetic exception,numeric overflow, or string truncation'.
Что Вы можете посоветовать? Заранее спасибо.
sniknik (2006-08-16 07:56:00) [1]> Запрос вида:
вот именно так как показано, без параметров или QuotedStr?... ну тогда ищи апостроф в проблемной записи... и кстати не видно почему бы значениям не быть длиннее чем размерность типа... (ни trim ни какого другого обрезания не делается, а источник (чем бы гарантировался определенный размер) не показан)
p.s. нафик "партизан", не буду больше отвечать если посчитаю, что вопрос не "раскрыт" полностью. (а то получаются какие то уговоры, выпрашивание инфы которую они дозируют сжав зубы... вообще проблема у него, а решить ее как будто больше нужно нам. детский сад блин...)
Hell's Angel (2006-08-15 21:07:00) [2]Запрос вида:
IBQuery1.SQL.Add('INSERT INTO sunrise_goods (name, price, warranty, category, id) VALUES ('''+strNameQuoted+''', '''+strPrice+''', '''+strWarranty+''', '''+IntToStr(categoryID)+''', '''+IntToStr(id)+''')');
sniknik (2006-08-15 12:53:00) [3]> И пусть Вас не смущают строки для чисел:)
меня не это "смущает", а практическая почти полная новозможность работы (нормальной естественно, а не просто отобразить, изменить) с базой в таком формате... то что в одной записи два типа разделителей вообще уникум, ... по глупости... такого просто не может быть (потому и предположил, что это просто опечатка при набивании здесь... а вторая запись сдесь же скопирована и немного поправлена...)
> А раньше что делал?
подозреваю, что общий запрос, формировал типа такого (пример, если конечно FB подобный синтаксис позволяет)
INSERT INTO .... () SELECT значение 1, 2, 3, ...
UNION ALL
SELECT значение 1, 2, 3, ...
UNION ALL
SELECT значение 1, 2, 3, ...
....
но партизаны не колятся! умрут но как делают не покажут! вместо этого расплывчатые ничего не обьясняющие "обьяснения".
(что уже начинает немного раздражать...)
Desdechado (2006-08-15 12:29:00) [4]> я сейчас вообще для каждой записи формирую SQL запрос
А раньше что делал?
А вообще лучше параметрический препарированный запрос в цикле.
> я сейчас вообще для каждой записи полный connect/disconnect БД
бедный сервер...
unknown (2006-08-15 12:14:00) [5]
> Hell's Angel © (15.08.06 12:10) [9]
Триггеров нет на вставку?
Hell's Angel (2006-08-15 12:10:00) [6]Нет, пример именно тот...И пусть Вас не смущают строки для чисел:) Пока что так надо.
Для чистоты эксперимента я сейчас вообще для каждой записи формирую SQL запрос и полный connect/disconnect БД.
Desdechado (2006-08-15 11:17:00) [7]> если делать массовое внесение данных в одной транзакции, то возможны проблемы
Делал миллионами, проблемне было. Тормоза - да. Каждая следующая вставляется чуть дольше предыдущей (ориентировочно на 0.5-1%).
sniknik (2006-08-14 20:23:00) [8]Hell's Angel © (14.08.06 02:09)
> с помощью IBQuery (SQL запрос Insert)
один запрос чтоли составляеш на все записи?
Hell's Angel © (14.08.06 19:07) [5]
строки для чисел? клево! в одном числе данных запятая разделитель в другом точка? фантастика! ... а работает при чтении данных наверное с переключением разделителя на середине записи, и обратно... чудно.
только не говори что здесь ошибся потому как это будет значить, что ты привел не реальные данные на которых возможно ошибка а сам их сдесь и придумал... (т.е. обманул) а просили скопировать.
и кстати для IB/FB вроде бы читал про "правило коротких транзакций" в смысле, если делать массовое внесение данных в одной транзакции то возможны проблемы. (тормоза точно, + насколько понимаю возможно переполнение внутреннего буфера/счетчиков/х.з. чего, точнее на сайте http://ibase.ruв доки) рекомендуют разбивать слишком массовое внесение на короткие транзакции (в цикл к примеру вставит пеодическое закрытие и сразу открытие)
p.s. пора по моему начинать банить за "партизанщину", типа, не привел исходных данных/как делает, ветку "к ногтю" как провокационную...
Desdechado (2006-08-14 19:21:00) [9]мож, пробельчики справа-слева?
Hell's Angel (2006-08-14 19:07:00) [10]Тяжело согласиться с вашими замечаниями.
Строка занесенная в БД:
(Данные) (Тип)
Корпус ModeCom Debut 350W Black VarChar(250)
1 203,09 VarChar(20)
12 VarChar(10)
44.94 VarChar(10)
Строка на которой происходит ошибка:
Корпус ModeCom ENJOY USB, audio, fan
1 081,28
12
40.39
Принципиальной разницы между строками не вижу!
Desdechado (2006-08-14 11:13:00) [11]перевожу:
ошибка при арифметической операции, переполнение числа или строки
по-русски:
пытаешься запихать в поле значение, которое больше, чем тип поддерживает (например, 1000000 в SMALLINT или '123' в CHAR(1))
или кодировка не та
Anatoly Podgoretsky (2006-08-14 10:16:00) [12]Иследовать проблему по месту.
Dok (2006-08-14 10:14:00) [13]Вставляешь строку которая больше, или не в той кодировке
dwar (2006-08-14 05:30:00) [14]Убрать из 3770-ой записи 'arithmetic exception,numeric overflow, or string truncation' и все