Variabel in SELECT Anweisung funktioniert nicht



  • Hallo zusammen
    Noch ne Anfängerfrage (jeder hat mal angefangen):
    Ich will in der SELECT Anweisung (SQL) Variablen verwenden, was aber nicht funktionieren will. Es geht nur, wenn die Spaltennamen in der Access Tabelle da stehen. Kann man das nicht? Was für ein Datentyp müsste so eine Variable sein? Sind bei mir AnsiString (Borland C++Builder), die werden aber nicht gefressen!
    Kann ich die mit einer Funktion umwandeln?

    Danke Euch für eine baldige Antwort!

    Schönen Abend noch 😃

    Hesiod



  • Hallo

    zeig doch mal den relevanten Codeausschnitt mitsamt Fehlermeldung. Ich kann mir jetzt nicht vorstellen was du meinst.

    bis bald
    akari



  • Hallo akari

    Also es geht noch immer um denselben Code:

    AnsiString Rubrik, RubCom;
    switch (IdRubrik) {
      case 0: {
      Rubrik = "Spalte1"; RubCom = "Spalte2";
      }; break; 
    
    //...
    
    Query1->SQL->Add("SELECT Datum, Rubrik, RubCom FROM BHSchoch05 WHERE Datum ="+QuotedStr(DateTimePicker1->Date.DateString()));
    

    Datum ist dabei der Titel einer Spalte, die beiden andern aber sind AnsiString Variabeln. Mit dem switch möchte ich die jeweils anders wählen können.

    Hast du da ne Lösung?

    Besten Dank! Gruss Hesiod



  • Hallo

    Du kannst auch die Spaltennamen wie Werte eintragen, wenn das das ist was du wissen willst

    AnsiString Rubrik, RubCom;
    switch (IdRubrik) {
      case 0: {
      Rubrik = "Spalte1"; RubCom = "Spalte2";
      }; break; 
    
    //...
    
    Query1->SQL->Add("SELECT Datum, "+ Rubrik +", " + RubCom + " FROM BHSchoch05 WHERE  Datum ="+QuotedStr(DateTimePicker1->Date.DateString()));
    


  • Hallo

    Geht leider nur zum Teil. Sobald ich im switch auf case 1: wechsel, kommt die Fehlermeldung: "Das Feld 'Spalte3' wurde nicht gefunden!.

    Query1->Close();
    DataSource1->DataSet = Query1;
    Query1->SQL->Clear();
    
    switch (IdRubrik) {
      case 0: {
        Rubrik = "Spalte1"; RubCom = "Spalte2";
        }
      break;
      case 1: {Rubrik = "Spalte3"; RubCom = "Spalte4";
        }
      break;
    
    //...
    
    Query1->SQL->Add("SELECT Datum, "+ Rubrik +", " + RubCom + " FROM BHSchoch05 WHERE  Datum ="+QuotedStr(DateTimePicker1->Date.DateString()));
    Query1->Open();
    

    Beim ersten Aufruf gehts, danach aber nicht mehr. Liegt es beim Aufruf von Query, mit Close(), Open() und so?
    Hab' ich da was vergessen?

    Besten Dank nochmals! 🙂



  • Hallo

    naja, alle Spalten von 1-4 müßen natürlich in der Datenbank vorhanden sein.

    Und ich würde auch aussagekräftigere Spaltennahmen dafür wählen.

    bis bald
    akari



  • Hallo

    Ja die sind natürlich schon in der Datenbank. Die Namen sind auch aussagekräftiger, ich wollte hier einfach neutrale Beispielnamen in den Code schreiben.

    Warum geht das nicht? 😡



  • Hesiod schrieb:

    Ja die sind natürlich schon in der Datenbank. Die Namen sind auch aussagekräftiger, ich wollte hier einfach neutrale Beispielnamen in den Code schreiben.

    Schön. Wie heißt denn Spalte3 wirklich?


Anmelden zum Antworten