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

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

ХЕЛППП!!! BDEError Record/Key Deleted [D7, IB6.x]


Страницы:   1 2

tytus ©   (2006-01-11 15:32:00) 

Господа помогите! Уже который день пытаюсь разобраться -ничего не помогает. В модуле данных - DataBase, два TTable мастер-деталь. В БД по одному первичному ключу на таблицу, плюс Reference Constraint в детальной - связывает поле с первичным ключем главной таблицы(ID) и не индексным в детали. Записываю данные так:
Append;
if not MasterTable.Locate('Field1;Field2;Field3',VarArrayOf([Data1,Data2,Data3]),[]) then begin//- работает 100%
MasterTable.Fields[0].AsInteger:=1;//если этого не делать, то будет ругаться Fields(ID) must have value (должно быть значение, всеравно потом генератором затрется)
MasterTable.Fields[n].AsInteger:=...;
Post;
TempID:=MasterTable.Fields[0].AsInteger;
end else
TempID:=MasterTable.Fields[0].AsInteger;
...
Append;
DetailTable.Fields[0].AsInteger:=1;
DetailTable.Fields[1].AsInteger:=TempID;//-для связи главн.-дет.
DetailTable.Fields[n].AsInteger:=...;
Post;
Ключевые поля Fields[0] записываются тригерами BEFORE INSERT.
Когда БД пустая, то все работает. Если попытаться вносить данные снова, то ругается Record/Key deleted (я так подозреваю, что не может выполнить Locate...)


evvcom   (2006-01-11 16:30:00) [21]


> tytus

Ты уж сделай Copy&Paste из кода сюда, тогда будем разговаривать. А то тут читать, тут не читать, тут рыбу заворачивать. По тексту Append и Post в контексте какого класса (объекта) выполняются? В TForm1 их точно нет. И как тебе помочь, если ты сам толком не знаешь, как у тебя в оригинале написано?


Johnmen   (2006-01-11 16:25:00) [22]

Ну я прям не знаю....
Брось ты это БДЕ, как все нормальные люди. Используй компоненты прямого доступа. Напр. стандартные IBX.


tytus   (2006-01-11 16:18:00) [23]

[6]
Ан-нет! Делал я локейт после вставки, и ничего не помогает, БОЛЕЕ ТОГО, ругается и без локейта... Но мы забыли ГЛАВНОЕ - КОГДА БД ПУСТАЯ, ТО ВСЕ ЗАНОСИТСЯ ВЕЛЕКОЛЕПНО! и получается, в главной - около 30 записей, а в детали - соотвт. 30*96 и все работает, и со связью...!


Johnmen   (2006-01-11 16:14:00) [24]

Есть предположение, что после вставки новой записи в мастера ты неправильно получешь значение ID.
И, естественно, при вставке в деталь этого ID будет вышеуказанная ошибка.


tytus   (2006-01-11 16:07:00) [25]

[3]
Locate-для главной таблицы. Если запись уже есть, то в главную писать ее не надо, нужно получить ее ID и писать в деталь. (Обрабытываю файл, в нем значения в перемешку, нужно одному значению главной таблицы присвоить 96 записей в детали. Вот для этого и нужен Локейт!)
[4]
Все делается - первый Append Post для главной (MasterTable.Append, MasterTable.Post)-второй для детали. Суть то не в этом...
...Но и за это списибо, хоть кто-то пытается мне помочь!


Desdechado   (2006-01-11 16:00:00) [26]

а "по памяти" другие ошибки не закрались?
например, Append и Post в детали не делается (как и в мастере), зато дважды делается неизвестно где


Johnmen   (2006-01-11 15:59:00) [27]

Зачем делать локейт, если сразу потом будет аппенд???


tytus   (2006-01-11 15:54:00) [28]

[1]
Спасибо, но я перепутал - все правильно, у мекня вначале локате, а уже потом Append... Просто инет на другом компе, и по-памяти мог и ошибится...
Дак в чем проблема, если не в этом?


Johnmen   (2006-01-11 15:45:00) [29]

>Append;
>if not MasterTable.Locate('Field1;Field2;Field3',VarArrayOf([Data1,Data2,Data3]),[]) then begin//- работает 100%
>MasterTable.Fields[0].AsInteger:=1;//если этого не делать, то будет ругаться Fields(ID) must have value (должно быть значение, всеравно потом генератором затрется)
>MasterTable.Fields[n].AsInteger:=...;

Вот что странно, сначала переводишь НД в режим dsInsert, а потом ищешь!!!!
А поиск, он сбрасывает режим в dsBrowse, выполняя неявный Post.

Вобщем, надо подчитать матчасть...:)


Страницы:   1 2

Наверх

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