Databáze > Firebird a Interbase
Opäť parametre
Stanislav Hruška:
--- Kód: SQL --- dmMain.Qry1Param.Clear;// dmMain.Qry1Param.ADD('Fksvb', INTEGER(strSVBs.Objects[cbbSVB.ItemIndex])); dmMain.Qry1Param.ADD('YEARFrom', aValProg[6, 2]); dmMain.Qry1Param.ADD('YEARTo', aValProg[6, 2]); MainIBQr('SELECT'+ ' COUNT(Persones.Person2) Cnt_Person2,'+ ' COUNT(Persones.Person3) Cnt_Person3, '+ ' COUNT(Persones.Person4) Cnt_Person4'+ ' FROM Svbs'+ ' INNER JOIN Landlords ON (Svbs.Idsvbs = Landlords.Fksvb)'+ ' INNER JOIN Persones ON (Landlords.Idlandlords = Persones.Fklandlords)'+ ' WHERE'+ ' ((EXTRACT(YEAR FROM Persones.FromDate)<=:YEARFrom And'+ ' EXTRACT(YEAR FROM Persones.ToDate)>=:YEARTo) OR'+ ' (EXTRACT(YEAR FROM Persones.FromDate)<=:YEARFrom And Persones.ToDate Is Null))'+ ' AND'+// ' (Landlords.Fksvb = :Fksvb) AND'+ ' (Landlords.Fksvb ='+ IntToStr(INTEGER(strSVBs.Objects[cbbSVB.ItemIndex])) +') AND'+ ' ((not Persones.Person2 IS NULL) OR (not Persones.Person3 IS NULL) OR'+ ' (not Persones.Person4 IS NULL))'); Už som sa spodobným prípadom stretol viackrát a nerozumiem tomu. V jednom prípade mi pomohlo zmeniť poradie pridávania parametrov ???
Buď použijem uvedenú verzie, alebo "opačnú". Myslím tým použiť Fksvb a ostatné parametre vyhodiť.
Naraz mi všetky parametre nechcú fungovať. Vráti mi to prázdny dataset.
Máte na to nejaké vysvetlenie?
pepak:
Už jsem ti psal, že máš napřed nastavit SQL a teprve potom nastavovat parametry. A že to máš oboje nastavovat na stejném objektu. Ale to je jak mluvit do dubu :-(.
pf1957:
--- Citace: Stanislav Hruška 08-03-2013, 08:47:14 ---Už som sa spodobným prípadom stretol viackrát a nerozumiem tomu. V jednom prípade mi pomohlo zmeniť poradie pridávania parametrov ???
--- Konce citace ---
Chyba by mela byt ve zpusobu, jakym presypavas parametry do datasetu
Stanislav Hruška:
--- Citace ---Už jsem ti psal, že máš napřed nastavit SQL a teprve potom nastavovat parametry. A že to máš oboje nastavovat na stejném objektu. Ale to je jak mluvit do dubu
--- Konce citace ---
Vždy to používam takto
TSQLParams = TDictionary<string, Variant>;
....
....
Qry1, Qry2, MyRCQuery: TIBQuery;
Qry1Param := TSQLParams.Create;
....
dmMain.Qry1Param.Clear;
dmMain.Qry1Param.Add('myParameter', hodnota); - počet podľa potreby
MainIBQr('SELECT...');
Môžeš pre mňa (me)ne(j)chápavého to rozmeniť na drobné?
Vôbec nerozumiem čo myslíš prvou časťou vety. Myslíš snáď toto?
--- Kód: Delphi ---function MainIBQr(sSQL: string): Boolean;var ParName: string;begin Result := False; Qry1.Close; Qry1.ParamCheck := True; Qry1.SQL.Text := ''; Qry1.SQL.Text := sSQL; Qry1.Prepare; Qry1.Params.Clear;Ja si myslím, že druhú vetu spĺňam. Pracujem len s Qry1
Pre istotu prikladám funkciu
--- Kód: Delphi ---function MainIBQr(sSQL: string): Boolean;var ParName: string;begin Result := False; Qry1.Close; Qry1.ParamCheck := True; Qry1.SQL.Text := ''; Qry1.SQL.Text := sSQL; Qry1.Prepare; Qry1.Params.Clear; for ParName in dmMain.Qry1Param.Keys do begin Qry1.Params.CreateParam(ftUnknown, ParName, ptInput); Qry1.ParamByName(ParName).Value := dmMain.Qry1Param[ParName]; end; try Qry1.Open; Result := True; except on E: Exception do begin Fault('Chyba v príkaze Select' +#10 + #13 + E.Message); Qry1.Close; end; end;end;
Asi tu po vzore pf1957 hodím sem svoje foto, aby ste videli s kým máte do činenia ;D
pf1957:
--- Citace: Stanislav Hruška 08-03-2013, 09:18:56 ---
--- Kód: Delphi --- Qry1.SQL.Text := ''; Qry1.SQL.Text := sSQL; Qry1.Prepare; Qry1.Params.Clear; for ParName in dmMain.Qry1Param.Keys do begin Qry1.Params.CreateParam(ftUnknown, ParName, ptInput); Qry1.ParamByName(ParName).Value := dmMain.Qry1Param[ParName]; end;
--- Konce citace ---
Tohle mas nejaky prekombinovany ne?
* Proc do Sql.Text nedjriv prirazujes prazdny string?
* Proc volas Prepare?
* A hlavne, proc si smazes parametry v Params, ktere ti tam vytahal dataset z prirazeneho SQL prikazu :oNic zbytecne neprirazuj, nemaz parametry a jen je presyp na zaklade jmena z dictionary do datasetu. Nesouhlas poctu paramatru apod. by mel vest k exception.
Navigace
[0] Seznam témat
[#] Další strana
Přejít na plnou verzi