Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi TSQLQuery mit verschiedenen Tabellen benutzen (https://www.delphipraxis.net/1276-tsqlquery-mit-verschiedenen-tabellen-benutzen.html)

MadMason 9. Nov 2002 12:23


TSQLQuery mit verschiedenen Tabellen benutzen
 
Ich hab eine TSQLQuery mit der ich zuerst eine SELECT Abfrage an eine Tabelle table1 und lese ein paar Werte per FieldValue aus.
Dann mach ich eine SELECT Abfrage an eine andere Tabelle table2 und immer wenn ich FieldValue ausführe kommt die Fehlermeldung:
Feld nicht gefunden.

Wenn ich aber eine 2. TSQLQuery nehme funktioniert es einwandfrei.
Gibt es eine Möglichkeit mit einer TSQLQeury auszukommen??

MrSpock 10. Nov 2002 11:51

Hallo MadMason,

hast du die Felder der ersten SQL Query über den Feldeditor als persistente Felder der Anwendung hinzugefügt? Dann gibt es nämlich Probleme. Ansonsten versuch doch einmal FieldByName, das funktioniert bei mir imer recht gut.

MadMason 11. Nov 2002 18:40

Nein hab ich nicht

DKamps 12. Nov 2002 17:45

TSQLQuery
 
Sei versichert, dass das funktioniert, wenn Du keine persistenten Felder erzeugst. Vielleicht kennt die Tabelle das Feld nicht, oder Du überschreibst an irgendeiner Stelle das SQL.

Gast 13. Nov 2002 11:44

Hallo MadMason! 8)

Die Ursache für Dein Fehle kann verschieden Grunde haben... aber... falls Du vielleicht gar keine Komponente TQuery auf Dein Formular „ziehen“ möchtest kannst Du dein Query dynamisch erzeugen...so...das habe ich auf die „Schnelle“ für Dich gebastelt:

Gruß

Paul Jr.

Code:
// Erzeugt dynamisch eine Query-Componente
FUNCTION CreateQuery(VAR Query: TQuery; Frm: TForm; sDatabaseName : STRING): Boolean;
BEGIN
   Result := True;
   TRY
      Query := NIL;
      Query := TQuery.Create(Frm);
      Query.DatabaseName := sDatabaseName;
      Query.SQL.Clear; // muß nicht sein...
   EXCEPT
      ON E:Exception DO
      BEGIN
         Result := FALSE;
         IF Query <> NIL THEN
            BEGIN
               Query.Free;
               Query := NIL;
            END;
         ShowMessage( E.Message + #10 + 'Dynamisches Query konnte nicht erzeugt werden!');
         Sysutils.Abort;
      END;
   END;
END;

PROCEDURE TfrmMain.Button1Click(Sender: TObject);
VAR
   Query : TQuery;
BEGIN
   IF CreateQuery(Query, Self, 'MeinDataBase') THEN
      BEGIN
         // hier bestücke die SQL-Anweisung usw... mach was Du willst :-)
         // also z.B.:
         Query.SQL.Add('SELECT * FROM KUNDE');
         TRY
            Query.Open;
            (... weitere Anweisungen...)
         EXCEPT
            (* dummy *)
         END;
         Query.Close;
      END;

   // Und nicht vergessen:
   IF Query <> NIL THEN
      Query.Free;
END;

DKamps 13. Nov 2002 12:08

TSQLQuery
 
Ist das Problem vielleicht, dass Du SQL.Clear vergessen hast.
Dann srteht nämlich das alte Select-Statement noch in der Query und Du erlebst Böses, wenn Du einfach mit SQL.ADD(MySelectString) Deine neue Abfrage hinzufügst.
Ich schreibe gerne SQL.Text := MySelectString
In Delphi 7 gibt es ein TSimpleDataSet mit CommandText vom Typ String statt SQL.
Der Vorschlag von MadMason ist natürlich auch nicht zu verachten, nur ist die Nachprogrammierung der visuellen Komponenten nicht so ganz einfach, insbesondere bei persistenten Feldern. Meine Erfahrung eines Wochenendes vor meinem Notebook stelle ich aber gerne zur Verfügung.

Gast 13. Nov 2002 12:31

Hallo DKamps, 8)

... nun sollte er SQL.Clear vergessen haben...und eine neue SQL-Anweisung dazu addieren dann, wie ich meine, würde sich schon ganz stark die Datenbank selbst mit einem SQL-Fehler melden...oder...?... aber alles ist Möglich... :lol: ... vielleicht fügt er gar keine neue SQL-Anweisung hinzu... nun dann wäre deine Vermutung richtig...


Gruß

Paul Jr.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz