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

BCB: Prosleđivanje parametara sql upitu

[es] :: C/C++ programiranje :: BCB: Prosleđivanje parametara sql upitu

[ Pregleda: 1707 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Mali Misha
Mihajlo Anđelković
NBGD

Član broj: 79396
Poruke: 379
78.90.101.*

ICQ: 195487525
Sajt: cpptea.com


+1 Profil

icon BCB: Prosleđivanje parametara sql upitu18.03.2009. u 08:35 - pre 183 meseci
Već neko vreme pokušavam ovo da napravim. Naime radim sa Interbase + BCB6. Napravio sam malu TIBQuery i preko TDataSource mogu da pregledam njene rezultate u jednom TDBGrid-u. Evo, ovako izgleda upit:
Code:
SELECT *
FROM TABELA
WHERE DATUM < :DAT

Ovaj parametar DAT mogu da postavim pre nego što pozovom ShowModal() forme koja ga prikazuje, i mogu da aktiviram TIBQuery:
Code:
        DMod->QUpit->ParamByName("DAT")->AsInteger = GenDateShort();
        DMod->QUpit->Prepared = true;
        DMod->QUpit->Active = true;

I ovo radi. No, ako promenim malo bazu tokom rada programa, i opet probam da pozovem formu, dobijam grešku da je 'dataset open' i da ne može da izvede ovo osvežavanje. Pokušao sam da podesim Enabled property dataseta na false pa da je vratim na true, ali i dalje ne radi. Gde grešim?
Ipak se ++uje.
 
Odgovor na temu

Mali Misha
Mihajlo Anđelković
NBGD

Član broj: 79396
Poruke: 379
78.90.101.*

ICQ: 195487525
Sajt: cpptea.com


+1 Profil

icon Re: BCB: Prosleđivanje parametara sql upitu18.03.2009. u 08:41 - pre 182 meseci
Naizgled sam rešio problem dodavanjem Close() i Open() pre i posle rada sa TIBQuery.

Code:
        DMod->QUpit->Close();
        // ...
        DMod->QUpit->Open();

Ipak se ++uje.
 
Odgovor na temu

Mali Misha
Mihajlo Anđelković
NBGD

Član broj: 79396
Poruke: 379
78.90.101.*

ICQ: 195487525
Sajt: cpptea.com


+1 Profil

icon Re: BCB: Prosleđivanje parametara sql upitu18.03.2009. u 09:02 - pre 182 meseci
Ali imam sada jedno dalje pitanje. Podaci koje unosim u drugoj tabeli sada nisu ažurni u ovoj. Da li trebam još nešto da uradim u ovom pripremnom delu ili trebam na neki način da uradim Commit podataka pri zatvaranju forme sa drugom tabelom. Evo ovo radim:
Code:
void __fastcall TFPodaci::TPodaciExit(TObject *Sender)
{
        if(     DMod->PodaciTbl->State == dsInsert
                || DMod->PodaciTbl->State == dsEdit)
        {
                DMod->PodaciTbl->Post();
        }
        DMod->PodaciTS->CommitRetaining();
}

Ipak se ++uje.
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.237.*



+9 Profil

icon Re: BCB: Prosleđivanje parametara sql upitu18.03.2009. u 09:06 - pre 182 meseci
Kako misliš "nisu ažurni"? Opiši situaciju.
 
Odgovor na temu

Mali Misha
Mihajlo Anđelković
NBGD

Član broj: 79396
Poruke: 379
78.90.101.*

ICQ: 195487525
Sajt: cpptea.com


+1 Profil

icon Re: BCB: Prosleđivanje parametara sql upitu18.03.2009. u 09:18 - pre 182 meseci
Imam posebnu formu, FPodaci, koja mi služi za popunjavanje tabele PodaciTbl (TIBTable).

Znači pokrenem program, i dodam nekoliko novih unosa koji bi trebali da se pojave u rezultatu gore opisanog upita. Onda odem do druge forme FUpit gde se prijazuje rezultat QUpit-a, a ono ništa novo. Da, svaka forma se zatvara pre otvaranja one druge. Otvaram ih kao Modal.

Kada izađem iz programa pa ga opet pokrenem, podaci bivaju ažurirani. Znači negde nešto fali da 'pogura' ovo ažuriranje. Možda mi je greška što se vezujem za onExit od FPodaci, a možda treba još nešto da se ubaci pre poziva ShowModal() od FUpit-a.
Ipak se ++uje.
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.237.*



+9 Profil

icon Re: BCB: Prosleđivanje parametara sql upitu18.03.2009. u 10:15 - pre 182 meseci
Nakon update-a (sql-a) pokušaj nešto poput

ProblematicnaTablica->Close();
ProblematicnaTablica->Open();

tj. da se odspoji od baze pa ponovo spoji, i pri tome da izvrši select* from tablica.
 
Odgovor na temu

Mali Misha
Mihajlo Anđelković
NBGD

Član broj: 79396
Poruke: 379
78.90.101.*

ICQ: 195487525
Sajt: cpptea.com


+1 Profil

icon Re: BCB: Prosleđivanje parametara sql upitu18.03.2009. u 10:44 - pre 182 meseci
Jok, ništa.

Probao sam i Refresh() na samom Grid-u koji pokazuje rezultate upita, bez uspeha.
Ipak se ++uje.
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.237.*



+9 Profil

icon Re: BCB: Prosleđivanje parametara sql upitu18.03.2009. u 10:56 - pre 182 meseci
Ne vidim zašto to nije prošlo jer u pravilu to mora raditi pošto je riječ o ponovnom spajanju na bazi. Da li ti je dataset u memoriji ili ga učitavaš lokalno u xml tj. BatchOptimistic i sl? Kako se uopće spajaš na bazu?

A refresh u praksi izbjegavaj. Što je veći broj zapisa to duže se čeka na refresh. Bolje ona gore opcija.
 
Odgovor na temu

Mali Misha
Mihajlo Anđelković
NBGD

Član broj: 79396
Poruke: 379
78.90.101.*

ICQ: 195487525
Sajt: cpptea.com


+1 Profil

icon Re: BCB: Prosleđivanje parametara sql upitu18.03.2009. u 11:42 - pre 182 meseci
Hvala na vremenu, itf.

Radim sa BCB + Interbase, sve je u jednom *.GDB fajlu. Imam Data Modul u kome držim sve tabele, TS, DS i storedprocedures. Onda uključujem heder tog Data Modula gde treba i koristim objekte.

Dakle, da, sve je u memoriji, aktivno, i samo čeka da ga koristim.

Tabele čak rade normalno. Sad sam napravio jednu drugu formu sa DBGridom koja isto tako šalje razne upite tokom rada i sve se prikazuje bez problema. Jedino je znači to osvežavanje problematično. Dakle radi sve kada isključim pa opet startujem program. No.. evo sad sam probao čak da uradim open/close same baze i opet ista situacija. Nešto je najverovatnije sa samom formom ili čime već.

Dobro, opisaću opet njen rad. Iz glavne forme je pozivam sa ShowModal, a pre toga pozivam nad njom novoformirani SQL upit:
Code:
void __fastcall TForm1::Up1Click(TObject *Sender)
{
        FUpit->upd();
        FUpit->ShowModal();
}

// ...

void TFUpit::upd()
{
        DMod->QUpit->Close();
        DMod->QUpit->ParamByName("DAT")->AsInteger = GenDateShort();
        DMod->QUpit->Prepared = true;
        DMod->QUpit->Active = true;
        DMod->QUpit->Open();

        TUput->Refresh(); // TDBGrid
}

Sve radi kako treba, čak i kada ima više parametara koji variraju. Pak, novi unosi ne bivaju uezti u obzir. Ne, ne pomaže ni ako pre i posle sređivanja upita pozovem Close/Open nad jedinom tabelom iz koje se izvlače podaci.. heh :)

Probao sam i da onemogućim monotonost parametra, pošto nešto možda čeka da se isti promeni.
Code:
        static int add = 0;
        add++;
        // ...
        DMod->QUpit->ParamByName("DAT")->AsInteger = GenDateShort() + add;

Bez uspeha.
Ipak se ++uje.
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.237.*



+9 Profil

icon Re: BCB: Prosleđivanje parametara sql upitu18.03.2009. u 12:51 - pre 182 meseci
Onda ne vidim koja je konkretno razlika između resetiranja (ponovnog pokretanja) aplikacije da bi se spojio na bazu i ove alternative s Open i Close. Je li možda koristiš kakav globalni objekt za konekciju? Nešto poput ADOConnection objekta pa da tablice iz njega dobivaju konekciju ili svaka tablica ima svoju definiranu konekciju? Jesi i taj objekt otvorio i zatvorio?
 
Odgovor na temu

Mali Misha
Mihajlo Anđelković
NBGD

Član broj: 79396
Poruke: 379
78.90.101.*

ICQ: 195487525
Sajt: cpptea.com


+1 Profil

icon Re: BCB: Prosleđivanje parametara sql upitu18.03.2009. u 13:05 - pre 182 meseci
Ako shvatim o čemu se radi, pisaću ovde. Zaista je neobično tako da je vrlo moguće da mali zeleni rade negde unutra. :D

Elem, da se vratim na temu: dodavanje parametra. Naleteo sam na nešto interesantno:

1) U TQuery upišem SQL upit u kome koristim parametre, i te parametre podešavam iz C++ pre otvaranja forme. Pri otvaranju forme tokom rada programa odbija da izvrši upit, javljajući da ovih polja (za parametre) nema.
2) Odem onda na TQuery, dodam ova polja, i mislio bi čovek, radiće. Jok, i dalje prijavljuje da se ova polja ne vide.
3) Odem opet na listu polja dotične TQuery, obrišem polja koja sam uneo, probam opet, sve radi.

Retko radim sa BCB (6.0 u ovom slučaju), ali ovo je, što bi se reklo, baš markantna pojedinost. :D
Ipak se ++uje.
 
Odgovor na temu

savkic
Igor Savkić

Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: BCB: Prosleđivanje parametara sql upitu18.03.2009. u 17:29 - pre 182 meseci
Nisam shvatio da li si rešio problem ili ne? Ako nisi, da li oba upita koriste istu transakciju, ako ne da li posle unosa podataka comituješ transakciju i kako su ti transakcije podešene?

> DMod->QUpit->ParamByName("DAT")->AsInteger = GenDateShort();

Sigurnije je da koristiš AsDate ili AsDateTime.

> DMod->PodaciTS->CommitRetaining();

Izbegavaj CommitRetaining i koristi Commit gde god je to moguće.

 
Odgovor na temu

Mali Misha
Mihajlo Anđelković
NBGD

Član broj: 79396
Poruke: 379
78.90.101.*

ICQ: 195487525
Sajt: cpptea.com


+1 Profil

icon Re: BCB: Prosleđivanje parametara sql upitu19.03.2009. u 08:01 - pre 182 meseci
Citat:
da li posle unosa podataka comituješ transakciju

Ee, to care. Koristili su istu transakciju (naravno) ali nigde nije bilo eksplicitnog commita.
Za datum koristim moj format, koji je celi broj (int).
Ipak se ++uje.
 
Odgovor na temu

[es] :: C/C++ programiranje :: BCB: Prosleđivanje parametara sql upitu

[ Pregleda: 1707 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

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