AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Löschen in DBGrid funktioniert nicht
Thema durchsuchen
Ansicht
Themen-Optionen

Löschen in DBGrid funktioniert nicht

Ein Thema von Ati · begonnen am 30. Nov 2005 · letzter Beitrag vom 1. Dez 2005
Antwort Antwort
Seite 1 von 2  1 2      
Ati

Registriert seit: 16. Okt 2003
Ort: Gelsenkirchen
406 Beiträge
 
Delphi 3 Professional
 
#1

Löschen in DBGrid funktioniert nicht

  Alt 30. Nov 2005, 15:15
Datenbank: Firebird • Version: 1.5 • Zugriff über: Zeos
Hallo zusammen,

in einem Thread hatte ich was gefunden, wie ich über ein DBGrid einen Datensatz löschen kann:
Delphi-Quellcode:
procedure TForm1.btdelClick(Sender: TObject);
begin
  DBGrid1.ReadOnly:=false;
  DBGrid1.DataSource.DataSet.Delete;

end;
Jedoch kommt eine Fehlermeldung wenn ich jetzt den Button drücke "Cannot modify a read-only dataset"??
Habe aber die Eigenschaft meiner Meinung nach auf False gestzt!!

Ati
Ich weiß das ich nichts weiß

Sokrates
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Löschen in DBGrid funktioniert nicht

  Alt 30. Nov 2005, 15:18
Du solltest den Datensatz direkt in der Datenbank über einen Query löschen. Das DBGrid ist nur zur Darstellung der Datensätze für den Benutzer gedacht.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Ati

Registriert seit: 16. Okt 2003
Ort: Gelsenkirchen
406 Beiträge
 
Delphi 3 Professional
 
#3

Re: Löschen in DBGrid funktioniert nicht

  Alt 30. Nov 2005, 15:33
Zu Deinem Vorschlag sag ich nur ??? Aber nun gut man kann die Suche bemühen.
Trotzdem frag ich mich warum mein Code nicht funktioniert!!

Ati
Ich weiß das ich nichts weiß

Sokrates
  Mit Zitat antworten Zitat
Benutzerbild von mikhal
mikhal

Registriert seit: 11. Sep 2003
Ort: Linz am Rhein
796 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Löschen in DBGrid funktioniert nicht

  Alt 30. Nov 2005, 15:39
Existiert für dein DataSet ein SQL-Code für die Delete-Anweisung (Komponente ZUpdateSQL)?

Grüße
Mikhal
Michael Kraemer
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
  Mit Zitat antworten Zitat
Ati

Registriert seit: 16. Okt 2003
Ort: Gelsenkirchen
406 Beiträge
 
Delphi 3 Professional
 
#5

Re: Löschen in DBGrid funktioniert nicht

  Alt 30. Nov 2005, 15:46
@mikhal das schreit ja jetzt förmlich nach einer Erklärung!!
Kann Dir nicht folgen...sorry
Ich weiß das ich nichts weiß

Sokrates
  Mit Zitat antworten Zitat
Benutzerbild von mikhal
mikhal

Registriert seit: 11. Sep 2003
Ort: Linz am Rhein
796 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Löschen in DBGrid funktioniert nicht

  Alt 30. Nov 2005, 15:56
Auf die Schnelle, weil ich jetzt Feierabend machen will und mich in den allabendlichen Verkehrsstau stürzen will...

Ich weiß nicht, welche DataSet du zugrundelegst, also gehe ich der Einfachheit halber von einer ZQuery aus, sollte aber auch mit ZTable funktionieren.

Zusätzlich benötigst du noch eine ZUpdateSQL, in deren Eigenschaft UpdateSQL das Delete-Statement als SQL-Anweisung eingetragen sein muß. ZQuery besitzt eine Eigenschaft UpdateObject, dort kannst du dein ZUpdateSQL auswählen. Voilà, das war's. Jetzt weiß dein ZQuery, was es mit dem Methodenaufruf Delete anfangen soll.

Grüße
Mikhal
Michael Kraemer
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
  Mit Zitat antworten Zitat
Ati

Registriert seit: 16. Okt 2003
Ort: Gelsenkirchen
406 Beiträge
 
Delphi 3 Professional
 
#7

Re: Löschen in DBGrid funktioniert nicht

  Alt 30. Nov 2005, 16:50
Also ich hoffe ich blamier mich nicht wenn ich Luckie und mikhal nicht folgen konnte. Habe das Problem mal so gelöst.
Delphi-Quellcode:
delnum:= qrMain.fieldbyname('Nummer').asString;
delnam:= qrMAin.fieldbyname('NAME').asString;
showmessage(delnum + delnam);
qrMain.sql.clear;
  qrMain.sql.text:='Delete from vim where nummer='+delnum+';';
  qrMain.execSql;
Eigentlich wollte ich in der SQL-Anweisung auch noch den Bezug zum Namen herstellen, jedoch kam da immer eine Fehlermeldung. Dann wollte ich noch das das DBGrid nach dem löschen sofort die aktuellen Datensaätze neu anzeigt, jedoch erhalte ich bei qrMain.refresh; eine Fehlermeldung. Aber sowas kann man doch bestimmt eleganter lösen oder????

Ati
Ich weiß das ich nichts weiß

Sokrates
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#8

Re: Löschen in DBGrid funktioniert nicht

  Alt 30. Nov 2005, 17:15
Zitat von Ati:
Jedoch kommt eine Fehlermeldung wenn ich jetzt den Button drücke "Cannot modify a read-only dataset"??
Du musst grundsätzlich folgende Regeln beachten:
1.) die Tabelle, in der du löschen willst braucht einen Primärschlüssel. Ohne PK geht's nicht !!
2.) du kannst nur in einer Tabelle löschen. In Abfragen, die 2 oder mehr Tabellen verjoinen,
kann nicht gelöscht werden !!
3.) In Abfragen, die GROUP BY oder DISTINCT verwenden kann nicht gelöscht werden !!
Wie lautet denn deine Abfrage oder verwendest du direkt eine Tabelle ?
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Löschen in DBGrid funktioniert nicht

  Alt 30. Nov 2005, 17:22
Hai Ati,

noch als anmerkung zu der Aussage von shmia

Zitat von shmia:
1.) die Tabelle, in der du löschen willst braucht einen Primärschlüssel. Ohne PK geht's nicht !!
Dies ist so wenn Du mit der .Delete Methode deines TDataSet arbeiten möchtest. Wenn Du dir mit einem Zusätzlichen TDataSet den Datensatz per SQL-Befehl löschst brauchst Du kein PK.

Was deine Fehlermeldung nach dem .Refresh angeht denke ich mal Das Du folgendes machst:
Delphi-Quellcode:
begin
  with qrMain do
  begin
    Close;
    SQL.Text := 'SELECT * FROM tabelle';
    Open; // Jetzt werden die Daten im DBGrid angezeigt;
    SQL.Text := 'DELETE FROM tabelle WHERE nummer = 1'; // Datensatz wo nummer = 1 ist löschen
    ExecSQL;
    Refresh; // Peng!!!
  end;
end
Das Refresh kann nicht gehen da Du ja jetzt ein ganz anderes SQL-Statment hast. Du müsstest das ganze also auf zwei Query aufteilen:
Delphi-Quellcode:
begin
  with qrMain do
  begin
    Close;
    SQL.Text := 'SELECT * FROM tabelle';
    Open; // Jetzt werden die Daten im DBGrid angezeigt;
  end;
  with qrDelete do
  begin
    Close;
    SQL.Text := 'DELETE FROM tabelle WHERE nummer = 1'; // Datensatz wo nummer = 1 ist löschen
    ExecSQL;
  end;
  qrMain.Refresh;
end
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Ati

Registriert seit: 16. Okt 2003
Ort: Gelsenkirchen
406 Beiträge
 
Delphi 3 Professional
 
#10

Re: Löschen in DBGrid funktioniert nicht

  Alt 30. Nov 2005, 21:10
@shmia
Punkt 1+2 habe ich erfüllt. Die Sortierung habe ich (jetzt mal aus dem Kopf) mit qrMain.sort..... gemacht.

@sharky
Genauso wie Du es vermutest hast habe ich es auch gemacht. Jetz mal ne doofe FRage zu Deinem Lösungsansatz. Brauch ich für qrMain und qrDelete zwei Kompo´s auf dem Formular (ich vermute jetzt mal ja).

Jedoch interessiert mich das was mikhal gesagt hat. Habe nämlich keinen Schimmer was ich bei der Update-Komponenten wo eintragen muß.
Außerdem interessiert es mich warum bei der Delete-Anweisung die Kombination aus Nummer und Namen einen Fehler verursacht hat. Was wäre wenn die Nummer zweimal vergeben ist??

Ati
Ich weiß das ich nichts weiß

Sokrates
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 01:34 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