Einzelnen Beitrag anzeigen

malibubu

Registriert seit: 8. Okt 2004
4 Beiträge
 
#1

Schwerer Fehler mit libmysql.dll

  Alt 8. Okt 2004, 16:16
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.
  Mit Zitat antworten Zitat