Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Table.Locate не правильно ищет по 2 полям   Найти похожие ветки 

 
Студент   (2010-06-01 16:18) [0]

Уважаемые Мастера, пожалуйста подскажите почему в данном коде не правильно происходит поиск по 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;


 
Anatoly Podgoretsky ©   (2010-06-01 16:22) [1]

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

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


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

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


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

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

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


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


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


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

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


 
icWasya ©   (2010-06-02 10:06) [5]

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



Страницы: 1 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.069 c
15-1274335111
AKE
2010-05-20 09:58
2010.08.27
Идея консольной операционки(или рабочего стола).


11-1216886396
rainstuff
2008-07-24 11:59
2010.08.27
Отключение дисплея


15-1267574302
DillerXX
2010-03-03 02:58
2010.08.27
Может тут мне помогут с вопросом о модеме?


4-1234253553
OlegNik
2009-02-10 11:12
2010.08.27
Доп. информация об устройствах.


6-1217411834
Lamer666
2008-07-30 13:57
2010.08.27
Сессии HTTPS