AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi EAccessViolation beim beenden
Thema durchsuchen
Ansicht
Themen-Optionen

EAccessViolation beim beenden

Ein Thema von wo0zy · begonnen am 10. Jun 2003 · letzter Beitrag vom 12. Jun 2003
Antwort Antwort
Benutzerbild von wo0zy
wo0zy

Registriert seit: 14. Apr 2003
Ort: 127.0.0.1
80 Beiträge
 
Delphi 7 Enterprise
 
#1

EAccessViolation beim beenden

  Alt 10. Jun 2003, 22:24
Hi,
hab da mal ein Problem bei meinem Adress-tool.

undzwar läuft bis jetzt alles wunderbar, doch wenn ich das Programm schließe dann kommt immer ne Fehlermeldnung in der was von EAccessViolation steht.
Hier mal der Code, vieleicht findet ihr da ja was raus!
Code:
unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, ComCtrls, StdCtrls, DB, ZQuery, ZMySqlQuery, ZConnect,
  ZMySqlCon, ZTransact, ZMySqlTr;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    Hilfe1: TMenuItem;
    Einstellungen1: TMenuItem;
    Zugangsdaten1: TMenuItem;
    ListView1: TListView;
    StatusBar1: TStatusBar;
    Hilfe2: TMenuItem;
    N1: TMenuItem;
    Info1: TMenuItem;
    edName: TEdit;
    Label1: TLabel;
    edEmail: TEdit;
    Label2: TLabel;
    edTelefon: TEdit;
    Label3: TLabel;
    edFax: TEdit;
    Label4: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    trMain: TZMySqlTransact;
    qrMain: TZMySqlQuery;
    dsMain: TDataSource;
    dbMain: TZMySqlDatabase;
    edID: TEdit;
    Label5: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Connect;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button3Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Connect;
begin
  dbMain.Host:='********';
  dbMain.login:='********';
  dbMain.Password:='********';
  dbMain.Database:='delphi';
  dbMain.Connected:=true;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  connect;
  try
    qrMain.Sql.Text:='INSERT INTO `telebase` (`id`,`name`,`email`,`telefon`,`fax`) '+
                      'VALUES '+
                      '('''','''+edName.Text+''','''+edEmail.Text+
                      ''', '''+edTelefon.Text+''','''+edFax.Text+
                      ''');';
    qrMain.ExecSql;
  finally
    dbMain.Connected:=false;
  end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  dbMain.Connected:=false;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  connect;
  try
    qrMain.Sql.Text:='DELETE FROM `telebase` WHERE `id`='+edID.Text+';';
    qrMain.ExecSql;
  finally
    dbMain.Connected:=false;
  end;
end;

end.
ich hab auch schon versucht beim onClose der Form von der Datenbank zu disconnecten, aber das brachte absolut keine Veränderung.
It's not a bug it's a feature!
  Mit Zitat antworten Zitat
Benutzerbild von Specialwork
Specialwork

Registriert seit: 10. Jan 2003
Ort: Schwall
71 Beiträge
 
Delphi 8 Professional
 
#2
  Alt 10. Jun 2003, 22:42
Hallo wo0zy,

Zunächst einmal solltest Du die Connect Methode in Deinem Try finally Block unterbringen.

Dann Solltest Du vor einem Disconnect Abfragen, ob die Verbindung noch besteht.

Überarbeitet sieht das so aus:

Delphi-Quellcode:
unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, ComCtrls, StdCtrls, DB, ZQuery, ZMySqlQuery, ZConnect,
  ZMySqlCon, ZTransact, ZMySqlTr;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    Hilfe1: TMenuItem;
    Einstellungen1: TMenuItem;
    Zugangsdaten1: TMenuItem;
    ListView1: TListView;
    StatusBar1: TStatusBar;
    Hilfe2: TMenuItem;
    N1: TMenuItem;
    Info1: TMenuItem;
    edName: TEdit;
    Label1: TLabel;
    edEmail: TEdit;
    Label2: TLabel;
    edTelefon: TEdit;
    Label3: TLabel;
    edFax: TEdit;
    Label4: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    trMain: TZMySqlTransact;
    qrMain: TZMySqlQuery;
    dsMain: TDataSource;
    dbMain: TZMySqlDatabase;
    edID: TEdit;
    Label5: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Connect;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button3Click(Sender: TObject);
  private
    { Private-Deklarationen } 
  public
    { Public-Deklarationen } 
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm} 

procedure TForm1.Connect;
begin
  dbMain.Host:='********';
  dbMain.login:='********';
  dbMain.Password:='********';
  dbMain.Database:='delphi';
  dbMain.Connected:=true;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    Connect;

    qrMain.Sql.Clear;
    qrMain.Sql.Add('INSERT INTO `telebase` (`id`,`name`,`email`,`telefon`,`fax`) ');
    qrMain.Sql.Add('VALUES ');
    qrMain.Sql.Add('('''','''+edName.Text+''','''+edEmail.Text);
    qrMain.Sql.Add(''', '''+edTelefon.Text+''','''+edFax.Text+''');');

    qrMain.ExecSql;
  finally
    if qrMain.Connected=True then dbMain.Connected:=false;
  end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if qrMain.Connected=True then dbMain.Connected:=false;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  try
    Connect;

    qrMain.Sql.Clear;
    qrMain.Sql.Add('DELETE FROM `telebase` WHERE `id`='+edID.Text+';');

    qrMain.ExecSql;
  finally
    if qrMain.Connected=True then dbMain.Connected:=false;
  end;
end;

end.
Gruß, Tom
Thomas van Veen
Es gibt keine Probleme, nur Lösungen, auf die man nicht gleich kommt !
  Mit Zitat antworten Zitat
Benutzerbild von wo0zy
wo0zy

Registriert seit: 14. Apr 2003
Ort: 127.0.0.1
80 Beiträge
 
Delphi 7 Enterprise
 
#3
  Alt 11. Jun 2003, 10:49
Hi,
ich hab das mal ausprobiert, doch leider hat da zu keinem Ergebnis geführt.
Gibts da vieleicht noch irgendetwas anderes woran es liegen könnte?
It's not a bug it's a feature!
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.611 Beiträge
 
#4
  Alt 11. Jun 2003, 12:44
Hast Su schonmal versucht, da reinzudebuggen?

Haltepunkt aufs FormClose und dann mal gucken, bei welcher Zeile er die AccVio bringt.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von wo0zy
wo0zy

Registriert seit: 14. Apr 2003
Ort: 127.0.0.1
80 Beiträge
 
Delphi 7 Enterprise
 
#5
  Alt 12. Jun 2003, 13:09
also ich hab das jetzt mal versucht, aber iregendwie war das ganz schön merkwürdig, er hat alle units von zeos durchlaufen die benötigt wurden, und dann is raus gekommen das bei query.free diese meldung kommt. aber es muss an meinem code liegen denn ich hab schon 2 andere programme mit den gleichen komponenten geschrieben und da kam sowas nicht.
It's not a bug it's a feature!
  Mit Zitat antworten Zitat
Benutzerbild von Specialwork
Specialwork

Registriert seit: 10. Jan 2003
Ort: Schwall
71 Beiträge
 
Delphi 8 Professional
 
#6
  Alt 12. Jun 2003, 22:40
Hallo wo0zy,

Überprüfe mal durch Debuggen, ob sich an der Stelle, wo query.free aufgerufen wird, Query = nil ist.

Gruß, Tom
Thomas van Veen
Es gibt keine Probleme, nur Lösungen, auf die man nicht gleich kommt !
  Mit Zitat antworten Zitat
Antwort Antwort


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