SQL Afrage in Borland



  • hy
    kennt sich jemand aus, wie man eine SQL abfrage erstellt in Borland.
    Habe mit ADO eine Connection (ADOConnection1) auf eine MS SQL Datenbank erstellt.
    Nun habe ich mir ein bisschen Code zusammen gesucht und bin auf folgendes gekommen:

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
            AnsiString dbtabelle;
            AnsiString sqlerg;
    
            dbtabelle = Form1->ADOTable1->TableName;
            Form1->Edit1->Text = dbtabelle;
    
            sqlerg = sql2db(dbtabelle,"SELECT * FROM "+dbtabelle+"");
            Form1->Edit2->Text = sqlerg;
    }
    //---------------------------------------------------------------------------
    AnsiString sql2db(AnsiString tabelle,AnsiString sqlcommand)
    {
            AnsiString tmptable = "";
            AnsiString tmpsrc = "";
            AnsiString sqlzellen;
            AnsiString connect_string;
            AnsiString resultat;
    
            Form1->Edit4->Text = tabelle;
            Form1->Edit5->Text = sqlcommand;
    
            tmptable =  Form1->ADOTable1->TableName;
            Form1->ADOTable1->TableName = tabelle; 
            Form1->ADOTable1->Active = false;
            Form1->ADOTable1->Active = true;
    
            connect_string = Form1->ADOConnection1->ConnectionString;
            Form1->ADOQuery1->ConnectionString = connect_string;
            Form1->ADOQuery1->SQL->Clear();
            Form1->ADOQuery1->SQL->Add(sqlcommand);
            Form1->ADOQuery1->Active = true;
    
            Form1->ADOQuery1->Open();
            Form1->ADOQuery1->Active = false;
            Form1->ADOTable1->TableName = tabelle;
            Form1->ADOTable1->Active = false;
            Form1->ADOTable1->Active = true;
    
            return resultat;
    }
    

    Weiss jemand wie ich die SQL Abfrage genau ausführe?wird die abfrage mit Form1->ADOQuery1->Open(); ausgeführt??
    und, was für einen datentyp muss die variable resultat haben?schlussendlich sollte das resultat in der variable resultat stehen, welches ich "returne"!

    Und weiss jemand, wesshalb ich die ADOTable und ADOQuery Active immer wieder von true auf false und umgekehrt wechseln muss?

    wer kann mir helfen? 😕

    vielen dank!



  • erstmal: Active = true ist das gleiche wie Open()

    zum anderen:

    das Query liefert dir eine DatenMENGE und nicht einen DatenWERT, d.h. mit return resultat kommst du nicht weit

    auf die einzelnen Werte der Datenmenge des Query kannst du über FieldByName (sofern die Spaltennamen bekannt sind) oder Fields->Fields[Index] zugreifen, und das über alle gelieferten Datensätze

    Grüße
    Linnea



  • wo muss ich dann das mite dem Fields->Fields[index] schreiben?
    bei Form1->ADOQuery1->Open(); ??

    vielen dank

    trade



  • danach, d.h. das Query muss aktiv sein

    z.B. kann man damit alle Werte in ein StringGrid schreiben

    Query->Open();
    int j=0;
    for (Query->First(); !Query->Eof; Query->Next())
      {
      for (int i=0; i<Query->Fields->Count; i++)
        {
        StringGrid->Cells[i][j] = Query->Fields->Fields[i]->AsString;
        }
      j++;
      }
    


  • ok!stringgrid, habe ich noch nie gehört 😋 ¨
    kannst du mir noch sagen, ob ich diesen stringgrid noch deklarieren muss?
    die daten sollten nun ja in diesem stringgrid sein?wie kann ich den returnen?



  • zu StringGrid steht recht viel in der BCB-Hilfe und den FAQ


Log in to reply