Pretraga od datuma do datuma.

1

Pretraga od datuma do datuma.

offline
  • Pridružio: 15 Maj 2006
  • Poruke: 333
  • Gde živiš: Babušnica

Nasao sam nesto na google o tome, ali imam problem.

Evo koda:

with ADOQuery1 do     begin     Close;     SQL.Clear;     SQL.Add('SELECT datum FROM table);     SQL.Add('WHERE datum BETWEEN :od_datum AND :do_datum' );     Parameters.ParamByName('od_datum').Value:=DateToStr(datetimepicker1.Date);     Parameters.ParamByName('do_datum').Value:=DateToStr(datetimepicker2.Date);     Open;  end;


Ovaj kod sam stavio na buttononclick, pokrene aplikaciju ali kada pretrazujem nista se ne desava.
od_datum i do_datum su parametri koje sam ubacio u editing Adoquerry1.parameters i postavio datatype na ftDateTime.
Treba li da daju vrednost nekoj komponenti ili datetimepicker odlucuje o tome jer parametri uzimaju njihovu vrednost?

Hvala!




Cool



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 03 Nov 2006
  • Poruke: 59

Ovaj upit upisi, recimo u neku promjenjivu:
npr. st,

st := 'SELECT datum FROM table '+
'WHERE datum BETWEEN :od_datum AND :do_datum' ;

i stavi prekidnu tacku, na st, tako da mozes pratiti vrijednosti za od_datum i do_datum.
Vjerovatno ih trebas pretvoriti u ispravan format.

Recimo da su ti postavke na bazi takve da ocekuju datum u obliku 15.nov.2006, a ti dobijes 15.11.2006.

Da li ti je upit korektan znaces kada sa F8 predjes preko koda linije
gdje otvaras Query. Ako ti tu pukne program, upit ne valja.

Kuzis me sta hocu da ti kazem?

Najbolje je da ovaj tvoj upit provjeris id DBEXPLORERA.

Ako ne uspijes, napisi cemu ti je jednako:

od_datum i do_datum.



offline
  • Emil Beli
  • Pridružio: 03 Jan 2005
  • Poruke: 2990
  • Gde živiš: Beograd

@MsMarkon

Ne radi se to tako.
Prvo, zapamti da NIKADA, ali NIKADA ne koristis .Value

with ADOQuery1 do begin     Close;     SQL.Clear;     SQL.Text:='SELECT datum FROM table WHERE '+                      'datum BETWEEN :od_datum AND :do_datum';            Parameters.ParamByName('od_datum').AsDateTime:=datetimepicker1.Date;  Parameters.ParamByName('do_datum').AsDateTime:=datetimepicker2.Date;     end;

(malo me zeza editor, pa nije u liniji)

Drugo, izbegavaj With komandu kad god je moguce. Ume da pomesa loncice po nekad, a debug je skoro nemoguc bez pisanja cele komande.

offline
  • Pridružio: 15 Maj 2006
  • Poruke: 333
  • Gde živiš: Babušnica

O.K. To sam sredio.
Kada pretrazujem ime (string),u SQL upitu u Object inspectoru vidi se rezultat u tabeli.

SELECT polje from table WHERE           polje = 'tekst'


Kako sad da napisem u kodu za button SQL upit. Na istom principu kao kod za pretragu datuma ?

Probao sam, ali ne razumem oko parametara sad, posto su stringovi u pitanju.

Povezao sam ADOQuery sa accessom preko conenction_string-a. Znaci na formi imam samo ADOQuery, Datasource, polja za

pretrazivanje (TEdit). Treba li mi jos nesto?

NAPOMENA: Pocetnik sam u ADO-u. Do skoro sam radio u BDE. Nasao sam nesto http://www.mycity.rs/phpbb/viewtopic.php?t=8542

i citao ali mi nije bas najjasnije.

Citat:Prvo, zapamti da NIKADA, ali NIKADA ne koristis .Value


Question Question Question Interesuje me zasto .

Citat:Drugo, izbegavaj With komandu kad god je moguce. Ume da pomesa loncice po nekad, a debug je skoro nemoguc bez pisanja cele komande.

Razumeo .

Hvala Exclamation

Cool

offline
  • Emil Beli
  • Pridružio: 03 Jan 2005
  • Poruke: 2990
  • Gde živiš: Beograd

Zato sto je VALUE varijant, to znaci da prihvata sve, i u 90% slucajeva neces dobiti gresku, jer zavisi od baze, moze da ti proguta.

Primer: ubacujes DATUM u string polje (slucajno gresis). Ako koristis VALUE, bice automatski konvertovano u string, i bice ti zapisano "22/10/2001 12:19:10" u pogresno polje, umesto datuma u pravo polje, i uopste ti nece prijaviti gresku.
Onda das bazu klijentu i eto ti ribanja za koji dan...


Drugi, manji razlog, je to sto je varijant 10-ak puta sporiji, ali to je zanemarljivo u odnosu na ono gore navedeno.

offline
  • Pridružio: 08 Jan 2007
  • Poruke: 279
  • Gde živiš: Srbija

Citat:Kako sad da napisem u kodu za button SQL upit. Na istom principu kao kod za pretragu datuma ?
Probao sam, ali ne razumem oko parametara sad, posto su stringovi u pitanju.
Povezao sam ADOQuery sa accessom preko conenction_string-a. Znaci na formi imam samo ADOQuery, Datasource, polja za
pretrazivanje (TEdit). Treba li mi jos nesto?

Pozdrav,

ako si ispravno povezao TADOQuery, TDataSet i TDBGrid, mogao bi otprilike ovako:
  ADOQuery1.Close;   ADOQuery1.SQL.Clear;   ADOQuery1.SQL.Add('SELECT * FROM Neka_Tabela');   ADOQuery1.SQL.Add('WHERE Neko_Polje =' + QuotedStr(Edit1.Text));   ADOQuery1.Open;
Možda treba mala dorada, ispravka, nemam delphi pri ruci, ali suština je to.

Da, treba da obradiš event OnClick za TButton.

offline
  • srdjos  Male
  • Zaslužni građanin
  • Pridružio: 27 Sep 2005
  • Poruke: 678

prva stvar
nikad ne koristi ovo:
1.SQL.Add('WHERE Neko_Polje =' + QuotedStr(Edit1.Text));

stavi parametre i dodaj parametre kao AsDateTiem, AsInteger
ostavi drajveru za bazu (ODBC )da sam pretvori te vrednosti.
Pazi kako ti drajver pretvara datume jer ce ti mozda trebati
AsSQLTimeStamp

druga stvar, koristi DBExpress, ADO je u delphiju previse spor
DBexpress je native implementacija u Delphiju

Pozdrav
Srdjo

offline
  • Pridružio: 15 Maj 2006
  • Poruke: 333
  • Gde živiš: Babušnica

Hvala svima na pomoci. Resio sam problem.

BIG Pozdrav!

offline
  • Pridružio: 08 Jan 2007
  • Poruke: 279
  • Gde živiš: Srbija

Citat:nikad ne koristi ovo:
1.SQL.Add('WHERE Neko_Polje =' + QuotedStr(Edit1.Text));

@ srdjos
OK, mozda nije najbolje resenje, ali je jedan od nacina.
Citat:MSMarkoN:
Probao sam, ali ne razumem oko parametara sad, posto su stringovi u pitanju.

Ovako nesto:
ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('SELECT * FROM Neka_Tabela'); ADOQuery1.SQL.Add('WHERE Neko_Polje = :Neko_Polje'); ADOQuery1.Parameters.ParamByName('Neko_Polje').Value:= Edit1.Text; ADOQuery1.Open;

offline
  • srdjos  Male
  • Zaslužni građanin
  • Pridružio: 27 Sep 2005
  • Poruke: 678

opet, za parametre explicitno naglasi tip podaka
npr.
ADOQuery1.Parameters.ParamByName('Neko_Polje').AsString:= Edit1.Text;

druga stvar:
stavljaj
sql.TEXT := '...'

druga stvar, kad koristis parametre, uvek dodaj
Prepared := True;

znaci

with AdoQuery do begin
Close;
SQL.Clear;
SQL.Add('SELECT * FROM Neka_Tabela');
SQL.Add('WHERE Neko_Polje = :Neko_Polje');
Parameters.ParamByName('Neko_Polje').AsString:= Edit1.Text;
Prepared := True;
Open;
end;

Dopuna: 17 Jan 2007 22:23

opet, za parametre explicitno naglasi tip podaka
npr.
ADOQuery1.Parameters.ParamByName('Neko_Polje').AsString:= Edit1.Text;

druga stvar:
stavljaj
SQL.TEXT := '...'

druga stvar, kad koristis parametre, uvek dodaj
Prepared := True;

znaci

with AdoQuery do begin
Close;
SQL.Clear;
SQL.Text := 'SELECT * FROM Neka_Tabela' +#13+
'WHERE Neko_Polje = :Neko_Polje');
Parameters.ParamByName('Neko_Polje').AsString:= Edit1.Text;
Prepared := True;
Open;
end;

Ko je trenutno na forumu
 

Ukupno su 976 korisnika na forumu :: 50 registrovanih, 8 sakrivenih i 918 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., Andrija357, anta, babaroga, Bokiboks, ccoogg123, darios, dejoglina, Dimitrise93, Djokislav, Djokkinen, doktor123, Dr.Strangelove, DragoslavS, drimer, Fog of War, Fulcrum, Georgius, goxin, HogarStrashni, ikan, ILGromovnik, Ilija Cvorovic, Još malo pa deda, kalens021, Karla, Koridor, kubura91, ladro, Levi, Luka Blažević, Mercury, MiroslavD, naki011, ozzy, pein, royst33, S1Mk3, saputnik plavetnila, Sir Budimir, sombrero, Srle993, Stefan M, suton, t84dar, Tas011, theNedjeljko, tmanda323, Webb, zeo