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

Либо
INSERT INTO SCHEMA.TABLE1
(ID, NAME)
VALUES(DEFAULT, :NAME)
...
Рейтинг: 0 / 0
16.09.2003, 10:13
    #32265964
Alexey Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi5 с DB2
Но такие вещи при работе с 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
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi5 с DB2 / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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