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...
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!
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 ?
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();
}