Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.08;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.02 c
14-23346
sashundra
2003-04-18 15:17
2003.05.08
с Fox Pro yf на Delphi


14-23376
earthman
2003-04-21 15:41
2003.05.08
Зацените сайт


14-23280
Kapitan
2003-04-18 11:36
2003.05.08
Register Delphi


3-22908
Silver_
2003-04-16 16:49
2003.05.08
ADODataSet.Filter - с датой и ВРЕМЯ как правильно создать


14-23399
wQH
2003-04-22 05:28
2003.05.08
нету twebbrowser и остальных компонент! вместе с закаладкой!