Hallo zusammen,
ich habe mir ein kleiner Programm geschrieben, mit dem ich von einen
MySQL-Server einen Datensatz auslesen möchte.
Dazu benutze ich die wohl bekannte "
mysql.pas". Die "libmysql.dll" ist auch Im System32-Verzeichnis.
Hier erstmal der Quellcode um zu vermeiden, dass ich einen Programmierfehler gemacht habe:
Delphi-Quellcode:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,
mySQL, StdCtrls;
type
TForm1 =
class(TForm)
Label1: TLabel;
procedure FormCreate(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
_myCon: PMySQL;
host, user, pass,
db: PChar;
_mySubRes: PMySQL_Res;
_mySubRow: PMySQL_Row;
posts, userna:
string;
query: PChar;
begin
host := '
MEIN_SERVER';
user := '
DATENBANK';
pass := '
PASSWORT';
db := '
ftpserver';
userna := '
test';
_myCon := mysql_init(
nil);
if _myCon =
nil then
begin
ShowMessage('
Fehler beim Verbindungsaufbau.');
mysql_close(_myCon);
Exit;
end;
if mysql_real_connect(_myCon, host, user, pass,
db, 3306,
nil, 0) =
nil then
begin
ShowMessage('
Fehler beim Verbindungsaufbau.');
mysql_close(_myCon);
Exit;
end;
mysql_select_db(_myCon,
db);
query := PChar('
SELECT name FROM users WHERE name=' + userna);
mysql_real_query(_myCon,
query, Length(
query));
_mySubRes := mysql_store_result(_myCon);
_mySubRow := mysql_fetch_row(_mySubRes);
posts := _mySubRow[1];
mysql_free_result(_mySubRes);
Label1.Caption := posts;
mysql_close(_myCon);
end;
end.
So, lasse ich das Programm so laufen, bekomme ich gleich folgende Fehlermeldung:
"Im Prejekt Projekt1 ist eine
Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 10006C36 in Modul 'libmysql.dll''. Lesen von Adresse 00000014. Prozess wurde Angehalten...."
Um zu schauen, wo der Fehler liegt, habe ich noch folgenden Code eingesetzt (vor _mySubRow := mysql_fetch_row(_mySubRes); ) :
Delphi-Quellcode:
if _mySubRes = nil then
begin
ShowMessage('Nicht gefunden');
mysql_close(_myCon);
Exit;
end;
Dann macht es keine Probleme, also scheint es wohl an _mySubRow := mysql_fetch_row(_mySubRes); zu liegen.
Das Lustige ist, dass der Datensatz mit 1er Stelle "test" jedoch besteht...
Hat jemand eine Lösung? Danke im Voraus.