Delphi Can

Orjinalini görmek için tıklayınız: Mysql database bağlantısı
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Merhaba,

Bu zamana kadar db olarak sqlite kullandım. Fakat şimdi mecburen mysql kullanmak durumundayım. Nedeni ise birden fazla kullanıcı aynı anda aynı db bağlanacak. Localhosta bağlantıda sorun yok. Serverdeki ortak olan mysql db bağlantı kurmak için nasıl bir yol izlemeliyim?

Birde (EmbeddedArgs.Text) yerine (EmbeddedArgs.Add) kullanmak istiyorum kodlamayı daha iyi anlamak adına.

procedure TForm1.Button1Click(Sender: TObject);
begin
  With FDPhysMySQLDriverLink do
  begin
    Release;
    DriverID := 'MySQL';
    VendorLib := ExtractFilePath(Application.Exename) + 'libmysqld.dll';
    EmbeddedArgs.Add('--basedir=<C:\MySQL>');
    EmbeddedArgs.Add('--datadir=<C:\Server\MySQL>');
    EmbeddedArgs.Add('--skip-innodb');

    EmbeddedArgs.Text := '' + '--basedir=' +
      ExtractFilePath(Application.Exename) + ';' + '--datadir=' +
      ExtractFilePath(Application.Exename) + '\LIST;' + '--language=' +
      ExtractFilePath(Application.Exename) + ';' + '--skip-innodb;' +
      '--skip-networking;';
  end;
  begin
    FDConnection.Connected := False;
    FDConnection.LoginPrompt := False;
    FDConnection.Params.Clear;
    FDConnection.Params.Values['DriverID'] := 'MySQL';
    FDConnection.Params.Values['CharacterSet'] := 'utf8';
    FDConnection.Params.Values['Database'] := 'PGDB';
    FDConnection.Connected := True;

    UserFDQuery.Active := False;
    UserFDQuery.Connection := FDConnection;
    UserFDQuery.Close;
    UserFDQuery.SQL.Clear;
    UserFDQuery.SQL.Add('Select * From USERS');
    UserFDQuery.Prepared := True;
    UserFDQuery.Open;
    if Not UserFDQuery.IsEmpty then
    begin
      ComboBoxUser.Items.Clear;
      while Not UserFDQuery.Eof do
      begin
        ComboUser.Items.Add(UserFDQuery.FieldByName('USNAME').AsString);
        Next;
      end;
Serverınızda mysql 3306 portu açık olmalı FDConnection.server:='ip adresiniz' //fdconnectionda böylemi bilmiyorum unidac'ın uniconnection nesnesinde bu şekilde


örnek kendi kullandığım yöntem


procedure TfrmMain.FormCreate(Sender: TObject);
var
inidosya : TMemIniFile;
begin

{$region 'MYSQL 1 INI FILE UPDATE'}
if not FileExists(ExtractFilePath(ParamStr(0))+ 'MYSQL-1.ini') then
begin
inidosya := TMemIniFile.Create(ExtractFilePath(ParamStr(0)) + 'MYSQL-1.ini', TEncoding.UTF8);

mysqlOneServer:='127.0.0.1';
mysqlOneDatabase:='DATABASE';
mysqlOneUserName:='USERNAME';
mysqlOnePassword:='PASSWORD';
mysqlOnePort:=3306;
mysqlOneCharSet:='utf8';
mysqlOneUseUnicode:=True;


 try
  Inidosya.WriteString ('setings','SERVER',      mysqlOneServer);
  Inidosya.WriteString ('setings','DATABASE',    mysqlOneDatabase);
  Inidosya.WriteString ('setings','USERNAME',    mysqlOneUserName);
  Inidosya.WriteString ('setings','PASSWORD',    mysqlOnePassword);
  Inidosya.WriteInteger('setings','PORT',        mysqlOnePort);
  Inidosya.WriteString ('setings','CHARSET',     mysqlOneCharSet);
  inidosya.WriteBool   ('setings','USEUNICODE',  mysqlOneUseUnicode);
  inidosya.UpdateFile;

 finally
  inidosya.Free;

 end;



end
else
begin



 inidosya := TMemIniFile.Create(ExtractFilePath(ParamStr(0)) + 'MYSQL-1.ini', TEncoding.UTF8);
   try


    mysqlOneServer:=     Inidosya.ReadString('setings', 'SERVER', '127.0.0.1');
    mysqlOneDatabase:=   Inidosya.ReadString('setings', 'DATABASE', '');
    mysqlOneUserName:=   Inidosya.ReadString('setings','USERNAME', 'SYSDBA');
    mysqlOnePassword:=   Inidosya.ReadString('setings','PASSWORD', 'masterkey');
    mysqlOnePort:=       Inidosya.ReadInteger('setings','PORT',3306);
    mysqlOneCharSet:=    Inidosya.ReadString('setings','CHARSET', 'utf8');
    mysqlOneUseUnicode:= inidosya.ReadBool('setings','USEUNICODE',True);


   finally
    FreeAndNil(inidosya);
   end;


end;



{$endregion}



procedure TfrmMain.MysqlOneConnect;
begin
conMysql.Disconnect;
conMysql.Server:=mysqlOneServer;
conMysql.Database:=mysqlOneDatabase;
conMysql.Username:=mysqlOneUserName;
conMysql.Password:=mysqlOnePassword;
conMysql.Port:=mysqlOnePort;
conMysql.SpecificOptions.Values['Charset']:=mysqlOneCharSet;
if mysqlOneUseUnicode then
conMysql.SpecificOptions.Values['UseUnicode']:='True'
else
conMysql.SpecificOptions.Values['UseUnicode']:='False';
conMysql.Connect;
end;
(30-03-2018, Saat: 04:04)masteryoda Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Serverınızda mysql 3306 portu açık olmalı FDConnection.server:='ip adresiniz' //fdconnectionda böylemi bilmiyorum unidac'ın uniconnection nesnesinde bu şekilde


örnek kendi kullandığım yöntem


procedure TfrmMain.FormCreate(Sender: TObject);
var
inidosya : TMemIniFile;
begin

{$region 'MYSQL 1 INI FILE UPDATE'}
if not FileExists(ExtractFilePath(ParamStr(0))+ 'MYSQL-1.ini') then
begin
inidosya := TMemIniFile.Create(ExtractFilePath(ParamStr(0)) + 'MYSQL-1.ini', TEncoding.UTF8);

mysqlOneServer:='127.0.0.1';
mysqlOneDatabase:='DATABASE';
mysqlOneUserName:='USERNAME';
mysqlOnePassword:='PASSWORD';
mysqlOnePort:=3306;
mysqlOneCharSet:='utf8';
mysqlOneUseUnicode:=True;


 try
  Inidosya.WriteString ('setings','SERVER',      mysqlOneServer);
  Inidosya.WriteString ('setings','DATABASE',    mysqlOneDatabase);
  Inidosya.WriteString ('setings','USERNAME',    mysqlOneUserName);
  Inidosya.WriteString ('setings','PASSWORD',    mysqlOnePassword);
  Inidosya.WriteInteger('setings','PORT',        mysqlOnePort);
  Inidosya.WriteString ('setings','CHARSET',     mysqlOneCharSet);
  inidosya.WriteBool   ('setings','USEUNICODE',  mysqlOneUseUnicode);
  inidosya.UpdateFile;

 finally
  inidosya.Free;

 end;



end
else
begin



 inidosya := TMemIniFile.Create(ExtractFilePath(ParamStr(0)) + 'MYSQL-1.ini', TEncoding.UTF8);
   try


    mysqlOneServer:=     Inidosya.ReadString('setings', 'SERVER', '127.0.0.1');
    mysqlOneDatabase:=   Inidosya.ReadString('setings', 'DATABASE', '');
    mysqlOneUserName:=   Inidosya.ReadString('setings','USERNAME', 'SYSDBA');
    mysqlOnePassword:=   Inidosya.ReadString('setings','PASSWORD', 'masterkey');
    mysqlOnePort:=       Inidosya.ReadInteger('setings','PORT',3306);
    mysqlOneCharSet:=    Inidosya.ReadString('setings','CHARSET', 'utf8');
    mysqlOneUseUnicode:= inidosya.ReadBool('setings','USEUNICODE',True);


   finally
    FreeAndNil(inidosya);
   end;


end;



{$endregion}



procedure TfrmMain.MysqlOneConnect;
begin
conMysql.Disconnect;
conMysql.Server:=mysqlOneServer;
conMysql.Database:=mysqlOneDatabase;
conMysql.Username:=mysqlOneUserName;
conMysql.Password:=mysqlOnePassword;
conMysql.Port:=mysqlOnePort;
conMysql.SpecificOptions.Values['Charset']:=mysqlOneCharSet;
if mysqlOneUseUnicode then
conMysql.SpecificOptions.Values['UseUnicode']:='True'
else
conMysql.SpecificOptions.Values['UseUnicode']:='False';
conMysql.Connect;
end;

Soruma cevap ol masada vakit ayırdığınız için teşekkür ederim.
with FDPhysMySQLDriverLink do begin
       DriverID  := 'MySQL';
       VendorLib := 'libmysql.dll';
     end;

     
     with FDConnection do begin
       DriverName  := 'MySQL';
       LoginPrompt := false;
       Params.DriverID := 'MySQL';
       Params.UserName := 'root';
       Params.Password := '';
       Params.Add('Server=localhost');
       Params.Add('Port=3306');
       Connected := true;                            
     end;
   except
     on E:Exception do
       Connect := E.Message;
   end;