![]() |
Datenbank: MyBase • Version: x • Zugriff über: x
MyBase: Datenlöschen
Moin,
entweder sehe ich den Wald vor lauter Bäumen nicht oder bin total auf dem Holzweg. Gebene ist folgender Code:
Code:
Der untere Teil funktioniert wie gewünscht, aber der obere Teil führt zur folgenden Fehlermeldung:
begin
BtDatensatzLoeschen.Caption:=IntToStr(ClientDataSet1.RecordCount); // Anzahl der Einträge in der Datenbank for I := 1 to ClientDataSet1.RecordCount do Begin If ClientDataSet1.Locate('Codenummer',lbledt1.text,[]) then // Datensatz finden begin ClientDataSet1.edit; // Datenbank zum Bearbeiten öffnen ClientDataSet1.delete; // Datensatz löschen ClientDataSet1.Post; // Datenbank aktualisieren end; End; end; procedure TForm1.BtStatusAendernClick(Sender: TObject); begin If ClientDataSet1.Locate('ID','3',[]) then // Datensatz finden if ClientDataSet1['Status'] ='0' then begin ClientDataSet1.edit; // Datenbank zum Bearbeiten öffnen ClientDataSet1['Status']:='1'; // Inhalt ändern ClientDataSet1.Post; // Datenbank aktualisieren end else begin ClientDataSet1.edit; // Datenbank zum Bearbeiten öffnen ClientDataSet1['Status']:='0'; // Inhalt ändern ClientDataSet1.Post; // Datenbank aktualisieren end; end; Zitat:
Code:
im Code.
ClientDataSet1.edit; // Datenbank zum Bearbeiten öffnen
Was mache ich falsch?? Gruß Heiko |
AW: MyBase: Datenlöschen
Benutze zukünftig den Debugger, damit du siehst, wo der Fehler passiert. Vielleicht wärest du dann selbst auf die richtige Idee gekommen.
Der Fehler dürfte durch dein "ClientDataSet1.Post" entstehen. Das ClientDataSet1.Edit ist völlig überflüssig. Du setzt damit den Datensatz, den du löschen willst in den Edit-Modus. Danach löscht du diesen dann. Ich wäre nicht mal auf die Idee gekommen, das so zu machen und hätte eher vermutet, dass dort eine Exception auftritt. Und für ClientDataSet1.Delete benötigst du kein ClientDataSet1.Post. Das Post ist nur für neue Datensätze oder Datensätze, die geändert werden. |
AW: MyBase: Datenlöschen
Hallo Jasocul,
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Danke. Gruß HEiko |
AW: MyBase: Datenlöschen
Ich verstehe nur nicht ganz, warum du für das Löschen eines Datensatzes in einer Schleife durch die ganze Datenmenge läufst? Dafür hast du doch Locate?
|
AW: MyBase: Datenlöschen
Moin,
Zitat:
Gruß HEiko |
AW: MyBase: Datenlöschen
Trotzdem kannst Du dich dann auf die Datensätze, die dem Suchmuster entsprechen, beschränken (Z.B. per Locate)
|
AW: MyBase: Datenlöschen
ok. Dann würde ich aber mit einer while Schleife arbeiten:
while ClientDataset1.Locate(...) do ClientDataset1.Delete oder so. Oder natürlich ein entsprechendes SQL-Statement absetzen (um alle entsprehcende Datensätze auf einmal zu löschen) und danach das ClientDataset aktualisieren. |
AW: MyBase: Datenlöschen
Das würde ich vielleicht eher so angehen (Pseudo-Code):
Delphi-Quellcode:
SQL o.ä. scheidet bei MyBase ja leider aus.
Dataset.First;
while not Dataset.EOF do begin if Dataset.FieldByName['Codenummer'] = DeinSuchbegriff then Dataset.Delete else Dataset.Next; end; |
AW: MyBase: Datenlöschen
Zitat:
|
AW: MyBase: Datenlöschen
Danke, für Eure Hilfe.
Die "Schleife " habe ich jetzt so gelöst:
Code:
Oder spricht was gehen "with"?
with ClientDataSet1 do
begin First; while not EOF do begin if FieldByName('Codenummer').AsString = lbledt1.text then Delete else Next; end; end; Gruß Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:43 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