powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi5 с DB2
4 сообщений из 4, страница 1 из 1
Delphi5 с DB2
    #32265815
TanyaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите, с такой проблемой:
Нужно добавить запись в таблицу DB2, у которой идентификатор Id генерируется автоматически, (задано при формировании таблицы.
При Insert идентификатор не формируется - как быть?
Подставить значение Id тоже запрещается...
...
Рейтинг: 0 / 0
Delphi5 с DB2
    #32265927
Mik Prokoshin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А работа через АДО ?
Однозначно пока можно сказать только одно - после Post можно делать Requery (Close; Open;)
...
Рейтинг: 0 / 0
Delphi5 с DB2
    #32265937
Фотография Alexey Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего этому полю не следует указывать явное значение при INSERT'е
Попробуй по схеме:
INSERT INTO SCHEMA.TABLE1
(NAME)
VALUES(:NAME)

Либо
INSERT INTO SCHEMA.TABLE1
(ID, NAME)
VALUES(DEFAULT, :NAME)
...
Рейтинг: 0 / 0
Delphi5 с DB2
    #32265964
Фотография Alexey Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но такие вещи при работе с DB2 легко решаются если ID поле создавать:
CREATE TABLE DB2ADMIN.TEST_1
(ID CHARACTER(13) FOR BIT DATA NOT NULL DEFAULT '',
NAME VARCHAR(64),
PRIMARY KEY (ID))
IN DATA_TABLESPACE
INDEX IN INDEX_TABLESPACE;

Создаем триггер на случай по DEFAULT:
CREATE TRIGGER DB2ADMIN.TEST_1_B_INS_0
NO CASCADE BEFORE INSERT ON DB2ADMIN.TEST_1
REFERENCING NEW AS NEWROW
FOR EACH ROW MODE DB2SQL
WHEN (NEWROW.ID = '')
BEGIN ATOMIC
SET NEWROW.ID = GENERATE_UNIQUE();
END

Далее, если приложение нуждается в генерации явного ID, то берется Query, где Query1.SQL.Text = 'SELECT NUM.NUM FROM (VALUES(GENERATE_UNIQUE())) AS NUM(NUM)'
И оформляется функция:
function TDataModule1.GenerateUnique: Variant;
begin
Self.Query1.Open;
Result:= Self.Query1.FieldByName('NUM').Value;
Self.Query1.Close
end;

И на нужный DataSet "вешаем" событие:
procedure TForm1.QueryData.OnNewRecord(DataSet: TDataSet);
begin
DataSet.FieldByName('ID').Value:= DataModule1.GenerateUnique
end;
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi5 с DB2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]