![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Insert в SQL 3 [D6, IB6.x]
Tomkat © (2003-04-16 16:06:00)Уважаемые Мастера ! Проблема - при заполнения ключевого поля генератором получаю ошибку "Incorrect values within SQLDA structure". В 1-м диалекте такого не наблюдалось
Причем вручную (IBExpert) вставляет без проблем, а из программы - трабл....
Tomkat (2003-04-17 15:40:00) [1]
> генераторы не 64битные в Firebird в 3 диалекте?
кажисть да ...
есть еще тип INT64 - что это ?
Johnmen (2003-04-17 15:36:00) [2]>Tomkat © (17.04.03 15:31)
Насчет max(id)+1) правильно говоришь - так можно только если 1 и только 1 пользователь ! И если нет механизма генерации уникальных значений ! Но этот случай - не наш...
Alexandr (2003-04-17 15:33:00) [3]генераторы не 64битные в Firebird в 3 диалекте?
вообщем, проблема по-моему в том, что IBX не поддерживает Firebird.
Tomkat (2003-04-17 15:31:00) [4]
> определять id оператором select max(id)+1)
ит что произойдет, когда два пользователя одновременно будут добавлять записи?
при незавершенной транзакции информации о последней записи и , следовательно, наибольшем значении ID не будет в базе, она будет на клиентской машине , тоесть max(id)+1) на другом клиенте дас тот же результат и будет у меня две записи с одниковым ID , но поскольку по нему уникальный индекс, то получится ТРАБЛ .
если не прав - расскажите, я сам не профи :-))
sunrider (2003-04-17 14:40:00) [5]Желательно избавиться от прямого вызова генератора и воспользоваться триггером before insert. И вызвать генератор
там (или вобще его не использовать а определять id оператором select max(id)+1) может не очень быстро зато без проблем в любом диалекте Вот например :
declare variable nid integer;
begin
select max(id)+1 from bank
into :nid;
if (nid is null) then
new.id=1;
else
new.id=:nid;
end
Потом уже можно в insert - id не определять
Tomkat (2003-04-17 14:23:00) [6]...сервер WI-T6.2.679 Firebitr Release Candidate 2
Tomkat (2003-04-17 14:21:00) [7]
> и спросите у него,
отвечаю:
DOMAIN ID_KEY AS
INTEGER
NOT NULL
Banks.ID :integer
компоненты IBX 6.05
Alexandr (2003-04-17 13:40:00) [8]посмотрите на ошибку
"Incorrect values within SQLDA structure".
и спросите у него, какой тип данных у поля, заполняемого генератором, какая у него версия сервера и шо за домен ID_KEY
да, и через какие компоненты он работает...
Johnmen (2003-04-17 10:54:00) [9]Только что попробовал так делать - все замечательно...(1 диал.)
Если 3 диал., то все имена с учетом регистра.
Max Zyuzin (2003-04-17 10:52:00) [10]>Tomkat © (17.04.03 10:38)
А в чем, если не секрет, причина отказа от триггеров? ИМХО все можно сделать как в книжке :-)
Johnmen (2003-04-17 10:43:00) [11]Смущает то, что генераторное поле BANKS_ID, а реальное ключевое ID...
Tomkat (2003-04-17 10:38:00) [12]делал я так , ничего хорошего не получилось - тот же результат.
это все 3 диалект, шо-то там не то .....
Max Zyuzin (2003-04-17 10:32:00) [13]>Tomkat © (17.04.03 10:28)
ЭЭЭээ ммм... А что мешает делать запрос такого вида?
insert into BANKS
(ID, BANKNAME, MFO, CITY)
values
(gen_id(mygen,1), :BANKNAME, :MFO, :CITY)
Tomkat (2003-04-17 10:28:00) [14]нет у меня там никакого тригера !
на 1 диалекте работает все как указал - поле заполняется на КЛИЕНТЕ, а
> (?new_ID, ?new_BANKNAME, ?new_MFO, ?new_CITY)
- вроде нет разницы, как параметры обзывать, если впереди них стоит ":"
Жук (2003-04-17 10:19:00) [15]InsertSql:
insert into BANKS
(ID, BANKNAME, MFO, CITY)
values
(?new_ID, ?new_BANKNAME, ?new_MFO, ?new_CITY)
Max Zyuzin (2003-04-17 10:19:00) [16]>Tomkat © (17.04.03 10:12)
Из InserSQL нафиг убрать добавление ID у тебя он добавляется триггером.
Кстати можно на него посмотреть?
Tomkat (2003-04-17 10:12:00) [17]TABLE BANKS
ID ID_KEY NOT NULL,
BANKNAME varchar(50),
MFO TEXT varchar(6),
CITY TEXT varchar(50)
ALTER TABLE BANKS ADD CONSTRAINT PK_BANKS PRIMARY KEY (ID);
IBDatasetBanks.GeneratorField:=BANKS_ID -> ID By 1
ApplyEvent : on New Record
SelectSql:
select * from BANKS
order by BANKNAME
InsertSql:
insert into BANKS
(ID, BANKNAME, MFO, CITY)
values
(:ID, :BANKNAME, :MFO, :CITY)
Johnmen (2003-04-17 09:48:00) [18]Подробности :
1. Список полей и их свойства ?
2. Как идет указание "что, чем и когда заполнять " ?
3. Как выглядят запросы SelectSQL, InsertSQL и т.д. ?
Tomkat (2003-04-17 09:02:00) [19]плиз, хелп , работа стала....
Tomkat (2003-04-16 17:33:00) [20]на ура ,
вручную в IBExpert вставляется
INSERT INTO table1 (id,name)
values (gen_id(mygen,1),:name)
без проблем