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

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

Ошибка при записи [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;

Вызов фёрста приведет к выходу из режима редактирования. Ку?
Т.е. местами поменять...


Наверх

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