Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 30.06.2006, 13:25
alekslep alekslep вне форума
Прохожий
 
Регистрация: 30.06.2006
Сообщения: 3
Репутация: 10
Вопрос помогите разобратся !!!

Всем здравствуйте ! имеются 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  
Старый 30.06.2006, 14:02
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Потому что у тебя никогда не закончится второй 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  
Старый 30.06.2006, 15:08
alekslep alekslep вне форума
Прохожий
 
Регистрация: 30.06.2006
Сообщения: 3
Репутация: 10
Радость

Спасибо... Попробую... А насчёт кривизны - не обессудте.... Я ещё только учусь......
p.s. если не сложно - укажите на "кривизну" кода... дабы не повторять этих ошибок в будущем........

Последний раз редактировалось alekslep, 30.06.2006 в 15:10.
Ответить с цитированием
  #4  
Старый 30.06.2006, 16:47
alekslep alekslep вне форума
Прохожий
 
Регистрация: 30.06.2006
Сообщения: 3
Репутация: 10
По умолчанию ps

кстати.... я разобрался.... во втором цикле над добавить ...... Next;
и всё работает......
Ответить с цитированием
  #5  
Старый 03.07.2006, 06:30
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

А теперь попробуй твой и мой варианты на базе где в таблицах записей по 500 000
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 03:24.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter