Newbie braucht Hilfe -> CDBVariant in CString umwandeln?



  • Hallo zusammen

    Leider habe ich noch keine Erfahrung mit C/C++/VC++ weshalb ich einen guten Rat gut gebrauchen könnte.

    Ich habe folgendes Problem:

    Ich möchte einem CStringArray einen Wert vom Typ CDBVariant anhängen. Leider bekomme ich eine Fehlermeldung : -> cannot convert CDBVariant to CString.
    Mit dem Casting funzt es leider auch nicht(etwa die gleiche Fehlermeldung).
    In MSDN bin ich leider auch nicht fündig geworden.
    Kennt jemand eine Möglichkeit den CDBVariant auf CString zu konvertieren?
    Ich würde mich sehr auf eure Hilfe freuen.

    MFG el-loco



  • deineCDBVariable.m_sirgendwas

    mach einfach mal deineVar und dann einen Punkt und dann such dir die m_s... raus da steht wenn es denn wirklich ein String war dein String drin und schau mal in de MSDN nach CDBVARIANT



  • Hi

    Danke für die rasche Antwort. m_s... gibt es nicht. Ich denke du meintest m_pstring. Also habe ich folgendes versucht:

    CDBVariant Value;
    CString value = Value.m_pstring;
    

    Funzt leider nicht.
    Sorry für die Noob-Frage aber wie komme ich an den Wert von m_pstring?
    Ist die vorgehensweise überhaupt richtig 😕 ?

    MFG el-loco



  • 1. würde ich nicht beide values value nennen nenn sie doch zumindest cdbValue und sValue, tust dir selbst wesentlich leichter.
    2. wenn es so nicht funzt, dann steht vermutlich ncihts vernünftiges drin, schau mal was in dieser CDB drin steht (während Debug) wenn da was drin steht sollte auch nacher was in deinem String stehen



  • Ich habe die Variablen nur zur Demo so benannt. Im Programm sind sie gut voneinander zu unterscheiden aber danke für den Tipp.

    Die Datenbankeinträge werden korrekt ausgelesen. Leider komme ich nicht an die Werte ran. Im Debug Mode sieht es so aus, dass unter m_pstring noch weitere Klassen und Variablen stehen.

    Nun ich habe die ganze Sache ein wenig vereinfacht. Ich habe ein Array vom Typ CDB Variant erstellt und so funzt es. Auch das Anzeigen der Daten in der Listbox ist auch Ok.

    Trotzdem würde mich interessieren ob es noch weitere Möglichkeiten gäbe einem CStringArray einen CDBVariant anzuhängen 😕

    und es geht weiter...

    mfg el-loco



  • das CDB kannst du auf jeden Fall nicht in ein Stringarray machen, drum heißt es ja String array und nicht CDB-StringArray aner den String anteil der CDB Variablen kannst du rein schreiben. Zeig doch bitte mal deine ganze Funktion.



  • Hi

    Hier wie gewünscht meine Funktion:

    void Fv_GetProjects()
    {
    CDBVariant Ls_Value;
    CStringArray As_Projects;
    CRecordset Lo_Projects(po_DBConnect);
    Lo_Projects.Open(CRecordset::dynaset,_T("Select * from Projekt"),CRecordset::none);
    while(!Lo_Projects.IsEOF())
    {
    Lo_Projects.GetFieldValue("s_ProjektName",Ls_Value);
    As_Projects.Add(Ls_Value.m_pstring);
    Lo_Projects.MoveNext();
    }
    
    //....
    }
    

    mfg el-loco



  • void Fv_GetProjects()
    {
    CDBVariant Ls_Value;
    CStringArray As_Projects;
    CRecordset Lo_Projects(po_DBConnect);
    Lo_Projects.Open(CRecordset::dynaset,_T("Select * from Projekt"),CRecordset::none);
    while(!Lo_Projects.IsEOF())
    {
    Lo_Projects.GetFieldValue("s_ProjektName",Ls_Value,SQL_C_SLONG);
    //oder Lo_Projects.GetFieldValue("s_ProjektName",Ls_Value,DEFAULT_FIELD_TYPE);
    As_Projects.Add(Ls_Value.m_pstring);
    Lo_Projects.MoveNext();
    }
    
    //....
    }
    

    Jetzt sollte es gehen!
    Was ich gemacht hab, ich hab beim getFieldvalue mitgegeben dass es sich um characters handelt. bzw bei der //oder Variante holt er sich den Datentyp der DB und passt ihn dementsprechend an. Wenn du jetzt debugst solltest du auch im m_pString deinen Wert sehen!

    mfg Polo



  • Hi

    Habs mit beiden Varianten versucht...leider kein Erfolg.
    Zuerst dachte ich, dass ich beim Adden im CStringArray einen Fehler gemacht hätte doch auch die Übergabe an ein CString wurde mit einem Fehler ( ATL::< irgendwas ) quittiert. Es funzt aber auch ohne das CDBVariant. Anstelle einfach ein CString nehmen (?).

    so habe ich es versucht und hat geklappt:

    CString Ls_Value;
    CStringArray La_Projects;
    
    //....
    
    La_Projects.Add(Ls_Value);
    

    was meinst du zu dieser Lösung?
    mfg el-loco



  • die Lösung ist so lange gut wie du dir 1000%ig sicher bist, dass das was du einliest sicher chars bzw Strings sind. Denn Zahlen o.ä. werden natürlich nicht richtig dar gestellt. mit einem CDB-Variant kannste halt alles aus der DB holen und wenn du dann noch die DB fragst was sie dir denn gegeben hat (weiß grad Befehl nicht auswendig würd ich aber eh machen), dann kannste entsprechend itoa oder so noch machen um es dar zu stellen.

    Mit was für einer DB arbeitest du? Und wie sprichst du sie an? (ODBC?)



  • Hallo

    Ja, was für Daten aus der DB kommen weis ich.
    Ich verwende MS Access 2003 in Verbindung mit einer ODBC-Datenquelle.

    mfg el-loco


Anmelden zum Antworten