Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 07.08.2008, 15:19   #1
Tanuska___:)
Пользователь
 
Аватар для Tanuska___:)
 
Регистрация: 22.04.2008
Сообщений: 84
По умолчанию Помогите исправить код

Код:
var
    i:integer;
 Begin
  DM.resultat.Active:=True;
   DM.resultat.First;
while not DM.resultat.Eof do
   begin
 if dm.resultat.Locate('ID_C',DM.klient.FieldByName('ID_C').AsInteger,[]) then
    begin
dm.resultat.Edit;
dm.resultat.FieldByName('ФИО').AsString:=DM.klient.Fields.Fields[1].AsString;
dm.resultat.Post;
   end;
DM.resultat.Next;
    end;
 end;
этот код для того чтобы при изменении в одной таблицы (klient) автоматически обнавлялись такие же записи в другой (resultat)
но у меня этот код останавливается в режиме редактора klient и висит .... в общем в чем может быть ошибка?
Tanuska___:) вне форума Ответить с цитированием
Старый 07.08.2008, 15:40   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

Потому как все портит Locate.
Перед ним нужно запоминать позицию,и после него перескакивать на нее, в этом тебе помогут BookMarks
Код:
var SavePlace: TBookmark;
...
while not DM.resultat.Eof do   
   begin   
SavePlace := GetBookmark;

 if dm.resultat.Locate('ID_C',DM.klient.FieldByName('ID_C').AsInteger,[]) then   
    begin   
    dm.resultat.Edit;   
    dm.resultat.FieldByName('ФИО').AsString:=DM.klient.Fields.Fields[1].AsString;   
    dm.resultat.Post;  
    GotoBookmark(SavePlace);
   end;   
DM.resultat.Next;   
    end;
Или альтернатива получше SQL-UPDATE.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.08.2008, 15:47   #3
Tanuska___:)
Пользователь
 
Аватар для Tanuska___:)
 
Регистрация: 22.04.2008
Сообщений: 84
По умолчанию

А библиотеку подключать к TBookmark не нужно никакую?
Tanuska___:) вне форума Ответить с цитированием
Старый 07.08.2008, 16:12   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

Вроде нет. все в DB должно быть.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.08.2008, 16:40   #5
Tanuska___:)
Пользователь
 
Аватар для Tanuska___:)
 
Регистрация: 22.04.2008
Сообщений: 84
По умолчанию

используя TBookmark
Код:
 var
   i:integer;
    SavePlace: TBookmark;
       begin
       DM.resultat.Active:=true;
       dm.resultat.First;
   while not DM.resultat.Eof do
    begin
  SavePlace := dm.resultat.GetBookmark;
     if dm.resultat.Locate('ID_C',DM.klient.FieldByName('ID_C').AsInteger,[]) then
       begin
      dm.resultat.Edit;
      dm.resultat.FieldByName('ФИО').AsString:=DM.klient.Fields.Fields[1].AsString;
       dm.resultat.Post;
     dm.resultat.GotoBookmark(SavePlace);
    end;
   
  DM.resultat.Next;
       end;
     end;
у меня ничего не изменилось ....
а если использовать sql-update :
он должен выглядеть как то так?
Код:
DM.SQLresultat.SQL.Text:= 'update люди set ФИО='''+DM.klient.Fields.Fields[1].AsString+''' where ID_C ='+IntToStr(DM.klient.FieldByName('ID_C').AsInteger);
Tanuska___:) вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме 20000 рублей в месяц

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите исправить L_M Помощь студентам 3 08.06.2008 00:06
Помогите исправить NeiL Общие вопросы C/C++ 1 31.05.2008 12:31
Помогите исправить код student_63 Помощь студентам 5 13.12.2007 18:20
Помогите исправить обработчик! Mr.User Помощь студентам 11 05.12.2007 22:09


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS