AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Problem beim Erzeugen eines 2. Objekts von einer Klasse.
Thema durchsuchen
Ansicht
Themen-Optionen

Problem beim Erzeugen eines 2. Objekts von einer Klasse.

Offene Frage von "ustra"
Ein Thema von ustra · begonnen am 5. Mär 2005 · letzter Beitrag vom 5. Mär 2005
 
ustra

Registriert seit: 12. Mär 2003
Ort: Geesthacht
138 Beiträge
 
Delphi 5 Professional
 
#1

Problem beim Erzeugen eines 2. Objekts von einer Klasse.

  Alt 5. Mär 2005, 15:09
Hallo,

ich habe folgende Klasse geschrieben um mir den Zugriff auf eine MySQL-Datenbank zu erleichtern (einige Methoden habe ich zum Posten wegen der Übersichtlichkeit entfernt, die mit dem Problem nichts zu tun haben):

Delphi-Quellcode:
unit UDatenbank;

interface

uses Sysutils, UIni, classes, ZConnection, Db, ZAbstractRODataset, ZAbstractDataset, ZDataset;

type TFehlerEvent = procedure(sFehlercode: integer) of object;
type TDatenbank = class(TComponent)
  private
    FMysql : TZConnection;
    FAbfrage : TZQuery;
    ini : TIni;
    FOnFehler: TFehlerEvent;
    procedure SetOnFehler(Value: TFehlerEvent);
    procedure Fehler (sFehler : integer);
    procedure iniOnFehler(sFehlercode: integer);
    procedure verbinden;
    procedure beenden;
  public
    constructor create;
    destructor destroy;
    procedure abfrage(sAbfrage : String);
  published
      property onFehler: TFehlerEvent read FOnFehler write SetonFehler;
end;

implementation

{ TDatenbank }

constructor TDatenbank.create;
begin
  try
    FMysql := TZConnection.create(self);
    FAbfrage := TZQuery.create(self);
    FAbfrage.Connection := FMysql;
    Ini := TIni.create(self);
    Ini.onFehler := iniOnFehler;
  except
    Fehler(10000);
  end;
end;

destructor TDatenbank.destroy;
begin
  beenden;
  FMysql.Free;
  FAbfrage.free;
  Ini.free;
end;

procedure TDatenbank.SetOnFehler(Value: TFehlerEvent);
begin
  FOnFehler := Value;
end;

procedure TDatenbank.Fehler(sFehler: integer);
begin
  If Assigned(FOnFehler) then
     FOnFehler(sFehler);
end;

procedure TDatenbank.iniOnFehler(sFehlercode: integer);
begin
  Fehler(sFehlercode);
end;

procedure TDatenbank.beenden;
begin
 if FMysql.Connected then
    FMysql.Disconnect;
end;

procedure TDatenbank.verbinden;
begin
  beenden;
  FMysql.HostName := ini.lese('db', 'host');
  FMysql.port := StrToInt(ini.lese('db', 'port'));
  FMysql.user := ini.lese('db', 'benutzer');;
  FMysql.password := ini.lese('db', 'passwort');;
  FMysql.Database := ini.lese('db', 'datenbank');
  FMysql.protocol := 'mysql-3.23';
  FMysql.ReadOnly := false;
  FMysql.connect;
  if not FMysql.connected
  then
    Fehler(10001);
end;

procedure TDatenbank.abfrage(sAbfrage: String);
var q: string;
    ex: boolean;
begin
  verbinden;
  FAbfrage.SQL.text := sAbfrage;
  FAbfrage.open;
  beenden;
end;

end.
Hinweis: Die Klasse TIni ist eine weitere Klasse, in der ich den Zugriff auf eine INI-Datei gekapselt habe.
Ich benutze als Komponenten die ZEOS-Komponenten für den Datenbankzugriff.

Nun zum eigentlichen Problem: Erzeuge ich mir von der Klasse TDatenbank ein Objekt, so funktioniert dies auch problemlos; kann Daten in die Datenbank schreiben und lesen. Wenn ich aber während der Laufzeit ein 2. Objekt von der Klasse erzeugen will, bekomme ich immer Zugriffsverletzung.

Weiss jemand Rat?

Besten Dank

Ulrich
Ulrich Strauer
  Mit Zitat antworten Zitat
 


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 20:29 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