Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 11 odgovora
  • 3.514 pregleda

Najnovija ↓

delete (sql) brise sve redove 23.10.2010. u 21:07 · pre 195 meseci #1
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?
Re: delete (sql) brise sve redove 23.10.2010. u 23:42 · pre 195 meseci #3
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...
Re: delete (sql) brise sve redove 24.10.2010. u 18:19 · pre 195 meseci #4
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();
Re: delete (sql) brise sve redove 24.10.2010. u 18:27 · pre 195 meseci
izmenjeno 1 put, poslednji put milan_sr 24.10.2010. u 18:39
  1. milan_sr24.10.2010. u 18:39zapis iz teksta poruke
#5
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
Re: delete (sql) brise sve redove 24.10.2010. u 20:52 · pre 195 meseci #6
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...
Re: delete (sql) brise sve redove 25.10.2010. u 17:26 · pre 195 meseci #8
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
Re: delete (sql) brise sve redove 25.10.2010. u 20:15 · pre 195 meseci #9
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();

Re: delete (sql) brise sve redove 25.10.2010. u 20:28 · pre 195 meseci #10
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.
Re: delete (sql) brise sve redove 25.10.2010. u 21:03 · pre 195 meseci #11
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
Re: delete (sql) brise sve redove 26.10.2010. u 07:11 · pre 195 meseci #12
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.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme