Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Filtriranje baze po vrednostima izmedju zadatih datuma

[es] :: Pascal / Delphi / Kylix :: Filtriranje baze po vrednostima izmedju zadatih datuma

Strane: 1 2

[ Pregleda: 2163 | Odgovora: 21 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

BakiAna

Član broj: 346785
Poruke: 29



Profil

icon Filtriranje baze po vrednostima izmedju zadatih datuma28.11.2022. u 16:26 - pre 16 meseci
U pitanju je delphi 11 i absolutedatabase

imam spisak ucenika koji su uplatili nesto (npr. rucak u skoli ili uzinu)

U tabeli su: Ime i prezime ucenika, datum uplate, i iznos uplate.

Uspelo se da pronadje ucenike koji su izvrsili uplatu odredjenoig dana (pomocu DateTimePicker, i filtriranja baze po izabranom datumu)
Code:
  ABSTable1.Filter := 'Datum1Uplate ='  + QuotedStr(DateToStr(DateTimePicker1.Date));
  ABSTable1.Filtered:=true;


1. kako filtrirati bazu da se pokazuju redovu sa datumima uplate izmedju dva izabrana datuma (ima dva DateTimePicker-a)?

ne funkcionisu SQL upiti sa https://www.elitesecurity.org/...je-od-datuma-do-datuma-Problem

2. kako sortirati podatke - jednom po imenu ucenika, - i jednom po datumima uplate?
(probano je sa SQL upitom ali ne funkcionise...)
Code:
ABSQuery1.SQL.Text := 'select * from "ucenici" order by "ImeiPrezime" ASC'




 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Filtriranje baze po vrednostima izmedju zadatih datuma28.11.2022. u 17:05 - pre 16 meseci
1)
Filter u datasetu ima ogranicenja, pa sad ne znam koliko moze da podrzi npr between.
Svakako mozes pisati
Code:

select
  *
from
  Ucenici
where
  DatumUplate >= :DatumOd and
  DatumUplate <= :DatumDo


2)
Code:

order by
  ImePRezime ASC, DatumUplate DESC


 
Odgovor na temu

BakiAna

Član broj: 346785
Poruke: 29



Profil

icon Re: Filtriranje baze po vrednostima izmedju zadatih datuma29.11.2022. u 14:09 - pre 16 meseci
ni da pomisli da prihvati sql upit.

verovatno je nekorektna absolutedatabase, u smislu sql...

radi se o programu sa bazom koji ce se koristiti samo na jednom kompu

koja baza se preporucuje? mdb, db, sqlite...
(da funkcionise filtriranje, sql upiti, da nije komplikovana za povezivanje izmedju tabela,
da za njenu upotrebu bude dovoljan samo delfijev exe. znaci da sve bude funkcionalno
a da se na kompu nalazi delfi.exe i baza i da za ispravan rad ne treba nista da se van toga
ubacuje (instalira) na komp)

 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Filtriranje baze po vrednostima izmedju zadatih datuma29.11.2022. u 14:25 - pre 16 meseci
Sta ti javi koju gresku? Sintaksu DatumPolje >= Datuma mora svaka baza da prihvati.
Vidim da je ADS SQL92 kompatibilan tako da je i between dozvoljen
https://www.componentace.com/sql/operator-between.htm


Mozes SQLite ili Firebird embedded, obe su odlicna resenja.
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Filtriranje baze po vrednostima izmedju zadatih datuma29.11.2022. u 14:44 - pre 16 meseci
Mislim da ima postavljač teme ne zna kako da hendluje host varijable.
Vidim da su njegovi upiti napravljeni konkatenacijom.
 
Odgovor na temu

BakiAna

Član broj: 346785
Poruke: 29



Profil

icon Re: Filtriranje baze po vrednostima izmedju zadatih datuma30.11.2022. u 15:12 - pre 16 meseci
Citat:
savkic:
Sta ti javi koju gresku?


ne prijavljuje nista, samo jednostavno ne funkcionise.

probano je i sa .db
moze kolonu sa imenima sloziti ASC i DESC, ali ne moze filtrirati po datumu,
a tek ni izmedju dva datuma.

Code:
   with FDQuery1 do
   begin
   Close;

SQL.Add('select ."*" from "ucenici" ');
SQL.Add('where ("iznos1Uplate" between 'DATUM_OD' and 'DATUM_DO''); 


Ovi parametri dole mi nisu razumljivi. a i ne mogu ih ubaciti
Parameters.ParamByName ('DATUM_OD').AsDate:=DateTimePicker1.Date;
Parameters.ParamByName ('DATUM_DO').AsDate:=DateTimePicker2.Date;



 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Filtriranje baze po vrednostima izmedju zadatih datuma30.11.2022. u 15:49 - pre 16 meseci
Nesto ti ne radis dobro, ovaj where je neispravan i morao bi da vrati gresku, nema zavrsne zagrade a i pisanje 'DATUM_OD' pod navodnicima sigurno ne ide.

Za pocetak zaboravi na tvoje Delphi upite, vec otvori Absolute Database Manager i u njemu napisi SQL, zadaj datume i vidi koje rezultate dobijas.


 
Odgovor na temu

ravni

Član broj: 8894
Poruke: 373



+15 Profil

icon Re: Filtriranje baze po vrednostima izmedju zadatih datuma01.12.2022. u 07:45 - pre 16 meseci
Trudio sam se, ali jace je od mene

Citat:
BakiAna:
a i ne mogu ih ubaciti


Ispravno je 'ne mogu biti ubaceni'

🙃
 
Odgovor na temu

BakiAna

Član broj: 346785
Poruke: 29



Profil

icon Re: Filtriranje baze po vrednostima izmedju zadatih datuma02.12.2022. u 17:44 - pre 16 meseci
radilo se na abs, db, sqlite, mdb

jedino se mdb ponasa pristojno

db, sqlite filtriraju bazu samo po danu (dd a ne ceo datum: dd.mm.yyyy)

u prilogu ono sto se uradilo, a sa abs ne mogu da mrdnem - a ta baza mi je potrebna



Prikačeni fajlovi
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Filtriranje baze po vrednostima izmedju zadatih datuma03.12.2022. u 00:23 - pre 16 meseci
Ti nesto ne radis dobro, sqlite savrseno radi sa datumima, naravno uslov je da pises datume kao datume ne da pises string u formatu koji baza ne razume.
Pretpostavljam da se to desava i kod ADS, vidim da datumske vrednosti prosledjujes kao string (DateToStr) sto nikako ne moze.
Ako je polje u bazi tipa DATE onda parametre prosledjujes kao datum, ako bas moras kao string onda taj string mora biti formatiran kako ga baza ocekuje (a ne kako je lokalno podesavanje racunara), uglavnom baze prihvataju:
YYYY-MM-DD -> 2022-12-03
dd-mmm-yyyy -> 03-dec-2022

 
Odgovor na temu

BakiAna

Član broj: 346785
Poruke: 29



Profil

icon Re: Filtriranje baze po vrednostima izmedju zadatih datuma03.12.2022. u 18:00 - pre 16 meseci
Citat:
savkic:

Za pocetak zaboravi na tvoje Delphi upite, vec otvori Absolute Database Manager i u njemu napisi SQL, zadaj datume i vidi koje rezultate dobijas.



U dbase menageru sql upiti rade kako treba. npr.
Code:
select * from ucenici order by imeiprezime asc 

lepo slozi po iimenu, isto i za datum kao i iznos uplate, isto i za desc

kada taj sql ubacim u kod
Code:
ABSQuery1.SQL.Text:='select * from ucenici order by imeiprezime asc';

onda ne funkcionise
U cemu gresim?
Gde i kako da ga aktiviram?

sto se tice datuma, sql upit
Code:
select * from ucenici WHERE Datum1Uplate >= 01.11.2022 and Datum1Uplate <= 30.11.2022

daje mi poruku
Cannot cast from 'STRING' to 'FLOAT'

ali hoce
Code:
select * from ucenici WHERE Datum1Uplate >= '01.11.2022' and Datum1Uplate <= '30.11.2022'


Gde i kako ubaciti u kod delfija?






[Ovu poruku je menjao BakiAna dana 03.12.2022. u 19:18 GMT+1]
 
Odgovor na temu

chris6212

Član broj: 347297
Poruke: 158



+27 Profil

icon Re: Filtriranje baze po vrednostima izmedju zadatih datuma03.12.2022. u 21:57 - pre 16 meseci
Citat:
BakiAna:
koja baza se preporucuje? mdb, db, sqlite...


SQLite se koristi ako ti podaci baš i nisu mnogo bitni, jer nešto nije baš sigurno raditi sa njim. Potreban je samo DLL za rad, ništa drugo. Kako je SQLite "typeless", datum je najbolje u bazu ubacivati u formi YYYY-MM-DD, pa je lako da se sortira, piše upit i čak iz konzolnog SQlite.exe pregleda. Ako iz konzlnog programa upit radi, ne vidim zašto isti upit ne bi radio i iz bilo kog drugog programa, ako je klasa za pristup preko DLL-a odradjena korektno.

Sve ostale baze koriste drugačiji način za kodiranje datuma, možda zavise i od toga kako je setovan sam operativni sistem i kakva lokalna forma datuma se koristi. I nije potrebno da Delphi bude instaliran (licencom je koliko se sećam dozvoljeno da bude instaliran samo na jednom računaru), potrebno je da server za bazu podataka ili klijent bude instalirani na računaru.

Davno sam radio sa SQL-om, ali principijelno je tako, ne verujem da se išta promenilo.
 
Odgovor na temu

chris6212

Član broj: 347297
Poruke: 158



+27 Profil

icon Re: Filtriranje baze po vrednostima izmedju zadatih datuma03.12.2022. u 22:08 - pre 16 meseci
Citat:
BakiAna:
ali hoce
Code:
select * from ucenici WHERE Datum1Uplate >= '01.11.2022' and Datum1Uplate <= '30.11.2022'


Gde i kako ubaciti u kod delfija?



U Delphiju, apostrof je specijan znak u kodu, a da bi se ubacio kao tekst, potrebno je duplirati ga:

Code:
*.text:= 'select * from ucenici WHERE Datum1Uplate >= ''01.11.2022'' and Datum1Uplate <= ''30.11.2022''' 


Ali kao što sam napisao, ovo je pogrešan format datuma za SQLite i ne može se pravilno ni filtrirati ni sortirati, mora se koristiti format YYYY-MM-DD, kako pri unosu podataka u bazu, tako i kod SQL upita!

[Ovu poruku je menjao chris6212 dana 03.12.2022. u 23:24 GMT+1]
 
Odgovor na temu

FranjoZG
Franjo Popović
Programer
Zagreb

Član broj: 328819
Poruke: 298
*.static.a1.hr.



+4 Profil

icon Re: Filtriranje baze po vrednostima izmedju zadatih datuma04.12.2022. u 11:13 - pre 16 meseci
Je li problem riješen?
Zašto ne koristiš Firebird bazu? Može se koristiti tako da se instalira kao server ili, ako ti samo jedan program pristupa bazi, koristi samo DLL pa ti ne treba nikakova instalacija. Kopiraš exe svog programa i na isto mjesto neke file-ove FireBirada (upute su jako dobro napisane na stranici FB-a). Radi odlično.

Što se tiće SQLLinte, nisam radio sa tom bazom, pa je možda i sintaksa nešto drugačija (naziv tabice u dvostrukim navodnicima itd.).

Možda pomogne: ako definiraš SQL u kjem koristiš parametre:

Code:
 ABSQuery1.SQL.Text := 'select  * from  Ucenici where  DatumUplate >= :DatumOd and  DatumUplate <= :DatumDo'


tada prije "Open":

Code:

ABSQuery1.ParamBaName('DatumOd').AsDate := DateTimePicker1.Date;
ABSQuery1.ParamBaName('DatumDo').AsDate := DateTimePicker2.Date;
ABSQuery1.Open;


Provjeriti možda treba:
Code:

ABSQuery1.Prepare;
ABSQuery1.Open;



Vidi da li je AsDate ili AsDateTime. Ako ideš sa AsString, moraš kreirati string kako ga baza razumije, netko je već napisao: YYYY-MM-DD, svakako je bolje slati parametar kao datum.

Ako koristiš neki manager za SQL bazu, tada ti prolazi datum u normalnom obliku dd.mm.yyyy (bar prolazi u Firebird bazu sa IBExpertom).

Davno sam radio nešto sa MySQL-om, tamo je bila neka petljancija oko navodnika. Koliko se sjećam (ispravite ako griješim) trebalo je (ne dva puta jednostuki navodnik već dvostruki navodnik):

Code:

"Ucenici"."DatumUplate"


Isto tako, bitno je bilo paziti na velika i mala slova, Ucenici i UCENICI nisu isto.
 
Odgovor na temu

BakiAna

Član broj: 346785
Poruke: 29



Profil

icon Re: Filtriranje baze po vrednostima izmedju zadatih datuma04.12.2022. u 12:00 - pre 16 meseci
verovatno se izmislila topla voda, odnosno rupa na saksiji:

absolutedatabase moze da sortira podatke i pomocu SQL upita i pomocu Index-a tabele.

sa drugim bazama nemam iskustva...

cini mi se da se resio problem:

Code:
 
        ABSQuery1.Close;
        ABSQuery1.SQL.Clear;
        ABSQuery1.SQL.Add('select * from ucenici');
        ABSQuery1.SQL.Add
          ('where datum1uplate >= :pocetak and datum1uplate <=:kraj');
        ABSQuery1.Params.ParamByName('pocetak').Value :=
          DateToStr(DateTimePicker1.Date);
        ABSQuery1.Params.ParamByName('kraj').Value :=
          DateToStr(DateTimePicker2.Date);
        ABSQuery1.SQL.Add('ORDER by datum1uplate ASC');
        ABSQuery1.Open;


ko ima vremena neka isproba, kod mene je na winu namesten format datuma na dd.mm.yyyy
Prikačeni fajlovi
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 810
31.223.145.*



+62 Profil

icon Re: Filtriranje baze po vrednostima izmedju zadatih datuma05.12.2022. u 12:35 - pre 16 meseci
Dodela parametara ide ovako:

Code:

    ABSQuery1.Params.ParamByName('pocetak').Value :=
      DateTimePicker1.Date;
    ABSQuery1.Params.ParamByName('kraj').Value :=
      DateTimePicker2.Date;


Property Value je variant, moze primiti bilo koji tip podatka; uradice se prava konverziju za bazu vec prema upitu (u momentu izvrsavanja).

Podesavanje datuma na sistemu i podesavanje datuma u bazi nemaju veze jedno s drugim.
Ako vec pises datume kao stringove, onda: vecina baza podrzava format 'YYYY-MM-DD', znaci datum 28.03.2023. pises kao '2023-03-28'.

Pozz
 
Odgovor na temu

BakiAna

Član broj: 346785
Poruke: 29



Profil

icon Re: Filtriranje baze po vrednostima izmedju zadatih datuma05.12.2022. u 14:01 - pre 16 meseci
Citat:
Rapaic Rajko: Dodela parametara ide ovako:

Code:

    ABSQuery1.Params.ParamByName('pocetak').Value :=
      DateTimePicker1.Date;
    ABSQuery1.Params.ParamByName('kraj').Value :=
      DateTimePicker2.Date;


Property Value je variant, moze primiti bilo koji tip podatka; uradice se prava konverziju za bazu vec prema upitu (u momentu izvrsavanja).

Podesavanje datuma na sistemu i podesavanje datuma u bazi nemaju veze jedno s drugim.
Ako vec pises datume kao stringove, onda: vecina baza podrzava format 'YYYY-MM-DD', znaci datum 28.03.2023. pises kao '2023-03-28'.

Pozz


ne prikazuje mi redove uopste, ako izbacim DateToStr, a i ne prikazuje gresku.


 
Odgovor na temu

chris6212

Član broj: 347297
Poruke: 158



+27 Profil

icon Re: Filtriranje baze po vrednostima izmedju zadatih datuma05.12.2022. u 15:02 - pre 16 meseci
Pokaži deo koda i SQL komande za snimanje stavke u bazu i pokaži šta dobijaš kada pregledaš datume preko konzolnog program sqlite3.exe.

Još jednom, SQLlite je TYPELESS i najbolje je da direktno upišeš datum u formatu koji je naveden. Dakle tip podataka nije bitan koji se navede u bazi, ali i nevezano u šta će ova klasa za pristup da ga konvertuje ili da li će uopšte da ga konvertuje.

Konkretno, DateTimePicker1.Date je DOUBLE tipa, t.j. broj u pokretnom zarezu, tako Delphi čuva datum. U SQLite onda verovatno stoji tekst tipa 12345678.90 umesto datuma. Neće ova komponenta/klasa verovatno da konvertuje ništa. Ti jednostavno moraš da ga nateraš da ga upiše u bazu u formatu YYYY-MM-DD kao STRING i da kada tražiš podatke isto to uradiš i u upitu.

Jednostavno, ne smeš da ih mešaš. Nemoj da koristiš ParamByName, već sama napravi string i ubaci ga direktno u metod TEXT i to je sve.

DateToStr() konvertuje datum u onom formatu kakav je podešen da prikazuje na računaru, tipa DD.MM.YYYY, ako je sistem instaliran ili setovan da po defaultu kosristi srpski fromat, ako koristi engleski, onda je format YYYY-DD-MM... Da ne bude zavistan od toga, ne koristi DateToStr() već svoju funkciju gde se datum konvertuje u fiksnom formatu YYYY-MM-DD.

SQLite je specifičan, to nije RMDBS u klasičnom smislu i sve što snima, snima u trasparentnoj formi kao tekst, osim BLOB polja.


[Ovu poruku je menjao chris6212 dana 05.12.2022. u 16:36 GMT+1]
 
Odgovor na temu

chris6212

Član broj: 347297
Poruke: 158



+27 Profil

icon Re: Filtriranje baze po vrednostima izmedju zadatih datuma08.12.2022. u 12:04 - pre 16 meseci
Pardon, ako je US engleski, format je MM-DD-YYYY. Copy and paste brljotine... :)
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 810
31.223.145.*



+62 Profil

icon Re: Filtriranje baze po vrednostima izmedju zadatih datuma13.12.2022. u 08:31 - pre 16 meseci
Citat:
BakiAna:
Citat:
Rapaic Rajko: Dodela parametara ide ovako:

Code:

    ABSQuery1.Params.ParamByName('pocetak').Value :=
      DateTimePicker1.Date;
    ABSQuery1.Params.ParamByName('kraj').Value :=
      DateTimePicker2.Date;


Property Value je variant, moze primiti bilo koji tip podatka; uradice se prava konverziju za bazu vec prema upitu (u momentu izvrsavanja).

Podesavanje datuma na sistemu i podesavanje datuma u bazi nemaju veze jedno s drugim.
Ako vec pises datume kao stringove, onda: vecina baza podrzava format 'YYYY-MM-DD', znaci datum 28.03.2023. pises kao '2023-03-28'.

Pozz


ne prikazuje mi redove uopste, ako izbacim DateToStr, a i ne prikazuje gresku.




Ako ovo gore ne radi, jedino objasnjenje je da ti je polje datum1uplate (u bazi) tipa STRING (char, varchar, sta god).
A treba da bude tipa DATE, DATETIME i slicno.
Zato si sve vreme forsirao string vrednosti, zar ne?

 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Filtriranje baze po vrednostima izmedju zadatih datuma

Strane: 1 2

[ Pregleda: 2163 | Odgovora: 21 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.