MySql database local bağlantısı

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
PROGRAMADOR
Üye
Mesajlar: 239
Kayıt: 04 Oca 2008 01:53
Konum: Karşıyaka/İzmir

Re: MySql database local bağlantısı

Mesaj gönderen PROGRAMADOR »

Kod: Tümünü seç

  FDConnection1.Params.Add('Database=...');
  FDConnection1.Params.Add('User_Name=root');
  FDConnection1.Params.Add('Password=...');
  FDConnection1.Params.Add('CharacterSet=utf8');
  FDConnection1.Params.Add('DriverID=MySQL');
demeniz yeterli.
In dubio pro reo...
Şüpheden sanık/özgürlük yararlanır...
PROGRAMADOR
Üye
Mesajlar: 239
Kayıt: 04 Oca 2008 01:53
Konum: Karşıyaka/İzmir

Re: MySql database local bağlantısı

Mesaj gönderen PROGRAMADOR »

Sayın Muharrem Arman,

İlgilinize öncelikle teşekkür ederim. Verdiğiniz kodları derlediğimde şöyle bir hata alıyorum:
"Project Venus.exe raised exception class EMySQLNAtiveException with message '[FireDAC[Phys][MySQL] Access denied for user 'ODBC'@'localhost' (using password: NO)'."

Yardımlarınız için şimdiden teşekkürler.
In dubio pro reo...
Şüpheden sanık/özgürlük yararlanır...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: MySql database local bağlantısı

Mesaj gönderen mrmarman »

(1) Linkini verdiğim proje paketinde bir EXE dosya var, önce oradan başlayalım. Sorunsuz çalışıyor mu ?
(2) Daha sonra projeyi kullanmakta olduğunuz Delphi sürümü hangisi ise onunla derleyince sonuç nedir ?
(3) Ayrıca projenizin adından yola çıkarak, "VENUS" isminde yeni bir proje oluşturmuş ve orada örnekte olmayan eksik veya farklı bir şeyler yaptığınız kanısına varmamak istiyorum ama elimde değil sormadan edemiyorum. :idea:
(4) Kaynak kod vererek sorunuzu detaylandırın ki yorumlama fırsatımız olsun.

- Login hatası olduğuna göre Embedded DLL ile normal sunucuya bağlanmaya çalışıyor olmalısın diycem ama yanılıyor da olabilirim. Şu linke göz atmalısın.

Diyor ki ...
Embarcadero'dan verdiğim bu linkte şöyle yazdı:To connect to the MySQL Embedded server, you do not need to specify Server, Host, Port, User_Name, Password connection definition parameters. If you do not specify the --skip-networking argument, then using libmysqld.dll you can connect to the remote MySQL servers, the same as with normal libmysql.dll.
Resim
Resim ....Resim
PROGRAMADOR
Üye
Mesajlar: 239
Kayıt: 04 Oca 2008 01:53
Konum: Karşıyaka/İzmir

Re: MySql database local bağlantısı

Mesaj gönderen PROGRAMADOR »

Merhaba,

Projeyi Delphi XE6 ile 64 bit olarak derliyorum. Ayrıca Embarcadero'daki tüm yazıları da okumuştum. Mysql'i client olarak değil de server olarak kullanacağım için libmysqld.dll'yi (x64 dll'sini) kullanıyorum.

Kodlarım şöyle:

Kod: Tümünü seç

unit uSplash;

interface

{$IF CompilerVersion >= 21.0}
  {$WEAKLINKRTTI ON}
  {$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}
{$ENDIF}

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Data.FMTBcd, Data.DB,
  Data.SqlExpr, FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Error,
  FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def, FireDAC.Stan.Pool,
  FireDAC.Stan.Async, FireDAC.Phys, FireDAC.VCLUI.Wait, FireDAC.Stan.Param,
  FireDAC.DatS, FireDAC.DApt.Intf, FireDAC.DApt, FireDAC.Comp.DataSet,
  FireDAC.Comp.Client, FireDAC.Comp.UI, FireDAC.Phys.IBBase, FireDAC.Phys.FB,
  IBX.IBCustomDataSet, IBX.IBTable, IBX.IBDatabase, FireDAC.Comp.ScriptCommands,
  FireDAC.Stan.Util, FireDAC.Comp.Script, FireDAC.Phys.MySQL;

type
  TfrmSpash = class(TForm)
    Panel1: TPanel;
    Timer1: TTimer;
    FDConnection1: TFDConnection;
    FDQuery1: TFDQuery;
    FDGUIxWaitCursor1: TFDGUIxWaitCursor;
    FDPhysMySQLDriverLink1: TFDPhysMySQLDriverLink;
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
    FStartTicks: integer;
    FOKToClose: boolean;
  public
    { Public declarations }
    property OKToClose: boolean read FOKToClose write FOKToClose;
  end;

var
  frmSpash: TfrmSpash;

implementation

{$R *.dfm}

uses
uConsts,uServerMain,uDiskIO;

procedure TfrmSpash.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;

procedure TfrmSpash.FormCreate(Sender: TObject);
var
  foldername:widestring;
begin
  App_path:=ExtractFilePath(Application.ExeName);
  if (App_path[Length(App_path)] = '\') then
  begin
  Delete(App_path, Length(App_path), 1);
  end;
  //ShowMessage(app_path);
  BorderStyle:=bsNone;
  Position:=poScreenCenter;
  //FormStyle:=fsStayOnTop;
  Panel1.Align:=alClient;
  FStartTicks := GetTickCount;

  //data klasörü yoksa oluştur
  //gerekli klasörleri oluştur.
  if not CanCreateRequieredFolders then begin //gerekli klasörleri oluştur
    Showmessage('Folder creating error!');
    Halt;  //programı kapat
  end;
  //klasörler oluşturuldu ya da zaten vardı...

  //db yoksa oluştur
  if DirectoryExists(app_path+DataFolder+'\'+VnDatabaseName) then  //db dosyası varsa
  begin
    //db bulundu
  end else begin //db dosyası yoksa
      //klasör oluştur
        //data içindekiler
      SetCurrentDirectory(pwidechar(App_path+'\'+DataFolder));
      //logs
      foldername:=app_path+'\'+DataFolder+'\'+VnDatabaseName;
      if not DirectoryExists(foldername) then begin
         if not CreateDir(VnDatabaseName) then begin
            //Result:=false;
            exit;
         end;
      end;
      //dbyi oluştur MySql
      //FDConnection1.Close;
      with FDPhysMySQLDriverLink1 do begin
        //Release;
        DriverID:='MySQL';
        VendorLib:=App_path+'\libmysqld.dll';
        EmbeddedArgs.Add('--basedir='+App_path+';');
        //EmbeddedArgs.Add('--datadir='+App_path+'\'+DataFolder+';');
        //EmbeddedArgs.Add('--language='+App_path+';');
        EmbeddedArgs.Add('--datadir=./'+DataFolder);
        //EmbeddedArgs.Add('--language=./');
        EmbeddedArgs.Add('--skip-innodb;');
        //EmbeddedArgs.Add('--innodb_data_home_dir='+App_path+'\'+DataFolder+';');
        EmbeddedArgs.Add('--skip-networking;');
      end;
      with FDConnection1 do begin
        //Connected:=false;
        LoginPrompt := False;
        Params.Clear;
        Params.Values['DriverID']     := 'MySQL';
        //Params.Values['User_Name']    := 'comp';
        //Params.Values['Password']     := 'myvenus';
        //Params.Values['CharacterSet'] := 'UTF8';;
        //Params.Values['Database']     := VnDatabaseName;
        Connected     := True;
      end;



      With FDQuery1 do
      begin
        Active     := False;
        Connection := FDConnection1;
        SQL.Clear;
        SQL.Add( 'CREATE TABLE IF NOT EXISTS KullaniciTablosu ( ' );
        SQL.Add( 'id INT NOT NULL AUTO_INCREMENT PRIMARY KEY' );
        SQL.Add( ', Kullanici_Adi    VARCHAR(100) ' );
        SQL.Add( ', Kullanici_ePosta VARCHAR(100) ' );
        SQL.Add( ' )' );
        SQL.Add( 'CHARACTER SET latin5 COLLATE latin5_turkish_ci;');
        ExecSQL;

        SQL.Clear;
        SQL.Add( 'SELECT * FROM KullaniciTablosu' );
        Active := True;
      end;

    {
      with FDPhysFBDriverLink1 do begin
        Release;
        VendorLib:=App_path+'\fbembed.dll';
        DriverID:='FB';
      end;
      with FDConnection1 do begin
        Params.Clear;
        Params.Add('DriverID=FB');
        Params.Add('Database='+App_path+DBPath);
        //Params.Add('Protocol=TCPIP');
        Params.Add('Protocol=Local');
        //Params.Add('Server=FBSrv'); //uses for remote connection
       // Params.Add('Server=127.0.0.1');
        Params.Add('User_Name=sysdba');
        Params.Add('Password=masterkey');
        Params.Add('CharacterSet=UTF8');
        Params.Add('ExtendedMetadata=True');
        Params.Add('CreateDatabase=Yes');
        Connected:=True;
      end; //db oluşturuldu
      //tabloları oluştur
      With FDQuery1 do
      begin
        Active     := False;
        Connection := FDConnection1;
        SQL.Clear;
        SQL.Add( 'CREATE TABLE SETTINGS ( ' );
        SQL.Add( 'ID BIGINT NOT NULL PRIMARY KEY' );
        SQL.Add( ', CONFKEY    VARCHAR(150) ' );
        SQL.Add( ', CONFVALUEEN VARCHAR(1000) ' );
        SQL.Add( ', CONFVALUETR VARCHAR(1000) ' );
        SQL.Add( ', CONFVALUEES VARCHAR(1000) ' );
        SQL.Add( ' );' );
        ExecSQL;

        SQL.Clear;
        SQL.Add( 'CREATE SEQUENCE SETTINGS_ID_SEQ;');
        ExecSQL;

        SQL.Clear;
        SQL.Add('ALTER SEQUENCE SETTINGS_ID_SEQ RESTART WITH 1;');
        ExecSQL;

        SQL.Clear;
        SQL.Add('CREATE TRIGGER SETTINGS_ID_TRG FOR SETTINGS');
        SQL.Add('ACTIVE BEFORE INSERT POSITION 0');
        SQL.Add('AS BEGIN');
        SQL.Add('IF ((new.ID IS NULL) OR (new.ID <= 0)) THEN');
        SQL.Add('BEGIN');
        SQL.Add('new.ID = GEN_ID(SETTINGS_ID_SEQ, 1);');
        SQL.Add('END');
        SQL.Add('END');
        //SQL.Add('SET TERM ; !!');
        ExecSQL;





        SQL.Clear;
        SQL.text:=( 'INSERT INTO SETTINGS '+
                '(CONFKEY,CONFVALUEEN,CONFVALUETR,CONFVALUEES) VALUES '+
                '("ChannelName","Test Channel","Test Kanalı","Test Channel")' );
        ExecSQL;
        SQL.text:=( 'INSERT INTO SETTINGS '+
                '(ID,CONFKEY,CONFVALUEEN,CONFVALUETR,CONFVALUEES) VALUES '+
                '(GEN_ID(SETTINGS_ID_SEQ, 1),"ChannelTopic","Test Topic","Test Topic","Test Topic");' );
        ExecSQL;
        SQL.text:=( 'INSERT INTO SETTINGS '+
                '(ID,CONFKEY,CONFVALUEEN,CONFVALUETR,CONFVALUEES) VALUES '+
                '(GEN_ID(SETTINGS_ID_SEQ, 1),"ChannelPort","24680","","");' );



        ExecSQL;
      end;         }
  end;








  {
  With FDQuery1 do
  begin
    Active     := False;
    Connection := FDConnection1;
    SQL.Clear;
    SQL.Add( 'CREATE TABLE IF NOT EXISTS KullaniciTablosu ( ' );
    SQL.Add( 'id INT NOT NULL AUTO_INCREMENT PRIMARY KEY' );
    SQL.Add( ', Kullanici_Adi    VARCHAR(100) ' );
    SQL.Add( ', Kullanici_ePosta VARCHAR(100) ' );
    SQL.Add( ' )' );
    SQL.Add( 'CHARACTER SET latin5 COLLATE latin5_turkish_ci;');
    ExecSQL;

    SQL.Clear;
    SQL.Add( 'SELECT * FROM KullaniciTablosu' );
    Active := True;
  end;


       }


end;

procedure TfrmSpash.FormDestroy(Sender: TObject);
begin
  frmSpash := nil;
end;

procedure TfrmSpash.FormShow(Sender: TObject);
begin
  //Sleep(3000);
end;

procedure TfrmSpash.Timer1Timer(Sender: TObject);
const
  CTimeout = 3000;
begin
  if (GetTickCount - FStartTicks > CTimeout) and OKToClose then
    Close;

end;

end.
In dubio pro reo...
Şüpheden sanık/özgürlük yararlanır...
PROGRAMADOR
Üye
Mesajlar: 239
Kayıt: 04 Oca 2008 01:53
Konum: Karşıyaka/İzmir

Re: MySql database local bağlantısı

Mesaj gönderen PROGRAMADOR »

Şunu da belirteyim sizin kodlarınız (ve dolayısıyla yapmış olduğunuz EXE) sorunsuz çalışıyor. Ama benimkiler harfi harfine uymama rağmen neden çalışmıyor anlayamadım.
In dubio pro reo...
Şüpheden sanık/özgürlük yararlanır...
Cevapla