[ Miloš Baić @ 22.12.2005. 10:43 ] @
Napravio sam BP u SQL Server-u 2000. Znaci, ima vise tabela u oviru nje.
Povezao sam bazu sa Delphi Aplikacijom putem ADO tehnologije i to sve lepo radi.
Na osnovu ADO tutorijala sa sajta, resio sam neke probleme.
E, sad, hteo bih da nad tabelama a putem Delphi-ja izvodim SQL upite, tipa:

SELECT *
FROM
WHERE

a kasnije i nesto slozenije.

Kako se to u Delphi okruzenju izvodi? Molim za detaljan odgovor zato sto
nisam nikad radio sa SQL upitima...

P.S. SQL naredbe u okviru samog SQL Server-a 2000 daju mi zeljeno i hteo bih to
isto iz Delphi Aplikacije

[ Vic @ 22.12.2005. 12:14 ] @
Koristi ado query, pogledaj help u Delphiju
[ Miloš Baić @ 22.12.2005. 16:44 ] @
Da, znam da postoji ADOQuery ali ne znam kako to sve
da povezem kao sa ADOTable i vrsim obradu?!
Moze neko objasnjenje, detaljnije o tome?
Sta sve treba postaviti na formu, povezati sa dbgrid-om?
[ DeYo @ 23.12.2005. 14:00 ] @
imas kompletan ADO tutorijal na:
http://delphi.about.com/od/database/a/databasecourse.htm

konkretno, povezivanje ADOQuery-ja sa ostalim komponentama je objasnjeno u chapter 7:
http://delphi.about.com/od/database/l/aa050101a.htm

[Ovu poruku je menjao DeYo dana 23.12.2005. u 15:01 GMT+1]
[ Miloš Baić @ 24.12.2005. 16:58 ] @
Hvala, pomoglo mi je da uradim sta sam zeleo!!!

with ADOQuery1 do begin
Close;
SQL.Text := 'SELECT OilName FROM Oils ';
Open;

Ispisao sam ovaj kod i on mi prikaze celu tabelu, e sad ja bi hteo da mi se iz OilName
isfiltrira Ime koje sam uneo u Edit1.Text, probao sam sledece, al nece:


with ADOQuery1 do begin
Close;
SQL.Text := 'SELECT OilName FROM Oils '+ Edit1.Text;
Open;

U cemu je problem?
[ dekys @ 24.12.2005. 18:23 ] @
with ADOQuery1 do
begin
Close;
SQL.Text := 'SELECT OilName FROM Oils where OilName ='+ Edit1.Text;
Open;

mozda je umesto znaka jednakosti 'LIKE' ne secam se... tj. koristim mySQL server

Ako ti i dalje ne radi onda zahteva da edit text preneses kao tekst izmedju '' pa onda koristi QuotedStr
[ Miloš Baić @ 24.12.2005. 18:44 ] @
Nije mi uspelo:

with ADOQuery1 do
begin
Close;
SQL.Text := 'SELECT OilName FROM Oils where OilName ='+ Edit1.Text;
Open;

Ni sa LIKE?!

Sta si mislio pod:
"Ako ti i dalje ne radi onda zahteva da edit text preneses kao tekst izmedju '' pa onda koristi QuotedStr?!

Dalje, sta mi je interesantno:

Povezao sam Delphi Aplikaciju sa SQL Serverom 2000 i odradio neke upite.
E, sad, pokusao sam da isfiltriram ali ne ide. Kod:

with ADOQuery1 do begin
Close;
SQL.Text := 'SELECT * FROM Ime Tabele WHERE Ime Polja LIKE "%'+deo_reci+'%"';
Open;
end;

Ovo je sve ok ali nesto nije u redu sa sintaksom, odnosno "%'+deo_reci+'%" ovo deo_reci
uvek bude greska, sve ovo je plave boje ali deo_reci je crne?!
Sta je problem?

Drugo, hteo bih postaviti jedan Edit1.Text i da se u njega unese jedno slovo i da se
isfiltriraju sva imena na to slovo (koja pocinju na to slovo)?





[Ovu poruku je menjao loshmiscg dana 24.12.2005. u 20:09 GMT+1]
[ dekys @ 25.12.2005. 00:48 ] @
Code:
   SQL.Add('SELECT DUZINA, REC, OPIS');
      SQL.Add('FROM Enigma');
      SQL.Add('WHERE (REC ="' + Form1.Edit2.Text  + '")');



ili

Code:

      SQL.Add('SELECT DUZINA, REC, OPIS');
      SQL.Add('FROM  Enigma');
      SQL.Add('WHERE   (DUZINA =' +  IntToStr(SpinEdit1.Value) + ')');
      SQL.Add('AND  (REC LIKE' + chr(39)+Form2.Edit1.Text+chr(39)+ ')');
      SQL.Add('ORDER BY REC');


Evo ovako sam ja to nekada negde uradio!!!

Sada koristim parametrizirane upite. Tebi ce ovo biti dovoljno!

Citav problem je da znacina apostrofima tj. chr(39)


sto se tice ' (koja pocinju na to slovo)?' koristio sam

Code:
  SQL.Add('WHERE REC LIKE ' + chr(39) + Form5.Edit1.Text +'%' + chr(39));


[Ovu poruku je menjao dekys dana 25.12.2005. u 01:50 GMT+1]
[ Miloš Baić @ 25.12.2005. 02:33 ] @
Uneo sam ovaj kod:

procedure TForm1.Button2Click(Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.SQL.Add('SELECT OilName, LatinName');
ADOQuery1.SQL.Add('FROM Oils');
ADOQuery1.SQL.Add('WHERE OilName LIKE ' + chr(39) + Form1.Edit1.Text +'%' + chr(39));
ADOQuery1.Open;
end;

I nista, samo prikaze DBGrid1 sa poljima tabele ali prazno?!

Druga procedura:

procedure TForm1.Button2Click(Sender: TObject);
begin
ADOQuery1.SQL.Add('SELECT OilName, LatinName');
ADOQuery1.SQL.Add('FROM Oils');
ADOQuery1.SQL.Add('WHERE (OilName ="' + Form1.Edit1.Text + '")');

end;


I nista, samo prikaze DBGrid1 sa poljima tabele ali prazno?!

Da li to ima neke veze kako su polja indeksirana u SQL Serveru 2000? ( primarni index je OilID,
a ostala dva indexa su OilName i LatinName)

Procedura pokazuje kao da taj podatak koji je unet u bazu ne postoji zato je DBGrid prazan, a u stvari je tu
ili nije polje dobro indeksirano pa ne moze vrsiti pretragu po tom polju?!
Probao sam i sa OilID koji je indeksiran kao primarni i opet isto?!

Kod za OilID(primarni kljuc):

procedure TForm1.Button3Click(Sender: TObject);
begin
ADOQuery1.SQL.Add('SELECT OilID, OilName, LatinName');
ADOQuery1.SQL.Add('FROM Oils');
ADOQuery1.SQL.Add('WHERE (OilID ="' + Form1.Edit1.Text + '")');

end;

A kad ubacim jos i ADOQuery1.Open, kod:

ADOQuery1.SQL.Add('SELECT OilName, LatinName');
ADOQuery1.SQL.Add('FROM Oils');
ADOQuery1.SQL.Add('WHERE (OilName ="' + Form1.Edit1.Text + '")');
ADOQuery1.Open;

izbaci gresku : Invalid Column Name 'neki naziv'?! - a "neki naziv" je upisan
u tu kolonu.

[Ovu poruku je menjao loshmiscg dana 25.12.2005. u 03:51 GMT+1]
[ Vic @ 25.12.2005. 16:18 ] @
Proveri setovanja za SQL server u ODBC. Mislim da bi trebalo da cekiras opciju use Ansi quoted strings.
[ Miloš Baić @ 25.12.2005. 16:59 ] @
Citat:
Vic: Proveri setovanja za SQL server u ODBC. Mislim da bi trebalo da cekiras opciju use Ansi quoted strings.


Mozes li malo da mi pojasnis ovo sto si napisao, odnosno da mi objasnis kako to
da izvedem?
[ dekys @ 25.12.2005. 23:19 ] @
Pa svugde moras da uneses ADOQuery1.Open;
[ Miloš Baić @ 26.12.2005. 00:01 ] @
Unesem ali ni tad nece da funkcionise?!

Code:
 ADOQuery1.SQL.Add('SELECT OilName, LatinName');
         ADOQuery1.SQL.Add('FROM Oils');
         ADOQuery1.SQL.Add('WHERE (OilName ="' + Form1.Edit1.Text  + '")');
         ADOQuery1.Open;


Znaci u Edit1.Text je unesena neka vrednost iz polja OilName, znaci ta vrednost postoji u kolono OilName,
i pritiskom na dugme (OnClick) izbaci se greska:

"Invalid column name "trazena_vrednost""

[Ovu poruku je menjao loshmiscg dana 26.12.2005. u 11:24 GMT+1]
[ Miloš Baić @ 30.12.2005. 13:12 ] @
Zar je moguce da mi niko ne moze pomoci resiti problem?!
[ dekys @ 30.12.2005. 21:19 ] @
pa mozes i sam da zakljucis u cemu je problem
"Invalid column name "trazena_vrednost""!!!!!!!!!!!!!!
Verovatno imam u komponenti ADOQuery1 u SQL vec unesen neki upit tako da ti on pokusava odraditi i taj upit i onaj koji ti iz coda dodas zato je potrebno da ga predhodno ocistis

Code:
 ADOQuery1.Clear;
ADOQuery1.SQL.Add('SELECT OilName, LatinName');         
ADOQuery1.SQL.Add('FROM Oils');         
ADOQuery1.SQL.Add('WHERE (OilName ="' + Form1.Edit1.Text  + '")');         ADOQuery1.Open;
[ Miloš Baić @ 03.01.2006. 13:02 ] @
Code:
ADOQuery1.SQL.Clear;
        ADOQuery1.SQL.Add('SELECT OilName');
        ADOQuery1.SQL.Add('FROM Oils');
        ADOQuery1.SQL.Add('WHERE (OilName ="' + Form1.Edit1.Text  + '")');
        ADOQuery1.Open;


Ista greska : "Invalid column name 'naziv'"!?
Da li treba ADOQuery1 da se stavi u insert mode ili edit mode?!
Ili tako neka caka!?
Polje po kojem ovde zelim vrsiti pretragu je indeksirano i kad
koristim:

Code:
ADOTable1.Filter := 'OilName = ' + QuotedStr(Edit1.Text);
         ADOTable1.Filtered := true;
         if Edit1.Text = '' then
            ShowMessage('Unesite OilName po kojem se vrsi filtriranje!');
            Edit1.Clear;


i sve lepo odradi?! Gde gresim u Query?

[Ovu poruku je menjao loshmiscg dana 03.01.2006. u 14:03 GMT+1]
[ Miloš Baić @ 04.01.2006. 11:57 ] @
Ljudi, moze li neko?
[ marcha @ 05.01.2006. 11:47 ] @

with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('SELECT OilName');
SQL.Add('FROM Oils');
SQL.Add('WHERE (OilName =' + QuotedStr(Edit1.Text) + ')');
Open;
end
[ Miloš Baić @ 05.01.2006. 14:56 ] @
To mi je trebalo...
Hvala ti druze...

Idemo dalje:

1) Sad bi hteo da prilikom unosa slova npr. B u Edit1.Text da izlista ( isfiltrira ) sva
imena u koloni OilName koji pocinju na to slovo?!

2) da se pretraga izvrsi po dva polja ( Edit1.Text i Edit2.Text),znaci da se
unesu 2 vrednosti za filtriranje, slicno ovome samo za dve kolone:

Code:
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('SELECT OilName');
SQL.Add('FROM Oils');
SQL.Add('WHERE (OilName =' + QuotedStr(Edit1.Text) + ')');
Open;
end


na osnovu polja OilName i LatinName, na primer?!

Moze li?



[Ovu poruku je menjao loshmiscg dana 07.01.2006. u 15:24 GMT+1]