AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi MyBase: Datenlöschen
Thema durchsuchen
Ansicht
Themen-Optionen

MyBase: Datenlöschen

Ein Thema von Kralle · begonnen am 18. Aug 2014 · letzter Beitrag vom 19. Aug 2014
Antwort Antwort
Seite 1 von 3  1 23      
Kralle

Registriert seit: 31. Okt 2004
Ort: Bremerhaven
355 Beiträge
 
Delphi XE7 Professional
 
#1

MyBase: Datenlöschen

  Alt 18. Aug 2014, 10:42
Datenbank: MyBase • Version: x • Zugriff über: x
Moin,

entweder sehe ich den Wald vor lauter Bäumen nicht oder bin total auf dem Holzweg.

Gebene ist folgender Code:
Code:
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;
Der untere Teil funktioniert wie gewünscht, aber der obere Teil führt zur folgenden Fehlermeldung:
Zitat:
Erste Gelegenheit für Exception bei $00007FFA23B25BF8. Exception-Klasse EDatabaseError mit Meldung 'ClientDataSet1: Datenmenge weder im Editier- noch im Einfügemodus'. Prozess mybase_test.exe (404)
Aber, ich habe doch ein
Code:
ClientDataSet1.edit; // Datenbank zum Bearbeiten öffnen
im Code.
Was mache ich falsch??

Gruß Heiko
OS: Windows 10 Professional, Delphi XE7 Pro SP1 +(Mobilpack & FireDAC)

Geändert von Kralle (18. Aug 2014 um 11:51 Uhr) Grund: Problem gelöst
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.355 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: MyBase: Datenlöschen

  Alt 18. Aug 2014, 11:03
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.
Peter
  Mit Zitat antworten Zitat
Kralle

Registriert seit: 31. Okt 2004
Ort: Bremerhaven
355 Beiträge
 
Delphi XE7 Professional
 
#3

AW: MyBase: Datenlöschen

  Alt 18. Aug 2014, 11:50
Hallo Jasocul,

Benutze zukünftig den Debugger, damit du siehst, wo der Fehler passiert. Vielleicht wärest du dann selbst auf die richtige Idee gekommen.
Als ich versucht habe mittels Breakpoint und F7 durch den Quellcode zu laufen um zu sehen wo der Fehler genau auftritt, fuktionierte das natürlich mal wieder nicht.
Der Fehler dürfte durch dein "ClientDataSet1.Post" entstehen.
Jupp, das war es.
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.
Da ein Schrittweises abarbeiten mal wieder nicht funktioniert hat und es in der Fehlermeldung hies:
Zitat:
Datenmenge weder im Editier- noch im Einfügemodus'
dachte ich mir:"Da haste wohl das "Edit" vergessen."
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.
okay, das habe ich mir jetzt notiert.

Danke.

Gruß HEiko
OS: Windows 10 Professional, Delphi XE7 Pro SP1 +(Mobilpack & FireDAC)
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.737 Beiträge
 
Delphi 6 Enterprise
 
#4

AW: MyBase: Datenlöschen

  Alt 18. Aug 2014, 11:54
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?
Ralph
  Mit Zitat antworten Zitat
Kralle

Registriert seit: 31. Okt 2004
Ort: Bremerhaven
355 Beiträge
 
Delphi XE7 Professional
 
#5

AW: MyBase: Datenlöschen

  Alt 18. Aug 2014, 11:58
Moin,

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?
Ich will aber nicht nur einen Datensatz löschen sondern alle mit einem bestimmten Wert in "Codenummer".

Gruß HEiko
OS: Windows 10 Professional, Delphi XE7 Pro SP1 +(Mobilpack & FireDAC)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: MyBase: Datenlöschen

  Alt 18. Aug 2014, 12:02
Trotzdem kannst Du dich dann auf die Datensätze, die dem Suchmuster entsprechen, beschränken (Z.B. per Locate)
Markus Kinzler
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.737 Beiträge
 
Delphi 6 Enterprise
 
#7

AW: MyBase: Datenlöschen

  Alt 18. Aug 2014, 12:03
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.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#8

AW: MyBase: Datenlöschen

  Alt 18. Aug 2014, 12:04
Das würde ich vielleicht eher so angehen (Pseudo-Code):
Delphi-Quellcode:
Dataset.First;
while not Dataset.EOF do
  begin
    if Dataset.FieldByName['Codenummer'] = DeinSuchbegriff then
      Dataset.Delete
    else
      Dataset.Next;
  end;
SQL o.ä. scheidet bei MyBase ja leider aus.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.737 Beiträge
 
Delphi 6 Enterprise
 
#9

AW: MyBase: Datenlöschen

  Alt 18. Aug 2014, 12:17
SQL o.ä. scheidet bei MyBase ja leider aus.
Das wußte ich nicht und nehme meinen obigen Vorschlag wieder zurück.
Ralph
  Mit Zitat antworten Zitat
Kralle

Registriert seit: 31. Okt 2004
Ort: Bremerhaven
355 Beiträge
 
Delphi XE7 Professional
 
#10

AW: MyBase: Datenlöschen

  Alt 18. Aug 2014, 12:52
Danke, für Eure Hilfe.

Die "Schleife " habe ich jetzt so gelöst:
Code:
with ClientDataSet1 do
   begin
     First;
     while not EOF do
       begin
         if FieldByName('Codenummer').AsString = lbledt1.text then
           Delete
         else
           Next;
       end;
   end;
Oder spricht was gehen "with"?

Gruß Heiko
OS: Windows 10 Professional, Delphi XE7 Pro SP1 +(Mobilpack & FireDAC)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:20 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