![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Непонятки с запросом [XP]
petvv © (2011-12-21 09:19:00)Есть код:
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
Ega23 (2011-12-21 10:35:00) [1]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 ни с кем не связал, у тебя произведение идёт.
RWolf (2011-12-21 10:08:00) [2]в общем, предлагаю добавить условие "and Statist.NKard=Kard.NKard" или что-то вроде.
RWolf (2011-12-21 10:06:00) [3]то, что ты делаешь в 16-й строке, называется прямое декартово произведение таблиц. Точнее, Statist и Fuel связаны по ключевому (?) полю, а Kard — нет, значит, если не учитывать ограничения на выборку, получаем набор из числа записей, равного произведению числа записей исходных наборов.
Кщд (2011-12-21 09:55:00) [4]>petvv (21.12.11 09:50) [3]
>Ты это к чему
это он к тому, что в таблице Kard - 10 записей)
petvv (2011-12-21 09:50:00) [5]
> а что удивительного — если перемножить три таблицы, ещё
> и не столько получится
Ты это к чему
RWolf (2011-12-21 09:49:00) [6]а что удивительного — если перемножить три таблицы, ещё и не столько получится.
MBo (2011-12-21 09:41:00) [7]>qOtch111.RecordCount
А куда записывается результат получения свойства?