Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   ADODataSet Der Vorgang ist in diesen Zusammenhang nicht zugelassen (https://www.delphipraxis.net/176215-adodataset-der-vorgang-ist-diesen-zusammenhang-nicht-zugelassen.html)

blondervolker 20. Aug 2013 08:22

Datenbank: Access • Version: 2007 • Zugriff über: ADODataSet

ADODataSet Der Vorgang ist in diesen Zusammenhang nicht zugelassen
 
Hallo,

habe eine Tabelle in Access ID,Preis,DEU.

Nun wollte ich wenn in DEU kein Eintrag ist den aktuellen Datensatz löschen.
Aber denne kommt nach der Ausführung eine Fehlermeldung:
Der Vorgang ist in diesen Zusammenhang nicht zugelassen.
(ich bin kein Profi):oops:
Was läuft da falsch?

Hier mal der Code:
Delphi-Quellcode:
procedure TForm1.Button6Click(Sender: TObject);
var
i : integer;
begin
while not ADODataSet1. Eof do
begin
ADODataSet1.Edit;
 if ADODataSet1.FieldByName('DEU').AsString = ''
 then
  ADODataSet1.DeleteRecords;
  ADODataSet1.Next;
  Application.ProcessMessages;
  with ProgressBar1 do
  begin
    Min := 0;
    Max := ADODataSet1.RecordCount;
    for i := Min to Max do
    Position := i;
    ADODataSet1.Next;
end;
end;
end;

p80286 20. Aug 2013 10:32

AW: ADODataSet Der Vorgang ist in diesen Zusammenhang nicht zugelassen
 
Du hast aber schon mal mit dem Debugger kontrolliert was da abläuft?
und Du weißt das
Delphi-Quellcode:
 ADODataSet1.DeleteRecords;
Alle Datensätze löscht?

Gruß
K-H

blondervolker 20. Aug 2013 11:29

AW: ADODataSet Der Vorgang ist in diesen Zusammenhang nicht zugelassen
 
Upps, also dann delete nehm ich mal an.

p80286 20. Aug 2013 11:36

AW: ADODataSet Der Vorgang ist in diesen Zusammenhang nicht zugelassen
 
Zitat:

Zitat von blondervolker (Beitrag 1225486)
Upps, also dann delete nehm ich mal an.

Das kommt darauf an was Du erreichen willst. Und dann solltest Du mal einen Blick in die OH werfen, ob es eine Funktion gibt, die das macht, was Du erreichen willst.

Ich pers. ziehe eigentlich immer die Nutzung von SQL-Befehlen vor, aber jeder so wie er mag.

Gruß
K-H

sx2008 20. Aug 2013 11:44

AW: ADODataSet Der Vorgang ist in diesen Zusammenhang nicht zugelassen
 
Also deine ganze Schleife ist irgendwie verkorkst.
Entweder du löscht einen Datensatz oder du überspringst ihn mit
Delphi-Quellcode:
Next
(aber nicht beides!).
Delphi-Quellcode:
procedure TForm1.Button6Click(Sender: TObject);
var
i : integer;
begin
  ADODataSet1.First;
  ProgressBar1.Max := ADODataSet1.RecordCount;
  ProgressBar1.Min := 1;
  ProgressBar1.Position := 1;

  while not ADODataSet1.Eof do
  begin
    if ADODataSet1.FieldByName('DEU').AsString = ''
    then
      ADODataSet1.Delete
    else
      ADODataSet1.Next;
    ProgressBar1.StepIt;
    Application.ProcessMessages;
  end;
end;
Und hier noch die schnellere Variante mit SQL; dabei kannst du dir den Progressbar sparen weil es so schnell geht.
Delphi-Quellcode:
begin
  ADOCommand1.CommandText := 'DELETE FROM Tabelle WHERE (DEU='''') or (DEU IS NULL)';
  ADOCommand1.Execute;

blondervolker 20. Aug 2013 12:12

AW: ADODataSet Der Vorgang ist in diesen Zusammenhang nicht zugelassen
 
Oih,da sieht man wieder wie dähhhmlich ich bin...:wall:
Mit der ersten Variante hat dies sofort funktioniert.

Die zweite werde ich denne ausprobieren.

Danke für die Hilfe :thumb::thumb::thumb:

Leider habe ich Vollidiot die "Echte-DB" gerade in Betrieb.Die mit sehr vielen leeren Zeilen.(Tausende)
Nach dem löschen der Datensätze will mein Programmchen immer ein "OK".:cyclops:


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:57 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