TSQLQuery Unknown Column



  • Hallo, ich habe folgendes Problem.

    Ich habe in meiner C++ Anwendung (Rad Studio XE3) eine SQLQuery,
    mit der ich Zugriffe auf eine Firebird DB mache.

    Im Zuge einer Auswertung in meinem Programm möchte ich von mehreren Tabellen, die ich über LEFT Join Verknüpfe die Ergebnisse auswerten.
    Jedoch erhalte ich bei meinem SQL

    select * from Rechnung 
    LEFT JOIN RECHNUNGSPOSITION On (Rechnung.ID = Rechnungsposition.RechnungsID)
    LEFT JOIN ARTIKEL On Rechnungsposition.ArtID = Artikel.ID 
    LEFT JOIN ARTIKELART On (Artikel.ArtikelArtID = ArtikelArt.ID) 
    LEFT JOIN KUNDE On Rechnung.KundenID = Kunde.ID  
    where   (Rechnung.Bezahlt = '0' or Rechnung.Bezahlt = '1')  
    and   Rechnung.Erfassungsdatum LIKE '2013-%%-%%'  
    and  (Artikel.ArtikelArtID = '1' or Artikel.ArtikelArtID = '2' or Artikel.ArtikelArtID = '5')
    

    Den Fehler

    Erste Gelegenheit für Exception bei $766DC41F. Exception-Klasse TDBXError mit Meldung
    'Column unknown
    ARTIKEL.ARTIKELARTID
    At line 1, column 157'.
    Prozess xxx.exe (700)
    

    Führe ich den SQL direkt über die Console Firebird ISQL aus, funktioniert der SQL ohne Fehler ???

    Weshalb also kann ich ihn so nicht über meine Anwendung ausführen lassen?

    Danke



  • Klein-/Großschreibung beachtet?



  • Wäre das bei SQL nicht egal? Ausgabe der Feldnamen ist ja immer alles in Großbuchstaben? Das bringt aber auch keinen Erfolg.

    Lediglich wenn ich die letzte Einschränkung

    and  (Artikel.ArtikelArtID = '1' or Artikel.ArtikelArtID = '2' or Artikel.ArtikelArtID = '5')
    

    weg lasse, wird der SQL sauber ausgeführt und ich erhalte ein Ergebnis über mein Programm.



  • Im Sourcecode durchlaufe ich nach dem Open eine For-Schleife.

    SQLQ->Open() ;
      for (int i= 0; i < SQLQ->RecordCount; i++)
    

    Sobald ich auf den RecordCount zugreife, erhalte ich die Fehlermeldung.
    Kommentiere ich die Schleife aus, erhalte ich keine Fehlermeldung!?
    ?



  • Hallo

    Dann ist der Fehler nicht in dem SQL-Statement, sondern in einem Zugriff auf die genannte Spalte innerhalb der Schleife. Alles was wie FieldByName(...) arbeitet.

    bis bald
    akari



  • Ich hab das Problem umgangen, indem ich mein SQL-STatement 2 mal ausführe.
    Einmal mit Select Count(*) um die Anzahl zu bekommen
    und das zweite mal den normalen Select,den ich die Anzahl an Datensätze durchlaufen lasse, wobei ich aber nicht auf RecordCount zugreife, sondern auf die Anzahl dich ich mir vorher gemerkt habe.
    Ich kann hier problemlos auf alle Felder zugreifen kann und mit Next() zum nächsten Datensatz gelangen.
    Das Problem war lediglich der RecordCount?! Die Frage bleibt warum...


Anmelden zum Antworten