DB mit ADO
-
Ich greife auf DB mit ADO:
// COM-Umgebung initialisieren
::CoInitialize(NULL);
try
{
// ADO Berechtigung CreateInstance von Connection
pConn.CreateInstance(__uuidof(Connection));
// ADO Berechtigung CreateInstance von Command
pCmd.CreateInstance(__uuidof(Command));// Datensatzobjekt erzeugen von Recordset
m_pRs.CreateInstance(__uuidof(Recordset));// Datensatzobjekt öffnen
pConn->Open(bstrConnection,L"sa",L"", adOpenUnspecified);
pCmd->ActiveConnection = pConn;
pCmd->CommandText = bstrCmdText;//“select *from irgendwas“//m_pRs = pCmd->Execute();
m_pRs->PutRefSource(pCmd);// NULL vom Typ Variant erzeugen
_variant_t vNull;
vNull.vt = VT_ERROR;
vNull.scode = DISP_E_PARAMNOTFOUND;// Recordset öffnen
m_pRs->Open(vNull, vNull, adOpenDynamic, adLockOptimistic, adCmdUnknown);// Zeiger auf Bindungsschnittstelle des Datensatzes holen
if (FAILED(m_pRs->QueryInterface(__uuidof(IADORecordBinding),(LPVOID *)&m_piAdoRecordBinding)))
_com_issue_error(E_NOINTERFACE);
// Datensatzklasse an Recordset binden
m_piAdoRecordBinding->BindToRecordset(&m_rsRecSet);
}
// Fehler vorhanden?
catch (_com_error &e)
{
// Fehler anzeigen
GenerateError(e.Error(), e.Description());
}
durch pCmd->CommandText = bstrCmdText;//“select *from irgendwas“ kann ich eine Tabelle auslesen und die Daten anzeigen, was mache ich aber wenn ich noch auf eine andere Tabelle zugreifen will muß ich noch ein Recordset und Command deklarieren oder wie geht’s kann mir jemand es beantworten oder mein Quellcod
anpassen
Vielen Dank
-
Es ist eigentlich so, ich habe alles doppelt deklariert und es scheint zu funktionieren,
allerdings auf DB greife ich in der Methode OnNewDocument() zu wie oben gesehen.
Die Daten verende, bearbeite usw. in View wehre aber für mich logischer wenn man alles in View macht ??
Wenn ich zB ein SQL-Anweisung in View ausführen will muß ich zurück auf Dokument zugreifen Command Objekt holen usw. Da ist auch mein Problem denn wenn ich alles doppelt inizializie muß ich auch zwei zeiger auf Document initialisiere und ich weis nicht wie also einen Zeiger initialisiere ich so
// Zeiger auf die Variable der Datensatzklasse zurückgeben
CCustomRs* CDoc::GetRecSet()
{
// Zeiger auf das Datensatzobjekt zurückgeben
return &m_rsRecSet;}
aber was ist mit dem zweitem den so geht es leider nicht
// Zeiger auf die Variable der Datensatzklasse zurückgeben
CTestRs* CDoc::GetRecSet()
{
// Zeiger auf das Datensatzobjekt zurückgeben
return &m_rstest;}
Wie ist es normalerweise ????
-
vielen vielen vielen Dank, eine sehr große HILFE
-
Rechtschreibung: 4
Grammatik: 5
Inhalt und Ausdruck des Problems: 6
!!! Nichtbenutzung von CodeTags !!!Ich habe alles doppelt deklariert und es scheint zu funktionieren
Niemand weiss damit was anzufangen!
-
Nun ich würd dir wirklich gerne helfen doch leider versteh ich dein Problem leider überhaupt nicht..... !!!!
Wenn du alles doppelt daklarierst und Sachen "inizializie" ich meine schreib doch einfach nochmal genau was das hier werden soll, dann helf ich dir gerne.
Gruß
-
@ RenéG-> mag sein, wehere aber nicht höflich einfach schreiben
Nun ich würd dir wirklich gerne helfen doch leider versteh ich dein Problem leider überhaupt nicht..... !!!!, aber egal das leben ist einfach hart
und es nur eine Art von View gibt
Also ich bin schon so weit das ich weis das dass Problem mit GetRecSet() wahr dass ich die zwei mal in CTAKDoc deklariert habe.
Es sollte ein Programm werden der auf DB mit A D O zugreifen kann.
Ich greife auf DB in der Doc Klasse und da schreibe ich auch meine SQL Abfragen die ich später in der View – Klasse auslesen soll.
Problem aber ist wenn ich mehre SQL-Abfragen schreiben soll muss ich alles also Command Recordset und die Klasse wo ich die Werte (BEGIN_ADO_BINDING und END_ADO_BINDING ) bekomme Mehrermahls erzeugen was meine Meinung nach sehr umständlich ist.
Ich hoffe das ich jetzt richtig eklert habe um was mir geht