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

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

Table.Locate не правильно ищет по 2 полям [D7, XP]


Студент ©   (2010-06-01 16:18:00) 

Уважаемые Мастера, пожалуйста подскажите почему в данном коде не правильно происходит поиск по 2 полям. Есть 2 таблицы, одинаковые по структуре.
У обоих есть поля, RNN, SUMP, NUMRS. Нужно копировать данные из одной таблицы в другую, с условием что там нет записей с таким же значением RNN и  NUMRS, иначе надо отредактировать эту записи и просуммировать поля SUMP. Сейчас у меня не происходит поиск по 2 полям, происходит только по одному полю. Подскажите, где ошибка.

procedure TForm1.Button1Click(Sender: TObject);
var
 i : integer;
 RNN, NUMRS, FName : String;
 Sum : Real;
begin
 Table1.First;
 While not Table1.Eof do
 begin
   RNN := Table1.FieldByName('RNN').AsString;
   NUMRS := Table1.FieldByName('NUMRS').AsString;
   // Ищим РНН и NUMRS , если такого РНН и NUMRS нету то добавляем всю запись во вторую таблицу
   if (not Table2.Locate('RNN', RNN, [])) and (not Table2.Locate('NUMRS', NUMRS, []) ) then
   begin
     Table2.Append;
     // бежим по всем полям первой таблицы и переносим во вторую
     for i := 0 to Table1.FieldCount - 1 do
     begin
       FName := Table1.Fields[i].FieldName; // получаем имя поля
       Table2.FieldByName(FName).AsString := Table1.FieldByName(FName).AsString;
     end;
     Table2.Post; // сохраняем
     Table2.First;
   end
   else // Если такой РНН и NUMRS  есть, редактируем запись и суммируем суммы
   begin
     Table2.Edit;
     Table2.FieldByName('SUMP').AsFloat := Table1.FieldByName('SUMP').AsFloat + Table2.FieldByName('SUMP').AsFloat;
     Table2.Post;
   end;
   Table1.Next;
 end;
end;


icWasya   (2010-06-02 10:06:00) [1]

if (not Table2.Locate('RNN;NUMRS',VarArrayOf( [RNN,NUMRS] ), []) ) then


Плохиш   (2010-06-01 23:15:00) [2]


> Table.Locate не правильно ищет по 2 полям


>    if (not Table2.Locate('RNN', RNN, [])) and (not Table2.
> Locate('NUMRS', NUMRS, []) ) then
>

И в каком месте здесь Locate по двум полям?


Anatoly Podgoretsky   (2010-06-01 19:18:00) [3]

> Студент  (01.06.2010 16:30:02)  [2]

Зачем, надо просто писать в соотвествии со справкой, а не создавать
велосипед.


Студент   (2010-06-01 16:30:00) [4]

Все понял, поиск происходит 2 раза а не по 2 полям. В качестве временного решения написал свой поисковик. А так, запросы это хороший совет. Спасибо.


Anatoly Podgoretsky   (2010-06-01 16:22:00) [5]

> Студент  (01.06.2010 16:18:00)  [0]

В общем, что бы не тратить пальцы, используй запросы.


Наверх

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