|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
помогите разобратся !!!
Всем здравствуйте ! имеются 2 таблицы, я в циклах хочу чтобы по названию например товара во второй таблице например прихода перебирало все записи и если название совпадают, то то суммировало данные из поля количество.....
var // объявление переменной для назв товара nazv: string; //объявление переменных для прихода p_kol_vo: integer; begin DataModule1.ADOTablePrihod.First; DataModule1.ADOTableTovars.First; p_kol_vo := 0; while not DataModule1.ADOTableTovars.Eof do begin nazv := DataModule1.ADOTableTovars.FieldByName('tovars_naz v_id').AsString; while not DataModule1.ADOTablePrihod.Eof do begin if DataModule1.ADOTablePrihod.FieldByName('prihod_tov ar').AsString = nazv then p_kol_vo := p_kol_vo +DataModule1.ADOTablePrihod.FieldByName('prihod_ko l-vo').AsInteger; //end; // while DataModule1.ADOTableTovars.Next; end; // while DataModule1.ADOTableTovars.Append; DataModule1.ADOTableTovars.FieldByName('tovars_pri hod_kol-vo').Value := p_kol_vo; DataModule1.ADOTableTovars.Post; end; При попытке запуска кода - всё виснет.... не понимаю почему..... |
#2
|
||||
|
||||
Потому что у тебя никогда не закончится второй while, а не закончится он по причине общей кривизны кода
Вообще данный метод нахождения чего либо на мой взгляд слишком тормозной. Если у тебя в приложении связь с БД настроена через ADOConnection то могу предложить следующее: Код:
function Get_p_kol_vo(nazv:string):integer; var Q:TADOQuery; begin Q:=TADOQuery.Create(nil); with Q do begin Connection:=ADOConnection1; //если есть, или путь к БД SQL.Text:='SELECT SUM([Prihod_Kol-vo]) as PR_SUM FROM Prihod WHERE Prihod_Tovar = :nazv'; Parameters.ParseSQL(SQL.Text,True); Parameters.ParamByName('nazv').Value:=nazv; Open; Result:=FieldByName('PR_SUM').AsInteger; Close; end; Q.Free; end; пример вызова: Код:
Get_p_kol_vo(DataModule1.ADOTableTovars.FieldByName('tovars_naz v_id').AsString) ЗЫЖ Желательно еще прикрутить обработку ошибок ЗЗЫЖ Набирал прямо в explorer'е поэтому за синтаксис не ручаюсь |
#3
|
|||
|
|||
Спасибо... Попробую... А насчёт кривизны - не обессудте.... Я ещё только учусь......
p.s. если не сложно - укажите на "кривизну" кода... дабы не повторять этих ошибок в будущем........ Последний раз редактировалось alekslep, 30.06.2006 в 15:10. |
#4
|
|||
|
|||
ps
кстати.... я разобрался.... во втором цикле над добавить ...... Next;
и всё работает...... |
#5
|
||||
|
||||
А теперь попробуй твой и мой варианты на базе где в таблицах записей по 500 000
|