Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.01 c
3-22916
Sour
2003-04-19 08:34
2003.05.08
Выделить элемент TDBLookupListBox (TDBLookupComboBox)


1-23167
Manulo
2003-04-24 14:20
2003.05.08
Динамическое создание компонентов.


3-23037
Rise
2003-04-18 16:01
2003.05.08
DBGrid и Real


1-23110
maxon
2003-04-24 09:51
2003.05.08
string -> PAnsiChar


14-23400
Vlad Oshin
2003-04-16 10:13
2003.05.08
Прошу помощи. Проверте пожалуйста ссылку. У меня таймаут





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский