Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Probleme mit INSERT INTO (https://www.delphipraxis.net/8735-probleme-mit-insert-into.html)

Chris1986 11. Sep 2003 02:15


Probleme mit INSERT INTO
 
Hi.
Ich benutze eine Paradox7 Datenbank und möchte auf sie mit der Query-Komponente per SQL zugreifen.
Die Datenbank wird in der DBGrid-Komponente angezeigt und sie lässt sich auch mit Befehlen wie "SELECT * FROM datenbank.db" steuern. Ich schaffe es aber einfach nicht einen neuen Datensatz zu erstellen. Die Befehle übermittel ich so an die Query-Komponente:

Delphi-Quellcode:
procedure TServer.btSQLAbfrageClick(Sender: TObject);
begin
  Query1.Active:=false;
  Query1.Sql.Clear;
  Query1.Sql.Add(edSQLAbfrage.text);
  Query1.Active:=true;
end;
Weiß jemand wie's geht? :lol:

Gruß
Christian

Berserker 11. Sep 2003 05:50

Re: Probleme mit INSERT INTO
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Christian.

Ich habe gerade mal eine kleine Anwendung mit Delphi 6 gebaut.


Versuche doch mal folgendes;

Code:
  Query1.Sql.Text := edSQLAbfrage.text;
  Query1.ExecSQL;
Damit kannst du Befehle an die Query-Komponente senden ohne vorher die SQL-Befehle zu leeren und dann mit ExecSQL ausführen. Da der INSERT Befehl ja keine Daten zurückgibt.

Ich hänge dir das Testprogramm mal mit an diesen Beitrag an.

Chris1986 11. Sep 2003 11:06

Re: Probleme mit INSERT INTO
 
Hallo Berserker.
Erstmal Danke für das Programm. Ich habe aber jetzt ein neues Problem :lol: .
Die SELECT Befehle werden in der DBGrid nicht mehr angezeigt. Was muss ich denn machen um die Database vollständig ohne tTable über tQuery zu steuern?

Gruß
Christian

r_kerber 11. Sep 2003 12:11

Re: Probleme mit INSERT INTO
 
Hallo Christian,

wenn ich es richtig verstehe, dann möchtest Du in einem DBGrid neue Datensätze anfügen. Es gibt dafür folgende Möglichkeit (allerdings sollte diese nicht verwendet werden, da sie dem SQL-Konzepten eigentlich widerspricht):
Eine Query mit einem SELECT-Statement versehen und diese dann als lebende Datenmenge kennzeichnen (RequestedLive). Delphi und die BDE sorgen dann dafür, dass die neuen Datensätze in die Tabelle eingetragen werden.
Besser wäre es jedoch, Du stellst eine Eingabemaske zur Verfügung (keine datensensitiven Controls) und baust dann ein INSERT-Statement zusammen, das Du dann mit ExecSQL ausführen läßt.

Memo 11. Sep 2003 14:35

Re: Probleme mit INSERT INTO
 
Zitat:

Zitat von r_kerber
Eine Query mit einem SELECT-Statement versehen und diese dann als lebende Datenmenge kennzeichnen (RequestedLive). Delphi und die BDE sorgen dann dafür, dass die neuen Datensätze in die Tabelle eingetragen werden.

Wie jetzt. Select trägt was in die Table ein?
einwenigverwirrtseintun

mojo777 11. Sep 2003 14:36

Re: Probleme mit INSERT INTO
 
hallo. Also ich bin momentan am ähnlichen dran. Ist es möglich eine SQLAbfrage wie DataSource zu behandeln? also dass ich danne eine DBTable erstelle und diese dann die SELECT * FROM TABLE WHERE STATUS != (oder <>?)OFFEN ausleist und in einer tabelle abbildet?

aber ich schaue mir mal erstmal das hier begefügte programm an. vielleicht sehe ich da was interessantes :-)

Chris1986 11. Sep 2003 16:06

Re: Probleme mit INSERT INTO
 
Hallo
Ich habe das Problem mitlerweile gelöst. Bevor die SQL-Anfrage ausgefürht wird, wird geprüft, ob Daten editiert werden, oder ob Daten per Select gesucht werden.
Anschließend benutze ich entweder ExecSQL oder Query1.Sql.Add(edSQLAbfrage.text)

das sieht dann so aus:
Delphi-Quellcode:
procedure TServer.btSQLAbfrageClick(Sender: TObject);
begin
if copy (edSQLAbfrage.text, 1, 6) = 'SELECT'
then
  begin
  Query1.Active:=false;
  Query1.Sql.Clear;
  try
  Query1.Sql.Add(edSQLAbfrage.text);
  except
   ShowMessage('SQL Fehler! Bitte SQL-Syntax prüfen')
  end;
  Query1.Active:=true;
  end
else
  begin
    Query1.SQL.Text := edSQLAbfrage.Text;
  try
   Query1.ExecSQL;
  except
   ShowMessage('SQL Fehler! Bitte SQL-Syntax prüfen')
  end;
    Query1.Active:=false;
    Query1.Sql.Clear;
    Query1.Sql.Add('SELECT * FROM datenbank.db');
    Query1.Active:=true;
  end
end;
Gruß
Christian

Memo 11. Sep 2003 16:42

Re: Probleme mit INSERT INTO
 
Delphi-Quellcode:
  try
  Query1.Sql.Add(edSQLAbfrage.text);
  except
   ShowMessage('SQL Fehler! Bitte SQL-Syntax prüfen')
  end;
  Query1.Active:=true;
  end
Warum sollte es beim add eine Exception geben?

r_kerber 11. Sep 2003 18:17

Re: Probleme mit INSERT INTO
 
Zitat:

Zitat von Memo
Select trägt was in die Table ein?

Jo. Wenn Du die TQuery als "lebende Datenmenge" einstellst, dann arbeitet diese so wie eine TTable. Es gibt dann z.B. die Methoden Add oder auch Edit. Auch Änderungen im Tabellengitter werden dann zurückgeschrieben. Ist aber eben nicht die feine englische Art.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:03 Uhr.

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