Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Aus TTable etwas löschen Fehlermeldung für Query (https://www.delphipraxis.net/64078-aus-ttable-etwas-loeschen-fehlermeldung-fuer-query.html)

GoTo0815 27. Feb 2006 07:12

Datenbank: Paradox • Version: 7 • Zugriff über: TTable und Query

Aus TTable etwas löschen Fehlermeldung für Query
 
Hallo,

folgendes Problem:

Delphi-Quellcode:
 if MessageDlg('Wirklich löschen?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
  begin
    Query_Suchen.active := false; // meine such Query deaktivieren
    Table_Retouren.First;
    For i:= 1 to Table_Retouren.RecordCount -1 do
    begin
     flusher := 0; // flusher ist eine Zahl die im Timer hochgezählt wird um die Datenbank alle zwei
                      minuten mit fluchbuffers zu schreiben. durch das Setzten auf 0 verhindere ich das
                      während dieser for Schleife

     if Table_RetourenKunde.Value = Edit7.Text then Table_Retouren.Delete
     else
     begin
      if not Table_Retouren.Eof then Table_Retouren.Next;
     end;

    end;
    if Table_RetourenKunde.Value = Edit7.Text then Table_Retouren.Delete //eventuell letzten Datensatz
                                                                            löschen
  end;
  Edit7.Text := '';
  with Query_Suchen do // Such Query wieder aktivieren
     begin
      sql.clear;
      sql.add('SELECT * FROM retouren');
      ParamCheck := true;
      active := true;
      open;
     end;
  Label43.Caption := IntToStr(Query_Suchen.RecordCount);
Mein Problem ist, dass ich nach Durchlauf immer ein EDBEngine Error bekomme Meldung: 'ungültiger Parameter'.

Leider bin ich mit meinem Latein am Ende und hoffe auf Eure Hilfe.

Danke im Voraus

Hendrik

GoTo0815 27. Feb 2006 07:16

Re: Aus TTable etwas löschen Fehlermeldung für Query
 
Sorry hatte noch etwas wichtiges vergessen.

Die Table und die Query benutzen die gleiche Datenbank

Gruß

Hendrik

mkinzler 27. Feb 2006 07:19

Re: Aus TTable etwas löschen Fehlermeldung für Query
 
Warum löscht du nicht über eine Query? So kannst du durch einen Aufruf alle zu löschenden Datensätze löschen.

Du mußt den (Such-)Query nicht immer neu setzen. Close/Open reicht aus (wenn überhapt nötig)

GoTo0815 27. Feb 2006 07:22

Re: Aus TTable etwas löschen Fehlermeldung für Query
 
Hallo,

dachte eine Query wäre nur zum betrachten.

Wie kann ich denn aus der Query mit einem Befehl alle löschen?

Die SQL setze ich neu, weil ich vorher ja nach dem Text gesucht habe der im Editfeld7 steht und ich nun wieder alle Datensätze anzeigen möchte.

Gruß

Hendrik

mkinzler 27. Feb 2006 07:34

Re: Aus TTable etwas löschen Fehlermeldung für Query
 
Query vorbereiten:
Delphi-Quellcode:
loeschQuery.SQL.Text := 'delete from retouren where Kunde = :Kunde';
In der Löschschleife dann
Delphi-Quellcode:
loeschQuery.paramByName('Kunde').asString := Edit7.Text;
loeschQuery.Execute;
Nun löscht er alle Datensätze auf die das Kriteriium zutrifft

GoTo0815 27. Feb 2006 07:39

Re: Aus TTable etwas löschen Fehlermeldung für Query
 
Danke, dass probiere ich gleich aus. Nur eine Frage noch:

Wird das dann auch in die Datenbank geschrieben, oder verschwindet das nur aus der Ansicht der Query.

Muss ich die Table dann Refreschen nach den Löschvorgang?

mkinzler 27. Feb 2006 07:42

Re: Aus TTable etwas löschen Fehlermeldung für Query
 
Zitat:

Zitat von HendrikSturm
Danke, dass probiere ich gleich aus. Nur eine Frage noch:

Wird das dann auch in die Datenbank geschrieben, oder verschwindet das nur aus der Ansicht der Query.

Es wirkt sich auf die Datenbanktabelle aus.
Zitat:

Muss ich die Table dann Refreschen nach den Löschvorgang?
Falls du die Tbale noch für etwas anderes brauchst (Du suche läuft ja über eine Query ab, welche ja hier wieder alle Datensätze anzeigt), Ja.

GoTo0815 27. Feb 2006 07:56

Re: Aus TTable etwas löschen Fehlermeldung für Query
 
auch auf die Gefahr hin, dass ich mich ein wenig blöd anstelle:

Delphi-Quellcode:
if MessageDlg('Wirklich löschen?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
  begin
    with Query_Suchen do
     begin
      active := false;
      sql.clear;
      sql.add('delete from retouren where Kunde = :Kunde');
      ParamCheck := true;
      ParamByName ('Kunde').AsString := Edit7.Text;
      active := true;
      ExecSQL; // Execute kennt er bei mir nicht. Ich glaube das ist aber das gleiche, oder?
     end;
  end;
  Label43.Caption := IntToStr(Query_Suchen.RecordCount);
habe das so versucht, bekomme aber ein Fehler bei EXECSQL der lautet ENoResultSet Fehler beim erstellen des CursorHandles. Die Daten scheinen aber gelöscht zu sein.

mkinzler 27. Feb 2006 08:02

Re: Aus TTable etwas löschen Fehlermeldung für Query
 
Der Fehler kommt nicht beim execSql sondern beim Active
Delphi-Quellcode:
if MessageDlg('Wirklich löschen?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
  begin
    with Query_Suchen do
     begin
      sql.Text := 'delete from retouren where Kunde = :Kunde';
      ParamCheck := true;
      ParamByName ('Kunde').AsString := Edit7.Text;
      ExecSQL; // Execute kennt er bei mir nicht. Ich glaube das ist aber das gleiche, oder? Ja!
     end;
  end;
  Label43.Caption := IntToStr(Query_Suchen.RecordCount);

GoTo0815 27. Feb 2006 09:02

Re: Aus TTable etwas löschen Fehlermeldung für Query
 
Delphi-Quellcode:
 if MessageDlg('Wirklich löschen?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
  begin
    flusher := 0; // verhindern dass durch den Timer die Datenbank geschrieben wird
    BitBtn6.SetFocus;
    with Query_Suchen do
     begin
      sql.clear;
      sql.add('delete from retouren where Kunde = :Kunde');
      ParamCheck := true;
      ParamByName ('Kunde').AsString := Edit7.Text;
      ExecSQL;
     end;
  end;
  Table_Retouren.Refresh;
  Label43.Caption := IntToStr(Query_Suchen.RecordCount);
Jetz bekomme ich die Meldung: Operation bei geschlossener Datenbank nicht möglich.

GoTo0815 27. Feb 2006 09:13

Re: Aus TTable etwas löschen Fehlermeldung für Query
 
Ok jetzt läuft es!

Ich habe nach ExecSQL einfach die SQL.Text: wieder auf :

Delphi-Quellcode:
with Query_Suchen do
     begin
      active := false;
      sql.clear;
      sql.add('SELECT * FROM retouren');
      ParamCheck := true;
      active := true;
      open;
     end;
gesetzt und jetzt läuft es.

Vielen Dank für die Hilfe

Gruß

Hendrik

marabu 27. Feb 2006 09:18

Re: Aus TTable etwas löschen Fehlermeldung für Query
 
Hallo Hendrik,

du kannst nicht auf RecordsCount zugreifen, da es keinen geöffneten result set gibt. Außerdem würde ich keinen Timer für das Flushen der Daten verwenden. Schreibe den Code dafür doch einfach in die Behandlungsroutine für das Ereignis Application.OnIdle(). In einer Variable Flushed: Cardinal im private Abschnitt deiner Form merkst du dir den Zeitpunkt (GetTickCount) an dem du das letzte Mal die Daten weg geschrieben hast und in einer Variable Modified: Boolean merkst du dir nach jedem Insert, Update, Delete, dass ein neuerliches Flush nötig ist.

Delphi-Quellcode:
begin
  // ...
  if MessageDlg('Wirklich löschen?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
  begin
    BitBtn6.SetFocus;
    with Query_Suchen do
    begin
      SQL.Text := 'delete from retouren where Kunde = :Kunde';
      ParamByName ('Kunde').AsString := Edit7.Text;
      ExecSQL;
     end;
  end;
  Table_Retouren.Refresh;
  Label43.Caption := IntToStr(Query_Suchen.RowsAffected);
  // ...
end;
Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:37 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-2025 by Thomas Breitkreuz