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

Вниз

Непонятки с запросом   Найти похожие ветки 

 
petvv   (2011-12-21 09:19) [0]

Есть код:


var
 i:Integer;
begin
 qKard.Close;
 qKard.SQL.Clear;
 qKard.SQL.Add("select KardID, FIO from Kard where AtpID="+IntToStr(
   ComboATP.ItemIndex+1));
 qKard.SQL.Text;
 qKard.Open;
 qKard.First;
 for i :=1  to qKard.RecordCount do
   begin
     qOtch111.Close;
     qOtch111.SQL.Clear;
     qOtch111.SQL.Add(
     "select LitFact, DTCheck, Marka, FIO from Statist, Fuel, Kard where " +
     "Statist.ITR=False and Statist.ATP=:QATP and Statist.DTCheck>=:QDatBeg " +
     "and Statist.DTCheck<=:QDatEnd and Statist.GSM=Fuel.ID and Statist.NKard=" +
     ":QNKard");
     qOtch111.SQL.Text;
     qOtch111.ParamByName("QATP").AsInteger:=ComboATP.ItemIndex+1;
     qOtch111.ParamByName("QDatBeg").AsDateTime:=DTBeg.Date;
     qOtch111.ParamByName("QDatEnd").AsDateTime:=DTEnd.Date;
     qOtch111.ParamByName("QNKard").AsInteger:=qKard.FieldByName("KardID").Value;
     qOtch111.Open;
     qOtch111.RecordCount;
     frxReport2.Variables["DatBeg"] := """" + DateTimeToStr(DTBeg.Date) + """";
     frxReport2.Variables["DatEnd"] := """" + DateTimeToStr(DTEnd.Date) + """";
     frxReport2.Variables["Firm"] := """" + ComboATP.Text + """";
     frxReport2.Variables["FIO"] := """" + qKard.FieldByName("FIO").AsString +"""";
//      frxReport2.PrepareReport(True);
//      frxReport2.Print;
     frxReport2.ShowReport(True);
     qKard.Next;
   end;


который юзает два запроса. Первый запрос выдёргивает из БД номера карт принадлежащие определённой конторе (в базе их всего две).
Далее в цикле по каждой карте выбираются транзакции (в базе оставил всего 2 транзакции, для двух разных карт)

по идее
во здесь qOtch111.RecordCount; =1 для каждого прохода.

но здесь qOtch111.RecordCount; получается =20

Мля откудова, в базе всего 2 записи oO


 
MBo ©   (2011-12-21 09:41) [1]

>qOtch111.RecordCount
А куда записывается результат получения свойства?


 
RWolf ©   (2011-12-21 09:49) [2]

а что удивительного — если перемножить три таблицы, ещё и не столько получится.


 
petvv   (2011-12-21 09:50) [3]


> а что удивительного — если перемножить три таблицы, ещё
> и не столько получится

Ты это к чему


 
Кщд   (2011-12-21 09:55) [4]

>petvv   (21.12.11 09:50) [3]
>Ты это к чему
это он к тому, что в таблице Kard - 10 записей)


 
RWolf ©   (2011-12-21 10:06) [5]

то, что ты делаешь в 16-й строке, называется прямое декартово произведение таблиц. Точнее, Statist и Fuel связаны по ключевому (?) полю, а Kard — нет, значит, если не учитывать ограничения на выборку, получаем набор из числа записей, равного произведению числа записей исходных наборов.


 
RWolf ©   (2011-12-21 10:08) [6]

в общем, предлагаю добавить условие  "and Statist.NKard=Kard.NKard" или что-то вроде.


 
Ega23 ©   (2011-12-21 10:35) [7]

1.  qKard.SQL.Text;  ЩИТО?
2. while not DataSet.Eof    вместо for.
3. qOtch111.SQL.Text; ЩИТО?
4. qOtch111.RecordCount;  ЩИТО?
5. Нахрена каждый раз инициализируется qOtch111.SQL.Text? Сделай это один раз перед циклом, внутри цикла меняй только значения параметров.
5. from Statist, Fuel, Kard    - ты Kard ни с кем не связал, у тебя произведение идёт.



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

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

Наверх




Память: 0.48 MB
Время: 0.007 c
3-1274164397
leonidus
2010-05-18 10:33
2012.04.15
Ошибка при создании таблицы через ADO


4-1254300446
Игорь Андреевич
2009-09-30 12:47
2012.04.15
Запретить запись с экрана


2-1324758041
Natalya
2011-12-25 00:20
2012.04.15
Компонент ListBox и действия с ним


2-1324444743
petvv
2011-12-21 09:19
2012.04.15
Непонятки с запросом


1-1291528318
Дмитрий С
2010-12-05 08:51
2012.04.15
ObjComAuto.TObjectDispatch и методы с 3+ вариант-аргументами.