datenbank anzapfen mit c++ und auslesen der daten!



  • sinn und zweck ist es, dass ich die daten, die ich bekomme zu bearbeiten, zu sortieren, zu verbinden und das möglichst variabel.

    ich hab das soweit, dass ich den rquest aus dem sql statement in ein dbgrid einfügen kann.

    mir ist der weg ich nicht so ganz klar zu einem variablen ergebnis...
    wenn du mir näheres zu der möglichkeit mit komponenten sagen kannst mach ich das halt auch gern so.

    wichtig ist nur variabel!!!



  • Ich hab jetzt nochmal genauer nachgeschaut.
    SOCI - wurde bisher nur unter LINUX getestet
    libpqxx - gibts auch für Windows aber noch keinen Test für einen Borland-Compiler
    DTL - hier gehts anscheinend auch mit dem BCB

    Zeig doch mal was du mit den Komponenten vom BCB gemacht hast bzw. was du willst und warum das bei dir nicht geht.



  • ok!
    @braunstein & all:
    Ich bin Dir sehr dankbar dass du helfen willst.
    Werde das noch mal prüfen, morgen im büro, es nochmal selber probieren und dann noch mal posten.



  • Die Frage ist jetzt, wie ich die zurückgegebenen Werte zb summieren kann???
    Und wie ich diese Daten in einen Container packe zb einen Vektor???

    OK...So sieht das im Moment mit Komponenten aus:

    using namespace std;
     AnsiString textFeld;
     vector<int>vec(1000);
    
            try
            {
                    if(Query1->Active == true)
                    {
                            Query1->Close();
                            Query1->SQL->Clear();
                    }
                    textFeld = Edit2->Text;
                    DataSource1->DataSet = Query1;
                    Query1->SQL->Add("Select su0005 from fibu.kontensummen where ma0001 =:textFeld");
                   //select su0005 from fibu.kontensummen where ma0001 ='0010010000';
                    Query1->ParamByName("textFeld")->AsString = textFeld;
                    Query1->Open();
    
                    //vec = static_cast<float>
    
            }
            catch(EConvertError&)
            {
                    Edit2->Text = "Wert eingeben!";
            }
    


  • siehe FAQ



  • Die TQuery-Klasse hat diverse Methoden dafür (schau am besten in der Hilfe nach).
    Hier ein möglicher Ansatz:

    Query1->First();
    while (!Query1->Eof)
    {
     // Hier werden alle Datensätze verarbeitet (z.B)
     string sName = Query1->FieldByName("Name")->AsString;
     int nAnzahl = Query1->FieldByName("Count")->AsInteger;
     ...
     // hier dann einfach die Daten in den vector pushen
    
     Query1->Next();
    }
    


  • ok...das passt und hilft mir.
    habe jetzt eine anweisung, deren daten ich an ein dbgrid übergebe.

    allerdings fehlen da im dbgrid mehrere tabellen, die varchar sind...in pgadmin funzt der befehl.

    s = Edit1->Text;
                    DataSource1->DataSet = Query2;
                    Query2->SQL->Add("select * from zmis.mandant where ma0001 =:s");
                    Query2->ParamByName("s")->AsString = s;
                    Query2->Open();
    


  • Hallo

    fehlen da im dbgrid mehrere tabellen, die varchar sind

    😕
    - Ein DBGrid stellt genau eine Ergebnistabelle dar
    - Wie kann eine Tabelle varchar sein?

    bis bald
    akari



  • ...akari:
    das verstehe ich nicht so ganz.
    der datentyp der spalte ist in postgres datenbank ein varchar.
    war meine vermutung, dass es daran liegt...stimmt aber nicht.

    bekomme sehr viele ca. spalten in das dbgrid geliefert allerdings nicht die ersten 6 spalten.

    woran kann das liegen dass ich nicht alle spalten zurück bekomme????



  • Hallo

    mir ging es erstmal um den Bezeichnungsfehler. Du hast fälschlicherweise Tabelle geschrieben, richtig wäre Feld bzw. Spalte.

    Das DBGrid stellt grundsätzlich alle vorhandenen Spalten dar. Da du *select ** machst gibt es für uns natürlich keine Möglichkeiten die Feldmenge einzuschätzen.
    Gib doch statt dem * mal die genauen Feldnamen in der ABfrage an, die du sehen willst, und für dann diese im Programm aus.

    bis bald
    akari



  • select ma0001,ma0002,ma0003 from zmis.mandant limit 100;
    gibt ein ganz und gar leeres dbgrid!
    edit:
    ich versuche jetzt, das query mal direkt auszulesen...
    überschreitet listindex ist die fehlermeldung:

    s = Edit1->Text;
                    DataSource1->DataSet = Query2;
                    Query2->Close();
                    Query2->SQL->Clear();
                    Query2->SQL->Add("select ma0000,ma0001,ma0002 from zmis.mandant where ma0001 =:s");
                    Query2->ParamByName("s")->AsString = s;
                    Query2->Open();
                    Query2->First();
    
                    while (!Query2->Eof)
                    {
                    for (int i=0;i<=AnzSpalten;i++)
                    {
                            Memo1->Lines->Add(Query2->Fields->Fields[i]->AsString);
                    }
                            Query2->Next();
                    }
    


  • Hallo

    ist ja schön und gut, aber welchen Wert hat AnzSpalten? Hat der Überhaupz etwas mit der Abfrage,enge zu tun?
    Ich vermute das kein Datensatz der where-Bedingung entspricht und deshalb die Ergbenismenge einfach leer ist.
    Aber selbst dann sollten doch immer noch die Spalten ansich vorhanden sein.

    bis bald
    akari



  • den wert anzahl spalten hole ich mir per

    int AnzSpalten = Query2->FieldCount;
    

    und wie gesagt, mit select * from zmis.mandant where ma0001:=s bekomme ich ja ne menge spalten zurück, nur nicht alle!!!



  • Die Schleife muß so aussehen:

    for(int i=0; i < AnzSpalten; i++)
    

    Bei i = AnzSpalten greifst du dann auf eine nicht existierende Spalte zu, deshalb der Indexfehler.



  • japp hatte ich schon veorher geändert haste recht!
    ich bekomm das alles hin, nur eben bekomme ich genau die spalten nicht von 0-7 vom typ varchar.

    ob das wohl an meinem odbc treiber liegen kann????

    bin ratlos!!! 😞



  • Kann ich mir nicht vorstellen. Ab und zu hatte ich schon mal Probleme, Intervalle zu lesen, aber nicht VARCHARs...

    Mach bitte mal einen Doppelklick auf die Query-Komponente. Stehen in dem sich öffenenden Feldeditor bereits Feldnamen? Kannst Du die Felder hinzufügen (rechte Maustaste) ?

    Grüße

    Joe_M.



  • doch...es lag am ODBC Treiber!
    MAn braucht den PostgreSQL_Ansi C Treiber dann flutscht es!


Anmelden zum Antworten