Databáze > Firebird a Interbase

Opäť parametre

(1/5) > >>

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