Klassiker "Database not assigned!"

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

Klassiker "Database not assigned!"

Beitrag von din_iso »

Nachdem ich den Quelltext euren Hinweisen nach korrigiert hatte wollteich die Prozedur natürlich starten, leider bekam ich die altbekannte Meldung, mit den Grafischen Steuerelementen war das alles kein problem und nach setzen der Attribute baute er eine verbindung auf, allerdings in der unit funktioniert es leider nicht!

Ich hoffe irgendwer weiß Rat, ich glaube das ich den Fehler in diesem Leben nicht mehr finde!

Code: Alles auswählen

unit SQL_;
 
interface
 
uses
   Classes, SysUtils, mysql50conn, mysql51conn, sqldb;
var
   MySQLConnection1:TMySQL50Connection;
   SQLQuery1:TSQLQuery;
   SQLTransaction1:TSQLTransaction;
procedure Ausgelagert_1;
 
implementation
 
procedure Ausgelagert_1;
   begin
   MySQLConnection1:=TMySQL50Connection.create(MySQLConnection1);
   SQLQuery1:=TSQLQuery.create(SQLQuery1);
   SQLTransaction1:=TSQLTransaction.create(SQLTransaction1);
   SQLQuery1.Database:=MySQLConnection1;
   SQLQuery1.Transaction:=SQLTransaction1;
 
      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.
 

MmVisual
Beiträge: 1581
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: Klassiker "Database not assigned!"

Beitrag von MmVisual »

...TMySQL50Connection.Create(Nil);

sollte eigentlich gehen. Besser ist anstatt Nil ein Formular an zu geben, damit wird beim Schließen des Formulars (TForm) automatisch der Speicher richtig aufgeräumt.
PS: Ich nutze nur die ZEOS Komponenten, damit klappt das.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Soner
Beiträge: 725
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Klassiker "Database not assigned!"

Beitrag von Soner »

Ich glaube so wie du machst geht das nicht:
MySQLConnection1:=TMySQL50Connection.create(MySQLConnection1);
Programmierst du schon lange mit Pascal/Delphi oder ist das dein erstes Projekt?
Versuch mal so:

Code: Alles auswählen

 
procedure Ausgelagert_1;
begin
   MySQLConnection1:=TMySQL50Connection.create(nil);
   MySQLConnection1.HostName:='localhost';   //wenn MySql auf der gleichen Rechner läuft
   MySQLConnection1.UserName:='root';          //Es muß richtige Username sein, "root" ist standard wenn du nicht geändert hast
   MySQLConnection1.Password:='';                  //richtiges Passwort muß es sein, standard ist nichts
   MySQLConnection1.DataBaseName:='mysql' ;     //Es MUSS richtige Datenbankname sein, 'mysql' ist systemdatenbank, änder das mit deine Datenbankname
   MySQLConnection1.Connected:=true;
  try
   SQLTransaction1:=TSQLTransaction.create(nil);
   SQLTransaction1.DataBase:=MySQLConnection1;
   SQLTransaction1.Active:=true;
 
   SQLQuery1:=TSQLQuery.create(nil);
   SQLQuery1.DataBase:=MySQLConnection1;
   SQLQuery1.Transaction:=SQLTransaction1;
 
   if MySQLConnection1.Connected then begin
     SQLQuery1.SQL.Text:='SELECT * FROM user';   //Das musst du anpassen, diese Tabelle ist in "mysql"-Db vorhanden
     SQLQuery1.Open;
 
     if SQLQuery1.RecordCount>0 then             //Als Beispiel
      Writeln('== '+SQLQuery1.Fields[0].FieldName);  //...Spaltentitel ausgeben
 
     while not SQLQuery1.EOF do begin
       Writeln(SQLQuery1.Fields[0].AsString);   //.. 1.spaltenwerte ausgeben
       SQLQuery1.Next;
     end;
 
     SQLQuery1.Close;
   end;
 
  finally
    SQLQuery1.Free;
    SQLTransaction1.Free;
    MySQLConnection1.Free;
  end;
 
end;
 
Das funktioniert, ich hab"s getestet.

Antworten