MYSQL Verbindung in Unit hestellen

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
din_iso
Beiträge: 10
Registriert: Sa 11. Mai 2013, 14:09

MYSQL Verbindung in Unit hestellen

Beitrag von din_iso »

Hallo Forum,

ich komme selber eher aus dem bereich Java, spiele mommentan was mit FP rum, da habe ich mir ein paar Programme zusammengefrickelt(Als was anderes kann man das noch nich bezeichnen, aber wir lernen ja noch :D ). Die Sache ist Diese, Formgebunden platziert man nur die Steuerelemente und dann das bisschen Programmtext. Aber wie geht das in einer unit, kann ich da irgendwie nen DB Objekt erstellen oder so? Ich zeig euch mal was ich versucht habe und Ihr rückt mich zurecht:

Code: Alles auswählen

 
 
unit SQL_;
 
interface
 
uses
  Classes, SysUtils, mysql50conn, mysql51conn, sqldb;
type
  MySQLConnection1=TMySQL50Connection;
  SQLQuery1=TSQLQuery;
  SQLTransaction1=TSQLTransaction;
procedure Ausgelagert_1;
 
implementation
 
procedure Ausgelagert_1;
   begin
     try
    if MySQLConnection1.Connected then MySQLConnection1.Close;
    MySQLConnection1.HostName:='192.168.178.45';
    MySQLConnection1.UserName:='...';
    MySQLConnection1.Password:='....';
    MySQLConnection1.DataBaseName:='...';
    if MySQLConnection1.Connected then MySQLConnection1.Connected := false;
    MySQLConnection1.Connected := true;
    MySQLConnection1.Open;
    if MySQLConnection1.Connected then
    begin
       SQLQuery1.SQL.Text:='SELECT ...;';
       SQLQuery1.Open;
       while not SQLQuery1.EOF do
       begin
          SQLQuery1.Next;
       end;
      SQLQuery1.Close;
    end;
  except
    // GEHT NICH
  end;
   end;
 
end.
 
 
 

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: MYSQL Verbindung in Unit hestellen

Beitrag von MAC »

sieht doch schonmal ganz gut aus,
du willst aber nicht eine typezuwesung machen: MySQLConnection1=TMySQL50Connection;
Was bedeutet das du die Klasse TMySQL50Connection auch MySQL50Connection nennen kannst, sondern uch geh mal davon aus das du eine Instanz davon TMySQL50Connection in MySQL50Connection speichern willst.

Dafür brauchen wir die Notwendigen Variablen sowie die Create Aufrufe. Das könnte man alles schön in eine Klasse verpacken, aber ich mach es mal mit Globalen Variablen...

Code: Alles auswählen

    unit SQL_;
 
    interface
 
    uses
      Classes, SysUtils, mysql50conn, mysql51conn, sqldb;
    var // hier
      MySQLConnection1:TMySQL50Connection; // hier
      SQLQuery1:TSQLQuery; // hier
      SQLTransaction1:TSQLTransaction; // hier
    procedure Ausgelagert_1;
 
    implementation
 
    procedure Ausgelagert_1;
       begin
       MySQLConnection1:=TMySQL50Connection.create(); // und hier
       SQLQuery1:TSQLQuery.create(); // und hier
       SQLTransaction1:TSQLTransaction.create(); // und hier
         try
 
        if MySQLConnection1.Connected then MySQLConnection1.Close;
        MySQLConnection1.HostName:='192.168.178.45';
        MySQLConnection1.UserName:='...';
        MySQLConnection1.Password:='....';
        MySQLConnection1.DataBaseName:='...';
        if MySQLConnection1.Connected then MySQLConnection1.Connected := false;
        MySQLConnection1.Connected := true;
        MySQLConnection1.Open;
        if MySQLConnection1.Connected then
        begin
           SQLQuery1.SQL.Text:='SELECT ...;';
           SQLQuery1.Open;
           while not SQLQuery1.EOF do
           begin
              SQLQuery1.Next;
           end;
          SQLQuery1.Close;
        end;
      except
        // GEHT NICH
      end;
       end;
 
    end.
 
 

Code: Alles auswählen

Signatur := nil;

din_iso
Beiträge: 10
Registriert: Sa 11. Mai 2013, 14:09

Re: MYSQL Verbindung in Unit hestellen

Beitrag von din_iso »

Du hast mir schon sehr weitergeholfen, jetzt lässt sich der Programmtext kompilieren, wenn ich die prozedur allerdings aufrufe bekomme ich folgende Meldung zu folgendembefehl:

MySQLConnection1:=TMySQL50Connection.create(); -->sql_stellebereit_teile.pas(17,51) Error: Wrong number of parameters specified for call to "Create"

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:

Re: MYSQL Verbindung in Unit hestellen

Beitrag von Christian »

Da an Zeile 17 des Codes "hier Exception auslösen" steht brauchst du dich ja nicht zu wundern...
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

din_iso
Beiträge: 10
Registriert: Sa 11. Mai 2013, 14:09

Re: MYSQL Verbindung in Unit hestellen

Beitrag von din_iso »

Christian hat geschrieben:Da an Zeile 17 des Codes "hier Exception auslösen" steht brauchst du dich ja nicht zu wundern...


Ja haha du bis ein ganz schlauer, is wie bei Java so muss das:

MySQLConnection1:=TMySQL50Connection.create(MySQLConnection1);
SQLQuery1:=TSQLQuery.create(SQLQuery1);
SQLTransaction1:=TSQLTransaction.create(SQLTransaction1);

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: MYSQL Verbindung in Unit hestellen

Beitrag von gocher »

Ich nutze zwar andere Datenbankkomponenten, allerdings sollte es auch in diesem Fall so sein, das der Owner/Sender übergeben werden muss, den hast du nicht also nimmst du einfach nil!

Code: Alles auswählen

MySQLConnection1:=TMySQL50Connection.create(nil);
SQLQuery1:=TSQLQuery.create(nil);
SQLTransaction1:=TSQLTransaction.create(nil);
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

Antworten