Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi MySQL-API will nicht die 1. (https://www.delphipraxis.net/3022-mysql-api-will-nicht-die-1-a.html)

CalganX 18. Feb 2003 18:51


MySQL-API will nicht die 1.
 
Hi,
folgender Source:
Delphi-Quellcode:
var
  _Query: String;
  _connecter: PMYSQL;
begin
  _connecter.host := PChar(sDBHost);
  _connecter.user := PChar(sDBUser);
  _connecter.passwd := PChar(sDBPass);
  _connecter := mysql_connect(_connecter, PChar(sDBHost), PChar(sDBUser), PChar(sDBPass));

  mysql_select_db(_connecter, 'chrishde');
  _Query := 'SELECT * FROM members WHERE charUsername LIKE '''+LabeledEdit1.Text+''' AND charPassword LIKE '''+LabeledEdit2.Text+''';';
  if mysql_query(_connecter, @_Query[1]) <> 0 then begin
    MessageDlg('Fehler beim senden einer MySQL-Abfrage', mtError, [mbOK], 0);
    Exit;
  end;
  if mysql_num_rows(mysql_store_result(_connecter)) = 1 then
    ShowMessage('Right!');

  mysql_close(_connecter);
end;
Wenn ich jetzt aber compiliere, dann läuft das, aber wenn ich auf den Button klicke, dann kommt eine AV und das Programm wird an der Zeile
Delphi-Quellcode:
  _connecter.host := PChar(sDBHost);
angehalten.
Ich nutze die MySQL-API, die auch beim MySQL-Server dabei ist. Hat jemand eine Idee/Lösung?

Chris

Chewie 18. Feb 2003 19:04

Ich benutze immer die mysql_real_xxx - Funktionen. Dann rufe ich vorher die Funktion mysql_init() auf, um die Zugriffskennung zu initialisieren.
Laut Doku ist mysql_connect() ja veraltet.

CalganX 18. Feb 2003 19:10

Hm... habe das ganze mal geändert:
Delphi-Quellcode:
procedure TMainFrm.dxButton1Click(Sender: TObject);
var
  _Query: String;
  _connecter: PMYSQL;
begin
  _connecter.host := PChar(sDBHost);
  _connecter.user := PChar(sDBUser);
  _connecter.passwd := PChar(sDBPass);
  mysql_init(_connecter);

  mysql_select_db(_connecter, 'chrishde');
  _Query := 'SELECT * FROM members WHERE charUsername LIKE '''+LabeledEdit1.Text+''' AND charPassword LIKE '''+LabeledEdit2.Text+''';';
  if mysql_real_query(_connecter, PChar(_Query), 1024) <> 0 then begin
    MessageDlg('Fehler beim senden einer MySQL-Abfrage', mtError, [mbOK], 0);
    Exit;
  end;
  if mysql_num_rows(mysql_store_result(_connecter)) = 1 then
    ShowMessage('Right!');

  mysql_close(_connecter);
end;
Allerdings wird das Programm mit einer einfachen AV gestoppt. Allerdings wird keine Zeile makiert. Hast du da noch eine Idee?

Chris

Chewie 18. Feb 2003 19:16

Öhm, 1. muss der Aufruf mysql_init() vor den Zuweisungen an _connecter erfolgen und 2. Wo ist dein mysql_connect() bzw. mysql_real_connect()?

CalganX 19. Feb 2003 12:40

Am besten postest du mal ein Beispiel... Wäre besser, vielleicht verstehe ich dann, was ich machen soll...

Chris

CalganX 19. Feb 2003 13:35

Dazu bin ich jetzt auch noch ratlos: denn ich habe gerade das Beispielprojekt heruntergeladen, allerdings passiert genau das gleiche: Beim Verbinden mit dem MySQL-Server gibt's 'ne saftige AccessViolation!
Welche Version nutzt du, Chewie? Funktioniert bei dir alles problemlos?

Chris

PS: Beispiel trotzdem erwünscht. ;)

CalganX 19. Feb 2003 14:45

Problem gelöst!
So, denn die Version, die ich genutzt habe von libmySQL.dll hat nicht funktioniert. Nachdem ich dann die DLL aus meinem MySQL-Verzeichnis kopiert habe, ging es dann. Na dann ma los an die Arbeit. ;)

Chris

PS: @Chewie: Allerdings könnte ich immernoch ein Beispiel vertragen. :roll:

Chewie 19. Feb 2003 15:29

Zitat:

Zitat von Chakotay1308
PS: @Chewie: Allerdings könnte ich immernoch ein Beispiel vertragen. :roll:

Ok, ich werd gleich eins raussuchen und dann hier posten. Ist wirklich nicht schwer :wink:

Chewie 19. Feb 2003 16:31

So, mit frisch geduschtem und klaren Kopf gehts los:

Delphi-Quellcode:
var
  _connector: PMySQL;
  sqlresult: PMySQL_Res;
  sqlrow: PMySQL_Row;
  Host, Login, Password, Query: PChar;
begin
  //Parameter festlegen
  Host := 'localhost';
  Login := 'root';
  Password := nil;

  //Zugangskennung initialisieren
  _connector := mysql_init(nil);
 
  //Verbindung herstellen
  _connector := mysql_real_connect(_connector,Host,Login,Password,nil,3306,nil,0); if _connector = nil then
  begin
    WriteLn('Die Verbindung ist fehlgeschlagen');
    Exit;
  end;
 
  //aktuelles Datum abrufen
  Query := 'SELECT DAYOFMONTH(NOW()),MONTH(NOW()),YEAR(NOW())';
  mysql_real_query(_connector,Query,Length(Query));
  sqlresult := mysql_store_result(_connector);
  sqlrow := mysql_fetch_row(sqlresult);
  WriteLn('Tag',sqlrow[0]);
  WriteLn('Monat',sqlrow[1]);
  WriteLn('Jahr',sqlrow[2]);
 
  //Ergebniskennung freigeben und Verbindung schließen
  mysql_free_result(sqlresult);
  mysql_close(_connector);
end.
Ich habs jetzt nicht getestet, aber so sollte es gehen.
Ach ja, das hier muss in einem Konsolenprogramm stehen.

Edit: OK, zwei kleinere Fehler waren drin :oops:


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz