Két paraméter összehasonlítása?

Két paraméter összehasonlítása?
2017-07-17T14:34:43+02:00
2017-07-17T15:11:24+02:00
2022-10-15T22:20:56+02:00
detto71
Sziasztok!

Lehetséges-e két paraméter összehasonlítása delphi-ből firebird sql-ben?

   ibtransaction1.Active:=false;
  ibtransaction1.Active:=true;
  ibquery1.Close;
  ibQuery1.SQL.Clear;
  ibQuery1.SQL.Add('select * from dolgozo_feltetel where consumerno=:v_dno and (:v_datum>=:v_datum_kezd and datum=:v_datum and :v_datum<=:v_datum_veg)');
  ibquery1.ParamByName('v_dno').Value:=trim(combobox2.Text);
  ibquery1.ParamByName('v_datum').Value:=datetostr(datetimepicker1.Date);
  ibquery1.ParamByName('v_datum_kezd').Value:=datum_min;
  ibquery1.ParamByName('v_datum_veg').Value:=datum_max;
  ibquery1.FetchAll;
  ibQuery1.open;

ebből egyértelmű.  Ezt :v_datum>=:v_datum_kezd és ezt :v_datum<=:v_datum_veg. A logikai kérdés baloldalán muszály hogy a tába egy mezője álljon?
Mutasd a teljes hozzászólást!
Ennek nem látom így értelmét, ahogy leírtad! Szövegesen: egy konstans paraméter azonos vagy későbbi dátum, mint egy másik konstans paraméter, és korábbi, mint egy harmadik konstans paraméter. És egyébként azokat a sorokat kérdezed le, amelyek egyenlőek azzal az első konstans dátummal.
Ha ezt kibogozom, akkor így írnám:

if (datetimepicker1.Date>=datum_min) and (datetimepicker1.Date<=datum_max) then begin <itt jön a lekérdezés, és csak dátumegyenlőségre kell vizsgálni> ibQuery1.SQL.Add('select * ... where consumerno=:v_dno and datum=:v_datum'); ibQuery1.ParamByName('v_dno').Value:=trim(combobox2.Text); ibQuery1.ParamByName('v_datum').Value:=datetostr(datetimepicker1.Date); end;
Mutasd a teljes hozzászólást!

  • Szia!

    Szerintem igen. Sima selectben. CAST-olni kell, mert így nem tudja, milyen típusokat akarsz hasonlítani. "Data type unknown"

    where cast(:v_datum as timestamp) between :v_datum_tol and :v_datum_ig
    Mutasd a teljes hozzászólást!
  • Ennek nem látom így értelmét, ahogy leírtad! Szövegesen: egy konstans paraméter azonos vagy későbbi dátum, mint egy másik konstans paraméter, és korábbi, mint egy harmadik konstans paraméter. És egyébként azokat a sorokat kérdezed le, amelyek egyenlőek azzal az első konstans dátummal.
    Ha ezt kibogozom, akkor így írnám:

    if (datetimepicker1.Date>=datum_min) and (datetimepicker1.Date<=datum_max) then begin <itt jön a lekérdezés, és csak dátumegyenlőségre kell vizsgálni> ibQuery1.SQL.Add('select * ... where consumerno=:v_dno and datum=:v_datum'); ibQuery1.ParamByName('v_dno').Value:=trim(combobox2.Text); ibQuery1.ParamByName('v_datum').Value:=datetostr(datetimepicker1.Date); end;
    Mutasd a teljes hozzászólást!
  • Ezt nem nagyon értem. Kicsit bővebben, ha lehet.
    Sima select stb, milyen a nem sima select?
    Mutasd a teljes hozzászólást!
  • > ebből egyértelmű

    Nem igazán. Egyrészt használd a </>forráskód gombot, másrészt hagyjál ki mindent, aminek nincs köze a kérdésedhez.

    > A logikai kérdés baloldalán muszály hogy a tába egy mezője álljon?

    Az összehasonlítás bal oldalán nem muszáj táblamezőnek állnia, de a jobb oldalon sem. Ettől függetlenül felesleges ilyen összehasonlítást az SQL-szerverrel elvégeztetni, a Delphi is képes ilyesmire, sokkal gyorsabban.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd