AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi MySQL-API will nicht die 1.
Thema durchsuchen
Ansicht
Themen-Optionen

MySQL-API will nicht die 1.

Ein Thema von CalganX · begonnen am 18. Feb 2003 · letzter Beitrag vom 19. Feb 2003
Antwort Antwort
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#1

MySQL-API will nicht die 1.

  Alt 18. Feb 2003, 18:51
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
  _connecter.host := PChar(sDBHost); angehalten.
Ich nutze die MySQL-API, die auch beim MySQL-Server dabei ist. Hat jemand eine Idee/Lösung?

Chris
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#2
  Alt 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.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#3
  Alt 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
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#4
  Alt 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()?
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#5
  Alt 19. Feb 2003, 12:40
Am besten postest du mal ein Beispiel... Wäre besser, vielleicht verstehe ich dann, was ich machen soll...

Chris
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#6
  Alt 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.
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#7
  Alt 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.
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#8
  Alt 19. Feb 2003, 15:29
Zitat von Chakotay1308:
PS: @Chewie: Allerdings könnte ich immernoch ein Beispiel vertragen.
Ok, ich werd gleich eins raussuchen und dann hier posten. Ist wirklich nicht schwer
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#9
  Alt 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
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz