Форум: "Начинающим";
Текущий архив: 2012.04.15;
Скачать: [xml.tar.bz2];
ВнизНепонятки с запросом Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.003 c