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

SQL upit - potrebna pomoc oko sintakse

[es] :: Pascal / Delphi / Kylix :: SQL upit - potrebna pomoc oko sintakse

[ Pregleda: 3715 | Odgovora: 13 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

prginfo
NS

Član broj: 174814
Poruke: 133
89.216.48.*



+1 Profil

icon SQL upit - potrebna pomoc oko sintakse09.09.2008. u 08:19 - pre 189 meseci
Koristim IB i Delphi7

Problem je sledeci:

Na formu sam stavio combobox koji se puni stavkama iz baze iz jedne tabele, na nacin prikaza polje1+' '+polje2

Korisnik moze da vrsi izbor iz padajuceg menija.

Posle mi je potrebno pretrazivanje te iste tabele ali samo po polju1.

Kako da napravim upit da mi gleda samo npr. prvih 5 karaktera u stringu combobox.text.

Kod koji koristim je otprilike sledeci:
combo se puni na OnFormShow:

Code:

  procedure TForm1.FormShow(Sender: TObject);
   begin
    combobox.Items.Clear;
    Query1.Close;
    Query1.SQL.Clear;
    Query1.SQL.Add('select POLJE1,POLJE2 from TABELA ORDER BY POLJE1');
    Query1.Prepare;
    Query1.Open;
    Query1.First;
     while not Query1.Eof do
      begin
       combobox.Items.Add(Query1.Fields[0].AsString+' '+Query1.Fields[1].AsString);
       Query1.Next;
      end;
    combobox.ItemIndex:=0;



combobox se puni sasvim OK, a pretraga je sada ovakva, ali mi je potrebna sintaksa koja ce da gleda samo POLJE1 ili prvih 5 karaktera u stringu.
Kod za pretragu mi je sada ovakav:

Code:
  
  Query1.Close;
  Query1.SQL.Clear;
  Query1.SQL.Add('select * from TABELA where POLJE1 like '+ QuotedStr(ANsiUpperCase(combobox.text)));
  Query1.Prepare;
  Query1.Open;


Hvala unapred na pomoci.


[Ovu poruku je menjao savkic dana 09.09.2008. u 10:56 GMT+1]
 
Odgovor na temu

.:Marvin:.
Taurunum

Član broj: 36626
Poruke: 94
91.143.212.*



Profil

icon Re: SQL upit - potrebna pomoc oko sintakse09.09.2008. u 09:33 - pre 189 meseci
Na brzinu ovako, padaju mi na pamet dve varijante,

Prva, ako SQLu prosledis ceo combo.caption, da uzmes Left(nekistring, 5) i to ce ti dati levih 5 karaktera.

Druga varijanta, je da u Delfiju isparsiras taj string (text iz comboboxa), pa da onda prosledis Query-ju kao parametar.
Za to mozes da koristis f-ju POS, koja ce da ti vrati poziciju praznog stringa ('') kojim razdvajas polje 1 i polje 2. Onda pomocu Copy izvuces prvi deo toga (sto je u stvari polje 1) i prosledis Query-ju kao parametar.

Ako nisam bio jasan, ili imas jos pitanja, tu sam.
 
Odgovor na temu

prginfo
NS

Član broj: 174814
Poruke: 133
89.216.48.*



+1 Profil

icon Re: SQL upit - potrebna pomoc oko sintakse09.09.2008. u 10:53 - pre 189 meseci
Bio sam probao sa LEFT, zato sto mi to odgovara, ali nisam siguran za sintaksu. Bilo je npr. ovako:

Query1.SQL.Add('select * from TABELA where POLJE1 like LEFT'+ QuotedStr(ANsiUpperCase(combobox.text)),5);

Ako je moguce, zeleo bih da vidim sintaksu (gde da stavim 5, i da li u zagradi, sa zarezom, ...?...)

Hvala
 
Odgovor na temu

Miloš Baić
Miloš Baić
ERP (Dynamics NAV) programer
Beograd

Član broj: 72468
Poruke: 1155
93.86.84.*



Profil

icon Re: SQL upit - potrebna pomoc oko sintakse10.09.2008. u 07:06 - pre 189 meseci
Citat:
Kako da napravim upit da mi gleda samo npr. prvih 5 karaktera u stringu combobox.text.

Koliko sam shvatio, spajaš dva atributa u jedan!?! Recimo ime i prezime, šta se dešava ako atribut (tih prvih 5 karaktera) u nekom slučaju sadrži više od definisane vrednosti!?!
Someone's sitting in the shade today because someone planted a tree a long time ago.
 
Odgovor na temu

prginfo
NS

Član broj: 174814
Poruke: 133
*.ADSL.neobee.net.



+1 Profil

icon Re: SQL upit - potrebna pomoc oko sintakse10.09.2008. u 07:21 - pre 189 meseci
Malo cu da pojasnim.

Imam npr. combobox u koji se ucitavaju vrednosti iz baze iz iste tabele.

Polje1 (JMBG) ; Polje2 (Prezime)

Kada korisnik izabere nesto iz combobox-a, pokrecem SQL u kome u istoj tabeli trazim slog koji ima JMBG kao sto je u comboboxu.

Iz odredjenih razloga ne koristim lookupbox.

Moze i sledece (isto mu dodje). U combobox ucitavam samo JMBG, a SQL-om trazim samo slogove koji imaju prve 4 cifre kao sto su u combobox.text

Drugo, da li postoji mogucnost da uzmem combobox.text i tu vrednost dodelim nekoj varijabli tipa string, pa onda odrezem sve osim prva cetiri znaka i tu novu vrednost dodelim opet nekoj varijabli tipa string sa kojom cu raditi pretrazivanje. Nasao sam nesto tipa StrLeft(string,4), ali nigde nemogu da nadjem konkretan primer. Ipak, ako postoji mogucnost da uradim kao sto sam krenuo (sa SQL-om i LEFT-om) bio bih zadovoljan. Samo mi je potrebna sintaksa koja ce da radi.

Hvala
 
Odgovor na temu

Miloš Baić
Miloš Baić
ERP (Dynamics NAV) programer
Beograd

Član broj: 72468
Poruke: 1155
93.86.84.*



Profil

icon Re: SQL upit - potrebna pomoc oko sintakse10.09.2008. u 08:10 - pre 189 meseci
Citat:
prginfo:Imam npr. combobox u koji se ucitavaju vrednosti iz baze iz iste tabele. Polje1 (JMBG) ; Polje2 (Prezime). Kada korisnik izabere nesto iz combobox-a, pokrecem SQL u kome u istoj tabeli trazim slog koji ima JMBG kao sto je u comboboxu.

Postoje komponente koje su automatizovale taj proces. Nemam delphi, trenutno instaliran, da bih ti rekao i koje su to. Možeš se pozicionirati na slog ili filtrirati dataset. Mislim da ih ima i kao standardne komponente koje dolaze sa instalacijom delphi - ja. Sigurno ih imaš u JEDI i DevExpress.

Citat:
prginfo:Moze i sledece (isto mu dodje). U combobox ucitavam samo JMBG, a SQL-om trazim samo slogove koji imaju prve 4 cifre kao sto su u combobox.text

Optimizuj to tako što ćeš korisniku ponuditi više mogućnosti za pretragu, npr. po imenu, prezimenu ili po JMBG broju. To možeš iskombinovati sa npr. TRadioGroup, TComboBox, etc. i TEdit kontrolom. Kad se izabere polje za pretragu (TRadioGroup, TComboBox, etc.), vrednost iz TEdit kontrole se u SQL - u dodeljuje spram izabranog atributa. U tom slučaju, ako korisnik izabere pretragu po JMBG broju, preko TEdit kontrole vrednost (npr. prve četiri cifre JMBG) proslediš SQL upitu koji koristi operator LIKE spram izabranog atributa, te ukoliko je uslov zadovoljen dobija određen broj slogova u TDataset - u.

Što se tiče same sintakse, ima dobrih diskusija na tu temu, pretraži forum.
Someone's sitting in the shade today because someone planted a tree a long time ago.
 
Odgovor na temu

prginfo
NS

Član broj: 174814
Poruke: 133
*.ADSL.neobee.net.



+1 Profil

icon Re: SQL upit - potrebna pomoc oko sintakse10.09.2008. u 08:20 - pre 189 meseci
Da li postoji varijanta npr.

Imam EditBox u koji je upisano 13 karaktera.

var broj:String;

broj:=EditBox.Text;
broj:=StrLeft(broj,4);

vrednost promenljive broj mi su sada prva cetiri karaktera koji su upisani u EditBox.

Da li je ovo nekako izvodljivo, i na koji nacin. Interesuje me konkretan kod.

Hvala
 
Odgovor na temu

prginfo
NS

Član broj: 174814
Poruke: 133
*.ADSL.neobee.net.



+1 Profil

icon Re: SQL upit - potrebna pomoc oko sintakse10.09.2008. u 08:27 - pre 189 meseci
Citat:
Miloš Baić: Kad se izabere polje za pretragu (TRadioGroup, TComboBox, etc.), vrednost iz TEdit kontrole se u SQL - u dodeljuje spram izabranog atributa. U tom slučaju, ako korisnik izabere pretragu po JMBG broju, preko TEdit kontrole vrednost (npr. prve četiri cifre JMBG) proslediš SQL upitu koji koristi operator LIKE spram izabranog atributa, te ukoliko je uslov zadovoljen dobija određen broj slogova u TDataset - u.


Kako da prosledim SQL upitu da od 13 karaktera gleda samo prva 4 i da po njima pretrazuje?

NPR. ili kako? 'select * from KONTAKTI where JMBG like LEFT'+ QuotedStr(ANsiUpperCase(combobox.text)),4);

Zanima me sintaksa za ovakav SQL upit.

Hvala


 
Odgovor na temu

rambo
Dejan Petković
Beograd

Član broj: 6095
Poruke: 190
*.eunet.yu.



+6 Profil

icon Re: SQL upit - potrebna pomoc oko sintakse10.09.2008. u 09:38 - pre 189 meseci
Pišem malo napamet, ali bi trebalo da radi.

Code:

Query1.SQL.Add('SELECT * FROM tabela WHERE polje1 LIKE ' + QuotedStr(AnsiUpperCase(Left(ComboBox1.Text, 4)) + '%'));


Dakle, ovde je poenta da koristiš Delphi funkciju za uzimanje prvih n znakova iz teksta koji se nalazi u ComboBox-u (pošto pišem napamet, nisam siguran dali se funkcija zove Left ili StrLeft ili nekako drugačije, pa proveri). Pošto u SQL upitu koristiš LIKE operator, onda na kraj stringa koji se traži moraš da dodaš džoker znak (u ovom slučaju %) kojim kažeš da ti prikaže sve zapise u kojima polje1 počinje sa zadatih 4 znakova (% ovde znači "bilo koji tekst", dok bi _ značilo "bilo koji jedan znak").

Inače, ovo što ti hoćeš ja bih svakako rešio na drugi način. Najmanje što bih koristio je LookupComboBox, ali pošto kažeš da ti to ne odgovara, onda bih uzeo neki "običan" ComboBox koji ima pretragu (Incremental search). Na taj način bi ti samo trebao da otkucaš tih prvih 4 znakova koje tražiš i sam ComboBox bi izvršio filtriranje podataka koji se u njemu prikazuju, i ti onda izabereš ono što tražiš. Najbolje urađenu ovakvu funkcionalnost imaju DevExpress komponente ali mislim da nešto osnovno ima i u okviru JVCL paketa.

Drugi način je moguće iskoristiti samo ako ti je "ključno" polje tipa Integer (nisam probao sa stringom ali možda i to prođe). U tom slučaju imaš mogućnost da tu vrednost upišeš kao Object za svaku stavku ComboBox-a. Prilikom dodavanja stavke u ComboBox, umesto Add koristi metod AddObject kastujući vrednost polja1 u TObject. Prilikom čitanja vrednosti izabrane stavke ComboBox-a koristi ComboBox.Items.Objects[ComboBox.ItemIndex] i opet kastuj nazad u Integer. Probaj ovo sam pa ako zaglaviš pitaj.
"There is a theory which states that if ever anybody discovers exactly what the
Universe is for and why it is here, it will instantly disappear and be replaced by
something even more bizarre and inexplicable. There is another theory which states
that this has already happened."
-- Douglas Adams
 
Odgovor na temu

prginfo
NS

Član broj: 174814
Poruke: 133
79.101.15.*



+1 Profil

icon Re: SQL upit - potrebna pomoc oko sintakse10.09.2008. u 11:19 - pre 189 meseci
Javlja mi gresku:

[[Error] Forma1.pas(149): Missing operator or semicolon]

Cursor mi pokazuje na poziciju na koju sam stavio znak pitanja

+ QuotedStr(AnsiUpperCase(Left( ? ComboBox1.Text, 4)) + '%'));

Hlp
 
Odgovor na temu

schild
Dejan Šild
TopCode Software
Subotica

Član broj: 59888
Poruke: 138
213.240.53.*

Sajt: www.topcode.rs


+2 Profil

icon Re: SQL upit - potrebna pomoc oko sintakse10.09.2008. u 11:25 - pre 189 meseci
Mozda jer Left ne postoji?!
Probaj TrimLeft...
 
Odgovor na temu

prginfo
NS

Član broj: 174814
Poruke: 133
79.101.15.*



+1 Profil

icon Re: SQL upit - potrebna pomoc oko sintakse10.09.2008. u 11:33 - pre 189 meseci
Javlja mi gresku:

[Error] frmKOMITENTI3.pas(149): Too many actual parameters

u kodu kod broja 4, iza ComboBox1.Text
 
Odgovor na temu

Markanto
Marko Antolović
admin, zk
Buševec

Član broj: 184593
Poruke: 55
*.adsl.net.t-com.hr.



+3 Profil

icon Re: SQL upit - potrebna pomoc oko sintakse10.09.2008. u 11:36 - pre 189 meseci
var
source, target : AnsiString;
begin
source := '123456789';
target := AnsiLeftStr(source, 3);

ShowMessage('Source = '+source);
ShowMessage('Target = '+target);
end;


Source = 123456789
Target = 123

http://www.delphibasics.co.uk/RTL.asp?Name=AnsiLeftStr
 
Odgovor na temu

prginfo
NS

Član broj: 174814
Poruke: 133
79.101.15.*



+1 Profil

icon Re: SQL upit - potrebna pomoc oko sintakse10.09.2008. u 11:51 - pre 189 meseci
Markanto, hvala ti. Resio sam problem.

I ranije sam imao resenje, ali sam bio umoran i nisam video sopstveni propust:

Nisam deklarisao StrUtils, pa mi nije SQL radio kako treba.

Postoje i druge zanimljive funkcije u StrUtils koje su poboljsane od Delphija 2007.

Hvala svima.
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: SQL upit - potrebna pomoc oko sintakse

[ Pregleda: 3715 | Odgovora: 13 ] > FB > Twit

Postavi temu Odgovori

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