Einzelnen Beitrag anzeigen

samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#8

AW: Zugriff auf MySQL ohne Komponenten mit Delphi XE2

  Alt 2. Okt 2011, 12:31
Die mysql-Funktionen arbeiten intern mit AnsiStrings bzw. UFT8Strings.
host, user, pass, db: PChar; deklariert aber Unicode-Strings.

Delphi-Quellcode:
var
   Form1: TForm1;
   _myCon: PMYSQL;
   host, user, pass, db: AnsiString;
   ErrorCode: Integer;
   MySQLRes: PMYSQL_RES;
   MySQLRow: PMYSQL_ROW;
   AffectedRows: Int64;
   Field: PMYSQL_FIELD;

//...

procedure connect;
var Datei: TextFile;
        MyString: Ansistring;
begin
    AssignFile(Datei, ExtractFilePath(Application.ExeName) + 'SQL.set');
    Reset(Datei);
    try
      ReadLn(Datei, MyString);
      host := copy(MyString, pos(':', MyString)+1, MaxInt);
      ReadLn(Datei, MyString);
      User := copy(MyString, pos(':', MyString)+1, MaxInt);
      ReadLn(Datei, MyString);
      Pass := copy(MyString, pos(':', MyString)+1, MaxInt);
      ReadLn(Datei, MyString);
      DB := copy(MyString, pos(':', MyString)+1, MaxInt);
    finally
      CloseFile(Datei);
    end;
   _myCon := mysql_init(nil);
   if _mycon=nil then
   begin
     showmessage('MySql-Verbindung konnte nicht initialisiert werden!');
     Exit;
   end;
  if mysql_real_connect(_mycon, PAnsiChar(host), PAnsiChar(user), PAnsiChar(pass),PAnsiChar(db), 3306, nil,0)=nil then
   begin
     showmessage('Die Verbindung konnte nicht hergestellt werden! Ursache:' + mysql_error(_mycon));
     exit;
  end;
end;
Tip 1: Seit einigen Jahren lädt die mysql.pas die DLL nicht mehr automatisch (per Compilerschalter kann dieses Verhalten jedoch geändert werden). Statt dessen sollte die DLL per libmysql_fast_load(nil) geladen werden.
Tip 2: Da der interne Aufbau des Records TMYSQL_FIELD von der verwendeten Version der LibMySql.dll abhängt, sollte man den direkten Zugriff auf dieses Record vermeiden und stattdessen die Funktionen "mysql_field_type", "mysql_field_flag", "mysql_field_length", "mysql_field_name", "mysql_field_tablename", "mysql_field_default" usw. benutzen. Diese Funktionen erlauben einen Zugriff auf die Feldparameter unabhängig von der beim Benutzer/Kunden installierten Version der LibMySql.dll.

Geändert von samso ( 2. Okt 2011 um 14:43 Uhr) Grund: length(MyString) ist unsinnig
  Mit Zitat antworten Zitat