Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Insert в SQL 3 [D6, IB6.x]


Страницы:   1 2

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)
без проблем


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо