Форум: "Базы";
Текущий архив: 2003.05.08;
Скачать: [xml.tar.bz2];
ВнизInsert в SQL 3 Найти похожие ветки
← →
Tomkat (2003-04-16 16:06) [0]Уважаемые Мастера ! Проблема - при заполнения ключевого поля генератором получаю ошибку "Incorrect values within SQLDA structure". В 1-м диалекте такого не наблюдалось
Причем вручную (IBExpert) вставляет без проблем, а из программы - трабл....
← →
Жук (2003-04-16 16:11) [1]А как происходит "заполнение ключевого поля генератором" ?
← →
Соловьев (2003-04-16 16:13) [2]поля и таблицы в кавычки надо брать.
← →
Tomkat (2003-04-16 16:41) [3]
> А как происходит "заполнение
IBDataSet.GeneratorField
указываю что, чем и когда заполнять
← →
Tomkat (2003-04-16 16:42) [4]
> поля и таблицы в кавычки надо брать.
это вроде тока если имена полей и таблиц нестандартные (мааленькими букавами и пр)...Вроде так в доке написано ...
← →
Жук (2003-04-16 16:49) [5]А когда ругаться начинает ? На IBDataSet.Append ?
← →
Tomkat (2003-04-16 16:53) [6]IBDataSet.Insert - если GeneratorField настроен на New Record
IBDataSet.Post - если GeneratorField настроен на Post
← →
Жук (2003-04-16 16:58) [7]Похоже, что почему-то не генерится новое значение.
select gen_id(mygener,1)
Такой запрос нормально выполняется ?
from rdb$database
← →
Tomkat (2003-04-16 17:33) [8]на ура ,
вручную в IBExpert вставляется
INSERT INTO table1 (id,name)
values (gen_id(mygen,1),:name)
без проблем
← →
Tomkat (2003-04-17 09:02) [9]плиз, хелп , работа стала....
← →
Johnmen (2003-04-17 09:48) [10]Подробности :
1. Список полей и их свойства ?
2. Как идет указание "что, чем и когда заполнять " ?
3. Как выглядят запросы SelectSQL, InsertSQL и т.д. ?
← →
Tomkat (2003-04-17 10:12) [11]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)
← →
Max Zyuzin (2003-04-17 10:19) [12]>Tomkat © (17.04.03 10:12)
Из InserSQL нафиг убрать добавление ID у тебя он добавляется триггером.
Кстати можно на него посмотреть?
← →
Жук (2003-04-17 10:19) [13]InsertSql:
insert into BANKS
(ID, BANKNAME, MFO, CITY)
values
(?new_ID, ?new_BANKNAME, ?new_MFO, ?new_CITY)
← →
Tomkat (2003-04-17 10:28) [14]нет у меня там никакого тригера !
на 1 диалекте работает все как указал - поле заполняется на КЛИЕНТЕ, а
> (?new_ID, ?new_BANKNAME, ?new_MFO, ?new_CITY)
- вроде нет разницы, как параметры обзывать, если впереди них стоит ":"
← →
Max Zyuzin (2003-04-17 10:32) [15]>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:38) [16]делал я так , ничего хорошего не получилось - тот же результат.
это все 3 диалект, шо-то там не то .....
← →
Johnmen (2003-04-17 10:43) [17]Смущает то, что генераторное поле BANKS_ID, а реальное ключевое ID...
← →
Max Zyuzin (2003-04-17 10:52) [18]>Tomkat © (17.04.03 10:38)
А в чем, если не секрет, причина отказа от триггеров? ИМХО все можно сделать как в книжке :-)
← →
Johnmen (2003-04-17 10:54) [19]Только что попробовал так делать - все замечательно...(1 диал.)
Если 3 диал., то все имена с учетом регистра.
← →
Alexandr (2003-04-17 13:40) [20]посмотрите на ошибку
"Incorrect values within SQLDA structure".
и спросите у него, какой тип данных у поля, заполняемого генератором, какая у него версия сервера и шо за домен ID_KEY
да, и через какие компоненты он работает...
← →
Tomkat (2003-04-17 14:21) [21]
> и спросите у него,
отвечаю:
DOMAIN ID_KEY AS
INTEGER
NOT NULL
Banks.ID :integer
компоненты IBX 6.05
← →
Tomkat (2003-04-17 14:23) [22]...сервер WI-T6.2.679 Firebitr Release Candidate 2
← →
sunrider (2003-04-17 14:40) [23]Желательно избавиться от прямого вызова генератора и воспользоваться триггером 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 15:31) [24]
> определять id оператором select max(id)+1)
ит что произойдет, когда два пользователя одновременно будут добавлять записи?
при незавершенной транзакции информации о последней записи и , следовательно, наибольшем значении ID не будет в базе, она будет на клиентской машине , тоесть max(id)+1) на другом клиенте дас тот же результат и будет у меня две записи с одниковым ID , но поскольку по нему уникальный индекс, то получится ТРАБЛ .
если не прав - расскажите, я сам не профи :-))
← →
Alexandr (2003-04-17 15:33) [25]генераторы не 64битные в Firebird в 3 диалекте?
вообщем, проблема по-моему в том, что IBX не поддерживает Firebird.
← →
Johnmen (2003-04-17 15:36) [26]>Tomkat © (17.04.03 15:31)
Насчет max(id)+1) правильно говоришь - так можно только если 1 и только 1 пользователь ! И если нет механизма генерации уникальных значений ! Но этот случай - не наш...
← →
Tomkat (2003-04-17 15:40) [27]
> генераторы не 64битные в Firebird в 3 диалекте?
кажисть да ...
есть еще тип INT64 - что это ?
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.05.08;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.009 c