AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language FreePascal Klasse die mit DB verbindet erstellen?
Thema durchsuchen
Ansicht
Themen-Optionen

Klasse die mit DB verbindet erstellen?

Ein Thema von AlexII · begonnen am 21. Aug 2015 · letzter Beitrag vom 21. Aug 2015
Antwort Antwort
Seite 1 von 2  1 2      
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#1

Klasse die mit DB verbindet erstellen?

  Alt 21. Aug 2015, 16:22
Delphi-Version: 5
Hallo,

ich möchte mich mehr mit Klassen bzw. Objekten beschäftigen und schreibe gerade eine Klasse, die meine Anwendung mit der SQLite DB verbinden soll. Aber irgendwie habe ich noch eine Wissenslücke. Die Variablen "SQLite3Connection", "SQLTransaction", "SQLQuery" wollen nicht createt werden. Der Fehler lautet:
Zitat:
myobj.pas(29,54) Error: Incompatible type for arg no. 1: Got "TSQLiteDB", expected "TComponent"
Kann mir da jemand auf die Sprünge helfen? Danke!

Delphi-Quellcode:
unit myobj;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, sqlite3conn, sqldb;

type

  { TSQLiteDB }
  TSQLiteDB = class
    procedure Connect;
  end;

var
  SQLiteDB: TSQLiteDB;

  SQLite3Connection: TSQLite3Connection;
  SQLTransaction: TSQLTransaction;
  SQLQuery: TSQLQuery;

implementation

{ TSQLiteDB }

procedure TSQLiteDB.Connect;
begin
  SQLite3Connection := TSQLite3Connection.Create(Self);
  SQLTransaction := TSQLTransaction.Create(Self);
  SQLQuery := TSQLQuery.Create(Self);

  try
    SQLite3Connection.DatabaseName := ExtractFilePath(Application.ExeName) + 'db.db';
    SQLite3Connection.Params.Add('foreign_keys=on;');
    SQLTransaction.DataBase := SQLite3Connection;
    SQLQuery.Transaction := SQLTransaction;
  except
  end;
end;

end.
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
SProske

Registriert seit: 16. Feb 2015
Ort: Halle/S.
116 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Klasse die mit DB verbindet erstellen?

  Alt 21. Aug 2015, 16:38
TSQLite3Connection.Create erwartet als Übergabeparameter ein TComponent oder eine von TComponent abgeleitete Klasse.

Du kannst das Create auch mit nil aufrufen, musst dich aber dann selbst um die Freigabe kümmern.
Sebastian
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Klasse die mit DB verbindet erstellen?

  Alt 21. Aug 2015, 19:00
Ok... ist es eigentlich ok, wenn ich das wie folgt mache? Muss ich dann "TSQLiteDB.Create;" und "TSQLiteDB.Destroy;" manuell aufrufen, oder geht das automatisch?

Bekomme noch diese Warnung, was heißt sich eigentlich?
Zitat:
Warning: An inherited method is hidden by "destructor TSQLiteDB.Destroy;"
Delphi-Quellcode:
  { TSQLiteDB }
  TSQLiteDB = class
    constructor Create;
    destructor Destroy;
    procedure Connect;
  end;

var
  SQLiteDB: TSQLiteDB;
  SQLite3Connection: TSQLite3Connection;
  SQLTransaction: TSQLTransaction;
  SQLQuery: TSQLQuery;

implementation

{ TSQLiteDB }

constructor TSQLiteDB.Create;
begin
  SQLite3Connection := TSQLite3Connection.Create(nil);
  SQLTransaction := TSQLTransaction.Create(nil);
  SQLQuery := TSQLQuery.Create(nil);
end;

destructor TSQLiteDB.Destroy;
begin
  SQLite3Connection.Free;
  SQLTransaction.Free;
  SQLQuery.Free;
end;
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Klasse die mit DB verbindet erstellen?

  Alt 21. Aug 2015, 19:02
Delphi-Quellcode:
constructor TSQLiteDB.Create;
begin
  inherited;

  SQLite3Connection := TSQLite3Connection.Create(nil);
  SQLTransaction := TSQLTransaction.Create(nil);
  SQLQuery := TSQLQuery.Create(nil);
end;

destructor TSQLiteDB.Destroy;
begin
  SQLite3Connection.Free;
  SQLTransaction.Free;
  SQLQuery.Free;

  inherited;
end;
Markus Kinzler
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Klasse die mit DB verbindet erstellen?

  Alt 21. Aug 2015, 19:32
Aber muss ich irgendwo
Zitat:
"TSQLiteDB.Create;"
und
Zitat:
"TSQLiteDB.Destroy;"
manuell in der Anwendung aufrufen?
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Klasse die mit DB verbindet erstellen?

  Alt 21. Aug 2015, 19:35
Ja oder in der Unit (initialization bzw. finalization)
Markus Kinzler
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Klasse die mit DB verbindet erstellen?

  Alt 21. Aug 2015, 19:44
Ja oder in der Unit (initialization bzw. finalization)
Hm... in der Unit von der Form1, oder in meiner unit myobj?

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  SQLiteDB.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  SQLiteDB.Destroy;
end;
Hier stürzt das Programm beim Schließen ab.
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Klasse die mit DB verbindet erstellen?

  Alt 21. Aug 2015, 19:48
In der Unit, in welcher Du die Klasse deklarierst.

Btw. warum kein Datenmodul?
Markus Kinzler
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Klasse die mit DB verbindet erstellen?

  Alt 21. Aug 2015, 20:20
In der Unit, in welcher Du die Klasse deklarierst.

Btw. warum kein Datenmodul?
Aber wie rufe ich es da auf bzw. wo? Da gibt's doch keine Methode dafür, und wenn ich dafür eine Procedure schreibe, was ruft wiederum diese Procedure auf? Was ist ein Datenmodul?
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!

Geändert von AlexII (21. Aug 2015 um 20:24 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Klasse die mit DB verbindet erstellen?

  Alt 21. Aug 2015, 20:28
Der initialization Abschnitt einer Unit wird beim Laden der Unit ( Einbinden in uses einer anderen Unit) automatisch aufgerufen und der finalization Abschnitt beim Entladen (Programmende).

Ein Datenmodul ist ein spezielels Formular für nicht sichtbare Komponenten.
Markus Kinzler
  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 21:46 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