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

CRecordset MFC klasa

[es] :: C/C++ programiranje :: CRecordset MFC klasa

[ Pregleda: 2661 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Djuki
Djurdjevac Ivan
Pancevo

Član broj: 56
Poruke: 171
*.panet.co.yu

Jabber: djuki_mag@elitesecurity.org
ICQ: 66867882


Profil

icon CRecordset MFC klasa25.06.2003. u 20:09 - pre 252 meseci
Imam neke dileme vezano za ovu MFC klasu. Pravio sam projekat u Visual C++ - u koji radi sa bazom koja ima dve tabele povezane preko primarnog i sekundarnog kljuca. Wizard kreira CRecordset koja sadrzi sve atribute i iz jedne i iz druge tabele. Ono sto me zanima jeste: Da li je moguce dodavasi podatke samo u jednu tabelu preko te CRecorset klase koja sadzi ponavljam atribute iz obe tabele. Ono sto sam ja uradio jeste da sam dodao nove klase koje sadrze atribute jedne, odnosno druge tabele i preko tih klasa dodavao podatke u bazu. Meni program radi ali je pitanje da li sam bespotrebno unosio klase u projekat.

Druga stvar je da ne mogu da editujem podatke iz baze jer su readonly gde da promenim tu osobinu, Mislim da bi trebalo da bude preko klase CDatabase sa OpenEx() ali mi nesto ne ide...
 
Odgovor na temu

mikeloco
Novi Sad

Član broj: 2002
Poruke: 2
*.metrohive.net



Profil

icon Re: CRecordset MFC klasa27.06.2003. u 07:13 - pre 252 meseci
Pravilno si postupio, jer record set za dve ili vise tabela sluzi iskljucivo za select. Ono sto je predlog je da za upis, izmenu ili brisanje podataka iz baze ostvarujes direktno sa SQL komandama.

Primer:
CString strSQL = "INSERT INTO TableName VALUES(1,'neki tekst',2....);
// ovo mozes da posepas na vise redova da bi upit napunio sa pravim vrednostima
// koje su tebi potrebne

ili
CString strSQL = "UPDATE TableName SET ImePolja1 = 'nekitekst', ImePolja2 = 2
WHERE ID = ... (itd)

na kraju koristis

db.ExecuteSQL(strSQL);

Tu bi trebalo da budu jos i redovi za transakcije ali to je vec neko drugo pitanje...
Pozdrav!
 
Odgovor na temu

Djuki
Djurdjevac Ivan
Pancevo

Član broj: 56
Poruke: 171
*.panet.co.yu

Jabber: djuki_mag@elitesecurity.org
ICQ: 66867882


Profil

icon Re: CRecordset MFC klasa27.06.2003. u 14:11 - pre 252 meseci
Hvala na odgovoru, a kako da Editujem recordset, setovan je na ReadOnly kako to da promenim?
Samo me to muci. A zasto je bolje db.ExecuteSQL() od CRecordset.AddNew(); kako ti kazes ?
 
Odgovor na temu

Djuki
Djurdjevac Ivan
Pancevo

Član broj: 56
Poruke: 171
*.panet.co.yu

Jabber: djuki_mag@elitesecurity.org
ICQ: 66867882


Profil

icon Re: CRecordset MFC klasa27.06.2003. u 14:56 - pre 252 meseci
Nasao sam. Nisam probao ali treba da bude

Code:

CRecordset::Open(CRecordset::dynaset, CRecordset::GetDefaultSql, CRecordset::none); 



CRecordser::none podrzava Edit i Delete.
 
Odgovor na temu

mikeloco
Novi Sad

Član broj: 2002
Poruke: 2
*.metrohive.net



Profil

icon Re: CRecordset MFC klasa30.06.2003. u 14:39 - pre 252 meseci
Evo jednog klasicnog koda za promenu baze sa klasom CRecordset.

Prvo napravis novu klasu izvedenu iz klase CRecordset recimo da se zove

class BazaIzabraneRubrike : public CRecordset
....
....
...


ova klasa je zaduzena za rad sa poljima neke tabele
Kada ti je potrebna bilo gde u kodu ukljucis njen heder

#include "BazaIzabrane rubrike.h"

a korisnjenje bi bilo recimo ovako:

naravno CDatabase mora biti otvoren
primer:
CDatabase db;
db.Open("Foto");


void CYuSentView::PremestiURecycleBin(CString trenutnaS)
{
BazaIzabraneRubrike *m_set = NULL;
theApp.db.BeginTrans();

TRY
{
m_set = new BazaIzabraneRubrike(&theApp.db);

CString strSQL = "SELECT * FROM IzabraneRubrike_";
// ovde treba voditi racuna da broj polja u upitu odgovara
// broju polja u recordsetu BazaIzabraneRubrike
strSQL += ABAZA;
strSQL += " WHERE IDSIR = ";
strSQL += trenutnaS;

m_set->Open(CRecordset::snapshot,strSQL);

if(!m_set->IsEOF()) // ako je zadovoljen uslov, tj. ako
// je pronasao zeljeni rekord
{
m_set->Edit();
m_set->m_IDRSIR = 0;
// tu moze da dodje vise vrednosti
m_set->Update();
}


m_set->Close();
delete m_set;
theApp.db.CommitTrans();

}
CATCH(CDBException, p)
{
AfxMessageBox(p->m_strError);

theApp.db.Rollback();
if (m_set)
{
if (m_set->IsOpen())
{
m_set->Close();
}
delete m_set;
}
}
END_CATCH
}

to se otprilike ovako radi, kod je naravno mnogo cistiji i kraci ako radis sa cistim SQL-om

inace ako radis sa nekom bazom koja podrzava Stored procedure, e to ti je the best
Pozdrav!
 
Odgovor na temu

[es] :: C/C++ programiranje :: CRecordset MFC klasa

[ Pregleda: 2661 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

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