Datensatz im Datagrid löschen

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Alfred
Beiträge: 101
Registriert: Do 22. Nov 2007, 20:06
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: München

Datensatz im Datagrid löschen

Beitrag von Alfred »

Mit

Code: Alles auswählen

Datasource1.Dataset.Delete;
ist der im Datagrid angeklickte Datensatz gelöscht.

Beim abspeichern mit

Code: Alles auswählen

SQLQuery1.delete;
SQLQuery1.applyupdates;
erhalte ich Access Violation.

Gruß
Alfred

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Funktioniert bei mir mir SQLDB, SQLite und TDbf.
Eine Access Violation hört sich auch eher danach an das das Query nicht mehr existiert o.ä. Ansonsten benutz mal den Debugger.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Alfred
Beiträge: 101
Registriert: Do 22. Nov 2007, 20:06
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: München

Beitrag von Alfred »

Hallo Christian,

TDbf kommt ja nur mit Datasource.Dataset.Delete aus.

Bei SQLDb im Debugger stürzt SQLQuery1.applyupdates ab und liefert

Project raised exception class 'External: SIGSEGV'


Gruß
Alfred

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Jetzt haben wir genau so viele Informationen wie nach deinem ersten Post. Access Violation sagt nur aus das versucht wurde auf einen Speicherbereich zuzugreifen der ungültig ist. Das sagt rein gar nichts zu deinem Problem aus. Mithilfe deines codes können wir es auch sehr schlecht nachvollziehen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Alfred
Beiträge: 101
Registriert: Do 22. Nov 2007, 20:06
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: München

Beitrag von Alfred »

Hallo Christian,

Code: Alles auswählen

unit Unit1; 
{$mode objfpc}{$H+}
interface
uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs,
  IBConnection, sqldb, db, DBGrids, StdCtrls;
type
  { TForm1 }
  TForm1 = class(TForm)
    Button1: TButton;
    Datasource1: TDatasource;
    DBGrid1: TDBGrid;
    IBConnection1: TIBConnection;
    SQLQuery1: TSQLQuery;
    SQLTransaction1: TSQLTransaction;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end; 
var
  Form1: TForm1; 
implementation
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
  Datasource1.Dataset.Delete;
  SQLQUERY1.delete;
  SQLQUERY1.ApplyUpdates;
  SQLTransaction1.Commit;
  SQLQUERY1.close;
  SQLQUERY1.SQL.TEXT := 'select * from Personal';
  SQLQUERY1.Active := true;
  DBGRID1.SetFocus;
end;
initialization
  {$I unit1.lrs}
end.
Gruß
Alfred

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

wiso löscht du da 2 datensätze? hat das dataset überhaupt 2 ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Alfred
Beiträge: 101
Registriert: Do 22. Nov 2007, 20:06
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: München

Beitrag von Alfred »

Hallo Christian,

habe die Prozedur abgespeckt. Das Problem bleibt.

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  SQLQUERY1.delete;
  SQLQUERY1.ApplyUpdates;
end;
Muss in dem SQLQUERY1 noch etwas eingestellt werden?

Gruß
Alfred

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

die Update Methos hattest du ja vorher manuell auf UpdateWhereAll gesetzt das kannst du im Projektinspektor machen. Was kommt dann jetzt raus ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Alfred
Beiträge: 101
Registriert: Do 22. Nov 2007, 20:06
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: München

Beitrag von Alfred »

Hallo Christian,

der Fehler ist leider weiter vorhanden.

Wenn ich wieder in das Programm gehe ist der Wert auf UpWhereKeyOnly umgestellt.

Mit Flamerobin läßt sich die Datei ganz normal bearbeiten.

Gruß
Alfred

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Probier doch das selbe mal mit MySQL vielleicht ist der SQLDb Firebird support noch zu buggy.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Alfred
Beiträge: 101
Registriert: Do 22. Nov 2007, 20:06
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: München

Beitrag von Alfred »

Hallo Christian,

folgendes habe ich nun herausgefunden.

Die Version 0.9.25 hat in den SQLdb Probleme.

Ich habe wieder 0.9.24 installiert.

Mein MySQL-Programm erkennt nun wieder die Felder mit Zahlen.
Außerdem läßt sich mit der abgespeckten Prozedur ein Datensatz in MySQL löschen.

Bei Firebird funktioniert es nur so:

Code: Alles auswählen

nPNr := SQLQUERY1.FieldValues['PNR'];
  cPNR := InttoStr(nPNR);
  SQLQUERY1.Close;
  SQLQUERY1.DeleteSQL.Text := 'Delete from Personal where PNR = '+cPNR;
  SQLQUERY1.Active := true;
  SQLQUERY1.Delete;
  SQLQUERY1.ApplyUpdates;
  SQLQUERY1.close;
  SQLQUERY1.SQL.TEXT := 'select * from Personal';
  SQLQUERY1.Active := true;
  DBGRID1.SetFocus;
Gruß
Alfred

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

SQLDb hat nichts it Lazarus zu tun das ist ein reines fpc ding. Solang du den fpc nicht mitausgetauscht hast sollte das keinen Unterschied machen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Alfred
Beiträge: 101
Registriert: Do 22. Nov 2007, 20:06
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: München

Beitrag von Alfred »

Hallo Christian,

auch hier tritt der Fehler in der Kombination 0.9.25 und fpc 2.2.0 auf.

Gruß
Alfred

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

ja, weil ja bei der 24 und der 25 der FPC 2.2.0 dabei ist, folglich hast du das selbe Problem, das wollte Christian ja ausdrücken, weil das ganze auf FPC-Sourcen basiert.
Johannes

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6766
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Beitrag von af0815 »

Alfred hat geschrieben:Bei Firebird funktioniert es nur so:
Wenn ich mir den Thread so ansehe, so fällt mir auf, das es erst dann geht wenn du ihn das Delete-Statement vorgibst.

An und für sich ist es der sicherste Weg, das Insert, Delete und Updatestatement vorzugeben :-) Nur die meisten verlassen sich auf die automatische Erstellung der Statements.

Wenn die automatik kein vernünfitiges Statement zusammen bringt, können recht unterschiedliche Fehler auftreten. Meistens ensteht das daher, das die automatik nicht erkennen kann wie sie den Datensatz löschen, ändern oder einfügen kann - meistens deshalb weil Primärschlüssel nicht richtig erkannt werden oder fehlen oder im OI nicht richtig konfiguriert wurde oder die Metadaten nicht ausreichend zur Verfügung stehen.

Bezüglich FPC Version - je neuer umso weniger Fehler und umso besser die Automatik, zumindest ist das meine Erfahrung der letzen 1 1/2 Jahre auf Lazarus.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten