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


Anmelden zum Antworten