[ milan_sr @ 23.10.2010. 20:07 ] @
hocu da izbrisem red u bazi na osnovi podatka po koloni...kada koristim nesto ovako DELETE FROM Tabela WHERE Kolona1=1 AND Kolona2=1 radi OK znaci izbrise samo jedan red...al kad koristim DELETE FROM Tabela WHERE Kolona1 LIKE '%" + Edit->Text + "%' AND Kolona2 LIKE '%" + Edit1->Text + "%'"; da kazemo u edit se zapisuje vredost kolone1 po kliku u edit1 se zapisuje vrednost po kolone2 po kliku....ako u gridu imam 6 reda i selektiram prvi red i izbrisem ok je...ali ako selektiram zadnji red i izbrisem ode sve...Ucemu je problem tu?
[ itf @ 23.10.2010. 20:22 ] @
To je specifičan slučaj kada sql upit moraš sastavljati upotrebom QuotedStr funkcije.

http://www.delphipages.com/forum/showthread.php?t=143249
[ milan_sr @ 23.10.2010. 22:42 ] @
ako ti nije tesko aj sastavi ga ovo sa tom funkciom.....

AnsiString Upit= "DELETE FROM Tabela WHERE Kolona1 LIKE '%" + Edit->Text + "%' AND Kolona2 LIKE '%" + Edit1->Text + "%'";

probao sam ama ne mi ide...javlja mi gresku t.e puca sql...ako nije problem...Hvala ti...
[ X Files @ 24.10.2010. 17:19 ] @
Imas neku gresku u kodu a ne u upitu.

Napravi neki test primer, sa Edit-om u kome mozes da menjas delove upita.

Da li koristis?
ADOQuery1->ExecSQL();
... umesto:
ADOQuery1->Open();
[ milan_sr @ 24.10.2010. 17:27 ] @
evo koda

ADOQuery1->Close();
ADOQuery1->SQL->Clear();
AnsiString Upit= "DELETE FROM Tabela WHERE Kolona1 LIKE '%" + Edit->Text + "%' AND Kolona2 LIKE '%" + Edit1->Text + "%'";
ADOQuery1->SQL->Add( Upit );
ADOQuery1->ExecSQL();

kako sta je reko itf probao sam da koristim QuotedStr funkciju, kao sto sam primetio ona dodaje ' na pocetku i nakraju od stringa...nikako ne mogu uklopiti funkciju u upit...svaki put upit "pukne"...upit kao sta je gore napisan brise mi celu tabelu...kada brises redom odozgo pa nadole ured je brise...ali ako probas da izbrises neki drugi red onda izbrise celu tabelu(bar kod mene tako funkcionise). Hvala


[Ovu poruku je menjao milan_sr dana 24.10.2010. u 18:39 GMT+1]
[ X Files @ 24.10.2010. 19:52 ] @
Evo jedan primer, pa vidi kako kod mene radi.

Moraces da ponovo napravis ConnectionString i za TADOTable i za TADOQuery, jer je kod mene apsolutna putanja.


Inace, potrebno je neko vreme (sekund, dva) da bi se podaci reflektovali na DBGrid, pa mozes kod doraditi sa nekim Close/Open nad TADOTable...
[ milan_sr @ 25.10.2010. 14:37 ] @
i kod mene radi tako kada nemam relacie u bazi...al kad ima eve kako radi...evo primer http://0.mk/test2 ako nije problem pogledaj...
[ X Files @ 25.10.2010. 16:26 ] @
Ne mogu da pruzmem fajl, mada trenutno i nemam puno vremena.

Ako su relacije problem, da nisi mozda u\kod integriteta baze definisao da se kaskadno brise?

U svakom slucaju, ne treba ti SQL upit za operaciju koju zelis


1. DisableControls
2. Napravis klasicu petlju koja ide do EOF i brises stavku po stavku sve sto je pod uslovom koji zelis
3. EnableControls
[ X Files @ 25.10.2010. 19:15 ] @
Ovo je tvoj kod koji ne radi:
Code:

ADOQuery1->Close();
ADOQuery1->SQL->Clear();
AnsiString Upit = "DELETE FROM Relacija WHERE IDT1 in (SELECT IDTabela1  from Tabela1 WHERE IDTabela1 LIKE '%"+DBEdit1->Text+"%') AND IDT2 in  (select IDTabela2  from Tabela2 WHERE IDTabela2 LIKE '%" + Edit2->Text+ "%')";
ADOQuery1->SQL->Add( Upit );
ADOQuery1->ExecSQL();


UVEK u fazi testiranja, pre izvrsenja upita stavi neki ShowMessage(), koji ce ti pokazati kako glasi upit i eventualno gde je greska.

Dakle, umesto:
Code:

ADOQuery1->ExecSQL();

... stavi:
Code:

// ADOQuery1->ExecSQL(); // komentar, ne izvrsava se
ShowMessage( Upit );


Videces da uvek dobijas PRAZAN DBEdit1->Text.
Code:

... IDTabela1 LIKE '%%' ...

... sto znaci da se SVE uzima u obzir, a ne ono sto ocekujes.

DBEdit->Text je prazan jer PRVO zatvaras upit (ADOQuery1->Close();) a zatim pokusavas da pristupis elementu tog zatvorenog upita (DBEdit1->Text).

Dakle, pre zatvaranja treba da ZAPAMTIS sta da prosledis u upit:

Code:

AnsiString STA_BRISEM = DBEdit1->Text;
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
AnsiString Upit = "DELETE FROM Relacija WHERE IDT1 in (SELECT IDTabela1  from Tabela1 WHERE IDTabela1 LIKE '%"+STA_BRISEM+"%') AND IDT2 in  (select IDTabela2  from Tabela2 WHERE IDTabela2 LIKE '%" + Edit2->Text+ "%')";
ADOQuery1->SQL->Add( Upit );
ADOQuery1->ExecSQL();

[ X Files @ 25.10.2010. 19:28 ] @
Milane, u ovoj poruci:
http://www.elitesecurity.org/p2723775
...NISI dao kod koji proizvodi problem. Da si dao PRAVI kod, problem bi bio resen odmah.


Inace, i taj LIKE ti je opasan u upitu, jer ce obrisati sve sto SADRZI U SEBI trazeni broj, a to sigurno ne zelis.
[ milan_sr @ 25.10.2010. 20:03 ] @
Hteo sam da ne "kopliciram" upit, a i sa tim upitom daje iste rezultate...Naviko sam od dev c++ da koristim watch i tu sam probao i mislim da dbedit je imao vredost koju zelim ili sam nes drugo video...hvala ti mnogo za pomoc
[ X Files @ 26.10.2010. 06:11 ] @
Kada uploadujes test projekat, prethodno obrisi: *.tds *.obj *.~* fajlove, jer nisu potrebni. Recimo *.tds fajl cini cesto oko 90% velicine samog projekta. Tada ces moci da uploadujes projekat i na ES.