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.