Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi MySql Connection (https://www.delphipraxis.net/147020-mysql-connection.html)

ghost007 31. Jan 2010 12:05


MySql Connection
 
Liste der Anhänge anzeigen (Anzahl: 1)
Servus, ich hab heute versucht eine connection mit einem mysql server herzustellen. Hierfür verwende ich die mysqllib.dll, kekapselt durch eine mysql.pas

Mein code schaut wie folgt aus:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, mysql, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  _myCon: PMySQL;      //unseren Verbindungsdeskriptor
  host, user, pass, db: PAnsiChar;      //die Anmeldedaten
begin
  //wir werden uns als Root-Benutzer in localhost einloggen, ohne eine
  //bestimmte Datenbank auszuwählen
  host := 'XX.XXX.XX.XX';
  user := 'root';
  pass := '';
  db := '697_datenbank';

  //jetzt wird _myCon initialisiert
  _myCon := mysql_init(nil);
  if _myCon = nil then
  begin
    ShowMessage('Nicht genug freier Speicher, um Verbindungsdeskriptor zu initialisieren');
    Exit;
  end;

  //anschließend wird die Verbindung hergestellt
  if mysql_real_connect(_myCon, host, user, pass, db, 3306, nil, 0) = nil then //HIER
  begin
    ShowMessage('Die Verbindung konnte nicht hergestellt werden. Ursache: ' + mysql_error(_myCon));
    Exit;
  end;

  ShowMessage('Verbindung hergestellt');

  //zum Schluss wird die Verbindung wieder geschlossen
  mysql_close(_myCon);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  libmysql_fast_load(nil);
end;

end.
In der markierten zeile bleibt er immer hängen, was mach ich falsch ? Ich benutzte Delphi 2009, falls das irgendwas mit der zeichenencodierung zu tun hat.

MfG - Ghost007

[edit=mkinzler]Code-Tag durch Delphi-Tag ersetzt Mfg, mkinzler[/edit]

Die Muhkuh 31. Jan 2010 12:10

Re: MySql Connection
 
Hi,

was heißt bleibt hängen? Geht's einfach nicht weiter? Kommt eine Fehlermeldung?

Edith: Wo liegt der Server? Hast Du exklusiven Zugriff auf diese Datenbank?

ghost007 31. Jan 2010 12:16

Re: MySql Connection
 
Zitat:

Zitat von Die Muhkuh
Hi,

was heißt bleibt hängen? Geht's einfach nicht weiter? Kommt eine Fehlermeldung?

Edith: Wo liegt der Server? Hast Du exklusiven Zugriff auf diese Datenbank?

Also, das programm freezt einfach. Und im weiteren verlauf kommt dann die im code festgelegte fehlermeldung "Die Verbindung konnte nicht hergestellt werden. Ursache: Can't connect to MySQL on 'XX.XXX.XX.XX' (10060)".

Der server gehört zu meinem webspace und liegt irgendwo im internet. Zugriff sollte ich von daher eigentlich schon exklusiven haben, so wie ich das sehe.

MfG - Ghost007

fishbrain 31. Jan 2010 12:27

Re: MySql Connection
 
Das kommt immer drauf an wer deinen Webspace hostet.
Bei manchen hast du Zugriff, bei anderen nicht. Frag mal nach bei deinem Hoster.

ghost007 31. Jan 2010 12:29

Re: MySql Connection
 
Zitat:

Zitat von fishbrain
Das kommt immer drauf an wer deinen Webspace hostet.
Bei manchen hast du Zugriff, bei anderen nicht. Frag mal nach bei deinem Hoster.

Naja, da die mysql db auf nem anderen server liegt, als meine php scripte, die auch dahin connecten, sollte es doch gehen oder?

MfG - Ghost007

//Edit: Okay, hab jetzt kurzerhand einfach einen lokalen server aufgesetzt. Jetzt meint er "Client does not support authentication protocol requested by server; consider upgrading mysql client.

Exterior 2. Feb 2010 16:13

Re: MySql Connection
 
Nur wenige Hoster erlauben den externen DB-Zugriff von einem Privat-PC aus.

Dass deine MySQL-Datenbank und deine Scripte auf unterschiedlichen Servern liegen, hat damit nichts zu tun.
Damit du extern auf eine MySQL-DB zugreifen kannst, muss dein Hoster auf dem Server den Port 3306 öffnen. In deinem Fall (PHP-Scripte und DB auf getrennten Servern) wird dieser Port zwar offen sein, allerdings wird der Zugriff auf bestimmte statische IPs beschränkt sein, das heißt, dein Hoster hat einige IPs angegeben, die extern auf die DB zugreifen dürfen. Und deine vermutlich dynamische IP gehört da wohl nicht dazu.

Frag also einfach mal bei deinem Hoster nach, ob es möglich ist, von dynamischen IPs aus auf die MySQL-DB zu connecten, denn niemand sonst wird dir das sagen können. Und wenn nicht - dann hast du ein Problem, daran kann man dann wenig ändern.

shmia 2. Feb 2010 17:32

Re: MySql Connection
 
Ob du Zugriff auf deinen Server hast lässt sich ganz leicht mit telnet testen.
Eingabeaufforderung öffnen und dann:
Code:
C:\> telenet x.x.x.x 3306
Verbindungsaufbau zu x.x.x.x...Es konnte keine Verbindung mit dem Host hergestel
lt werden, auf Port 3306: Verbinden fehlgeschlagen
Also entweder erscheint diese Meldung "Verbinden fehlgeschlagen" oder es erscheint ein schwarzer Bildschirm, dann konnte die Verbindung hergestellt werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:55 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