Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.08.2008, 16: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, 16:40   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Потому как все портит 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, 16:47   #3
Tanuska___:)
Пользователь
 
Аватар для Tanuska___:)
 
Регистрация: 22.04.2008
Сообщений: 84
По умолчанию

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

Вроде нет. все в DB должно быть.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.08.2008, 17: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___:) вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



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