![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка при записи [D6, dBase, FoxPro]
paule © (2005-01-25 12:57:00)Есть 3 ADOTAble1,2 и 4. Связаны связью Master -Detail по ключевому полю
ADOTAble - master и остальные 2 подчинены!
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
ADOTable1.First;
ADOTable4.Open;
for i:=1 to ADOTable1.RecordCount do
begin
ADOTable1.Edit;
ADOTable1.FieldByName('Kodrab').AsString :='ÍÐ';
ADOTable1.FieldByName('ter_usl').AsString :='ÌÊÑ';
ADOTable1.FieldByName('FCData_RB').AsDateTime := StrToDate('01.04.2004');
ADOTable1.FieldByName('FCData_UV').AsDateTime :=StrToDate('31.12.2004');
if ADOTable2.FieldByName('cexs').AsInteger < 20 then
ADOTable1.FieldByName('koeff').AsFloat := 1.4
else
ADOTable1.FieldByName('koeff').AsFloat := 1.6;
ADOTable1.Post;
ADOTable4.Edit;
ADOTable4.First;
ADOTable4.FieldByName('L_adres').AsBoolean :=true;
ADOTable4.Post;
ADOTable1.Next;
end;
end;
Все вроде просто, но при работе дельфи выпадает с ошибкой и говорит. что ADOTable4: DataDet not in edit or insert mode.
Подскажите в чем проблема
Paule (2005-01-26 10:26:00) [1]Сейчас сделал по другому:
В один запрос ADOQuery свел две таблицы:
select * from spisok inner join svd on spisok.kl_pens = svd.kl_pens
и к ADOQuery цепляю таблицу ADOTable.
Вот код:
if ADOQuery1.Active = true then ADOQuery1.Close;
ADOQuery1.Open;
if ADOTable2.Active = true then ADOTable2.Close;
ADOTable2.Open;
for i:=1 to ADOQuery1.RecordCount do
begin
ADOQuery1.Edit;
ADOQuery1.FieldByName('Kodrab').AsString :='ÍÐ';
ADOQuery1.FieldByName('ter_usl').AsString :='ÌÊÑ';
ADOQuery1.FieldByName('FCData_RB').AsDateTime := ADOTable2.FieldByName('one_date').AsDateTime;
ADOQuery1.FieldByName('FCData_UV').AsDateTime :=StrToDate('31.12.2004');
if ADOTable2.FieldByName('cexs').AsInteger < 20 then
ADOQuery1.FieldByName('koeff').AsFloat := 1.4
else
ADOQuery1.FieldByName('koeff').AsFloat := 1.6;
ADOQuery1.FieldByName('L_adres').AsBoolean :=true;
ADOQuery1.Post;
end;
поле L_adres из таблицы svd остальные из spisok.
В итоге на команде Post - выпадает с ошибкой:
"Недостаточно сведений ключевого поля для обновления"
Посоветуйте чтонибудь пожалуйста!
paule (2005-01-26 03:14:00) [2]нет..
ну программно точно не изменяю.
Johnmen (2005-01-25 13:42:00) [3]Видимо изменяешь значение ключевого поля ADOTable1, то, по которому связка...
paule (2005-01-25 13:30:00) [4]если так сделать,
ADOTable4.First;
ADOTable4.Edit;
ADOTable4.FieldByName('L_adres').AsBoolean :=true;
ADOTable4.post;
ADOTable1.Next;
то
при втором выполнении (ну тоесть один раз срабатывает нормально) ADOTable1.Next;
вылетает ошибка
Не удается найти строку для обновления. Некоторые значения могли быть изменены со времени её последнего чтения
Johnmen (2005-01-25 13:23:00) [5]1. Где ADOTable2.Open ?
2. >for i:=1 to ADOTable1.RecordCount doобходят не так.
3. >ADOTable4.Edit;...а если нет записей в нем ?
И, наконец, ошибка.
ADOTable4.Edit;
ADOTable4.First;
Вызов фёрста приведет к выходу из режима редактирования. Ку?
Т.е. местами поменять...