try...finally... правильно ли сделал?

Модераторы: Duncon, Naeel Maqsudov, Хыиуду, Игорь Акопян

Ответить
Dr_Grizzly
Сообщения: 406
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

12 фев 2008, 11:06

Всем привет! Такая вот проблема. Есть две таблицы. В первой таблице есть поле key типа счетчик, во второй есть поле tab1_key типа число. Делаю следующее:
Adotable1.insert;
adotable1.fields.field[2].text:='asdf';
adotable1.fields.field[3].text:='545';
adotable1.fields.field[4].text:='345';
Adotable1.post;
Adotable2.insert;
adotable2tab1_key=adotable1key.text;
adotable2.fields.field[2].text:='asdf';
adotable2.fields.field[3].text:='6456';
adotable2.post;

Все это весит на одной кнопке в этом порядке. Иногда бывает что таблица 1 еще не успела создать запись как вторая создала, и получился разрыв связи. Не знаю от чего это зависит, толи от тормозного компа, толи еще чаво. Пробую следующее:
try
Adotable1.insert;
adotable1.fields.field[2].text:='asdf';
adotable1.fields.field[3].text:='545';
adotable1.fields.field[4].text:='345';
finally
Adotable1.post;
try
Adotable2.insert;
adotable2tab1_key=adotable1key.text;
adotable2.fields.field[2].text:='asdf';
adotable2.fields.field[3].text:='6456';
finally
adotable2.post;
end;
end;
Действительно ли будет так, что пока первая таблица не создаст запись, вторая не начнет создавать новую запись?
Или я заблуждаюсь в использовании этого алгоритма? Посоветуйте плииз...
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Аватара пользователя
Игорь Акопян
Сообщения: 1419
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

12 фев 2008, 13:43

заблуждаешься.
блок try..finally лишь позволит корректно обработать исключение. Хотя в твойм случае ничего не изменится
Изображение
Dr_Grizzly
Сообщения: 406
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

13 фев 2008, 14:54

Есть какие-нибудь соображения в этом направлении? Как заставить подождать пока не одна таблица не закончит добавление записи?

Или может кто может подсказать каким способом можно генерировать постоянно новый ключевой код? Было соображение чтобы взять цыфры даты и времени и прибавить их к какому-нибудь числу, повторения же тут исключены?
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Аватара пользователя
Игорь Акопян
Сообщения: 1419
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

14 фев 2008, 15:38

честно сказать не представляю что должно лежать в таблице с какими адскими индексами и триггерами, чтобы таблица не успела запостить значение... Что хоть за БД?
Изображение
Dr_Grizzly
Сообщения: 406
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

14 фев 2008, 17:38

Как бы правильно объяснить, в первой таблице заполняются 26 полей, а во второй 8 полей, и вот курсор отладчика дошел до AdoTable1.post и пошел дальше, первая таблица еще не обновилась, а вторая уже заполнилась и естественно с пустым ключевым полем от первой табл., вот и получается разрыв. База в Access. Но я не говорю что каждый раз такое, но иногда проскакивает.
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Dr_Grizzly
Сообщения: 406
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

14 фев 2008, 17:39

я подразумеваю это связано на прямую с производительностью компа, хотя не уверен......
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Ответить