MySql database local bağlantısı

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
hido
Üye
Mesajlar: 268
Kayıt: 29 Mar 2014 04:32

MySql database local bağlantısı

Mesaj gönderen hido »

Selam,

xe5 ile MySql local database bağlantısı için hangi componentleri kullana bilirim...
Kullanıcı avatarı
pasa_yasar
Üye
Mesajlar: 570
Kayıt: 07 Haz 2004 12:35

Re: MySql database local bağlantısı

Mesaj gönderen pasa_yasar »

MyDAC veya AnyDAC en iyileri bunlar bildiğim kadarı ile ücresitsiz bileşenlerde mevcut yanlış hatırlamıyorsam
Kullanıcı avatarı
hido
Üye
Mesajlar: 268
Kayıt: 29 Mar 2014 04:32

Re: MySql database local bağlantısı

Mesaj gönderen hido »

Net ortamında bulunan mysql databaselere delphi xe5 de bulunan FDConnection ve FDQuery bağlanıyorum fakat local hiç yapmadım local de FDConnection ve FDQuery bağlantıyı çözemedim
theSinan

Re: MySql database local bağlantısı

Mesaj gönderen theSinan »

SQLConnection1 ile hem local hem terminal bağlantı kurabilirsin
baglantı kuracağın mysql bilgilerini kayıt defterinden okuyarak
program üzerinden bağlanacağın mysql bilgileri değiştirebilirsin
işte en basit yolu


Kod: Tümünü seç


String GenelKayitDefterinden_Oku(String sDizin, String sAnahtar )
	{

		TRegistry *Kayit = new TRegistry(KEY_READ);
		Kayit->RootKey 	 = HKEY_LOCAL_MACHINE;
		Kayit->OpenKey(sDizin,true);
		return Kayit->ReadString(sAnahtar) ;

	}

 void GenelAyarGoruntule()
	{
		String sVeriYolu , sKullanici, sSifre, sVeriTabani ;

	   sVeriYolu 	=	GenelKayitDefterinden_Oku("Software\\Kardesler Bilgisayar\\Teknik Servis","VeriYolu");
	   sKullanici 	=	GenelKayitDefterinden_Oku("Software\\Kardesler Bilgisayar\\Teknik Servis","Kullanici");
	   sSifre 		=	GenelKayitDefterinden_Oku("Software\\Kardesler Bilgisayar\\Teknik Servis","Sifre");
	   sVeriTabani 	=	GenelKayitDefterinden_Oku("Software\\Kardesler Bilgisayar\\Teknik Servis","VeriTabani");



	Form1->SQLConnection1->Close();
	Form1->SQLQuery1->Close();
	Form1->SQLConnection1->Params->Clear();
	//Form1->SQLQuery1->SQL->Clear();
	Form1->SQLConnection1->ConnectionName =  "MySQLConnection";
	Form1->SQLConnection1->DriverName     =  "MySQL";
	Form1->SQLConnection1->GetDriverFunc  =  "getSQLDriverMySQL";
	Form1->SQLConnection1->LibraryName    =  "dbxmys.dll";
	Form1->SQLConnection1->VendorLib      =  "libmysql.dll";

	// SQLConnection1->Params lara degerler atıyoruz
	Form1->SQLConnection1->Params->Add("DirverUnit=Data.DBXMySQL");
	Form1->SQLConnection1->Params->Add("DirverPackageLoader=TDBXDynalinkDriverLoader,DbxCommonDriver180.bpl");
	Form1->SQLConnection1->Params->Add("DirverAssemblyLoader=Borland.Data.TBDXDynalinkDriverLoader,Borland.Data.DbxCommonDriver,Version=18.0.0.0,Culture=neutral,PublicKeyToken=91d62ebb5b0d1b1b");
	Form1->SQLConnection1->Params->Add("MetaDataPackageLoader=TDBXMySqlMetaDataCommandFactory,DbxMySQLDriver180.bpl");
	Form1->SQLConnection1->Params->Add("MetaDataAssemblyLoader=Borland.Data.TDBXMySqlMetaDataCommandFactory,Borland.Data.DbxMySQLDriver,Version=18.0.0.0,Culture=neutral,PublicKeyToken=91d62ebb5b0d1b1b");
	//Form1->SQLConnection1->Params->Add("GetDriverFunc=getSQLDriverMYSQL");
	//Form1->SQLConnection1->Params->Add("LibraryName=dbxmysql.dll");
	Form1->SQLConnection1->Params->Add("LibraryNameOsx=libsqlmys.dll");
	//Form1->SQLConnection1->Params->Add("VendorLib=LIBMYSQL.dll");
	Form1->SQLConnection1->Params->Add("VendorLibWin64=libmysql.dll");
	Form1->SQLConnection1->Params->Add("VendorLibOsx=libmysqlclient.dylib");
	Form1->SQLConnection1->Params->Add("MaxBlobSize=-1");
	Form1->SQLConnection1->Params->Add("HostName="+sVeriYolu);
	Form1->SQLConnection1->Params->Add("DataBase="+sVeriTabani);
	Form1->SQLConnection1->Params->Add("User_Name="+sKullanici);
	Form1->SQLConnection1->Params->Add("Password="+sSifre);
	Form1->SQLConnection1->Params->Add("BlobSize=-1");
	Form1->SQLConnection1->Params->Add("ErrorResourceFile=");
	Form1->SQLConnection1->Params->Add("LocaleCode=");
	Form1->SQLConnection1->Params->Add("Compressed=");
	Form1->SQLConnection1->Params->Add("Encrypted=False");
	Form1->SQLConnection1->Params->Add("ConnectionTimeout=60");
	Form1->SQLConnection1->Params->Add("ServerCharSet=latin5");
	Form1->SQLConnection1->Open();
}

Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: MySql database local bağlantısı

Mesaj gönderen brs »

Selam aynı dert bende de var bir türlü SqlConnection ile databaselere local bağlatı kuramadım
odbc de yükledim fakat yine olmadı, yine olmadı...

Kod: Tümünü seç

procedure TForm1.Button3Click(Sender: TObject);
begin

SqlConnection1.ConnectionName:='MySQL Direct (Core Lab)';
SqlConnection1.DriverName:='MySQL Direct (Core Lab)';
SqlConnection1.LibraryName:='C:\Users\APlus\Desktop\Test Database\Database\libmysql.dll';
SqlConnection1.VendorLib:='not used';


SqlConnection1.Params.Clear;
SqlConnection1.Params.Add('BlobSize=-1');
SqlConnection1.Params.Add('HostName= C:\Users\APlus\Desktop\Test Database\Database\mydata.sql');
SqlConnection1.Params.Add('DataBase= mydata');
SqlConnection1.Params.Add('DriverName=MySQL Direct (Core Lab)');
SqlConnection1.Params.Add('FetchAll=True');
SqlConnection1.Params.Add('EnableBoolean=False');



end;
En son brs tarafından 14 May 2015 10:59 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
theSinan

Re: MySql database local bağlantısı

Mesaj gönderen theSinan »

odbcye yüklemene gerek yok
yukarıdaki kodu kendine göre ayarla direk mysql bağlantı kuruyor
sorunsuz çalışıyor
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: MySql database local bağlantısı

Mesaj gönderen brs »

theSinan yazdı:odbcye yüklemene gerek yok
yukarıdaki kodu kendine göre ayarla direk mysql bağlantı kuruyor
sorunsuz çalışıyor

:D Hocam biraz karışık geldi denedim çıkamadım işin içinden


FDConnection ile

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
With FDConnection1 do
begin
LoginPrompt := False;
Params.Clear;
Params.Values['DriverID']:= 'MySQL';
Params.Values['Database']:= '126.1.2.2';
Params.Values['User_Name']:= 'merme';
Params.Values['Password']:= '2348585';
Params.Values['CharacterSet'] := 'utf8';
Connected:= True;
end;
nette bulunan databaselere ulaşbiliyorum

Aynı İşlemi localhostta SqlConnection ile yapmak mümkün değil mi?

Kod: Tümünü seç

procedure TForm1.Button3Click(Sender: TObject);
begin
SqlConnection1.ConnectionName:='MySQL Direct (Core Lab)';
SqlConnection1.DriverName:='MySQL Direct (Core Lab)';
SqlConnection1.LibraryName:='C:\Users\APlus\Desktop\Test Database\Database\libmysql.dll';
SqlConnection1.VendorLib:='not used';


SqlConnection1.Params.Clear;
SqlConnection1.Params.Add('BlobSize=-1');
SqlConnection1.Params.Add('HostName= C:\Users\APlus\Desktop\Test Database\Database\mydata.sql');
SqlConnection1.Params.Add('DataBase= mydata');
SqlConnection1.Params.Add('DriverName=MySQL Direct (Core Lab)');
SqlConnection1.Params.Add('FetchAll=True');
SqlConnection1.Params.Add('EnableBoolean=False');
end;
En son brs tarafından 14 May 2015 11:00 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
theSinan

Re: MySql database local bağlantısı

Mesaj gönderen theSinan »

tabiki mümkün
ben sVeriYolu değişkenime localhost atadığımda
mysql çalışıyor ancak ip adresi ile baglanmak
daha sorunsuz ve ilerde terminal için ek ayar yapmana gerek kalmıyacaktır

mysqli dışardan gelen bağlantılara aç
ms-dos aç(windows + R)çalıştır (cmd) enter
mysql -u root -p
komutunu vererek mysql bağlantısı kuruyoruz ve aşağıdaki sorguları çalıştırıyoruz





GRANT ALL PRIVILEGES ON *.* TO 'mysqlkullaniciadin'@'%' IDENTIFIED BY 'mysqlsifre' WITH GRANT OPTION;
FLUSH PRIVILEGES;

mysq li restart et

sonra güvenlik duvarından mysql portuna (3306) gelen bağlantılara izin ver
ip adresi ile mysql bağlanabilirisin
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: MySql database local bağlantısı

Mesaj gönderen brs »

theSinan yazdı:tabiki mümkün
ben sVeriYolu değişkenime localhost atadığımda
mysql çalışıyor ancak ip adresi ile baglanmak
daha sorunsuz ve ilerde terminal için ek ayar yapmana gerek kalmıyacaktır

mysqli dışardan gelen bağlantılara aç
ms-dos aç(windows + R)çalıştır (cmd) enter
mysql -u root -p
komutunu vererek mysql bağlantısı kuruyoruz ve aşağıdaki sorguları çalıştırıyoruz





GRANT ALL PRIVILEGES ON *.* TO 'mysqlkullaniciadin'@'%' IDENTIFIED BY 'mysqlsifre' WITH GRANT OPTION;
FLUSH PRIVILEGES;

mysq li restart et

sonra güvenlik duvarından mysql portuna (3306) gelen bağlantılara izin ver
ip adresi ile mysql bağlanabilirisin
Hocam sanırım ben sizi anlayamadım yada derdimi iyi anlatamadım xe5 yapmış olduğum
projemem (C:\Users\APlus\Desktop\Test) klasör içinde aynı klasöre mysql databaseleri ekledim ama bir türlü projem ile database arasında bağlantıyı kuramadım bunu nasıl sağlarım...
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
theSinan

Re: MySql database local bağlantısı

Mesaj gönderen theSinan »

Şu an evdeyim telden yazıyorum
İlk mesajımda verdiğim fonksiyon ile c++ projede mysql veri tabanına bağlantı kuruluyor Pascal bilmedigim den delphi ceviremiyorum fonksiyonu kopya yapıştır Pascal çevir yine bağlantıda sorun yaşıyorsanız libmysql.dll dosyanız pcnizde kurulu mysql versiyonuyla uyumlu değil
Pcnizde kurulu Mysql versiyonu nedir
Hangi işletim sistemi kullanıyor sunuz
Telden yazıyorum yanımda şu an pc yok
Yarın benim pcdeki libmysql.dll upload edeyim
Tekrar denersiniz
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 »

@theSinan

- local'de MySQL server kurmadan veritabanına bağlanmaktan, yani Embedded MySQL'den bahsediyor sanırım. O konuda anlaşılmadığını tahmin ediyorum.

@brs
brs yazdı:FireDAC ile yani FDConnection ile
nette bulunan databaselere ulaşbiliyorum
Aynı İşlemi localhostta SqlConnection ile yapmak mümkün değil mi?
demişsin ya, local'de de FDConnection kullansanız ya... Onunla Embedded MySQL bağlantınızı ( sadece tek bir libmysqld.dll kullanarak ) local olarak yapabilirsiniz. :idea:

Konu hakkında bilgi için bkz. Embarcadero

Başaramazsanız ben daha önce bir çok kere kullandım, uygun bir zamanda bir örnek proje hazırlarım. Şimdi İstanbul'a seyahatim var yarın, ona hazırlanıyorum. Başka birine mesaj yazarken mesajınız dikkatimi çekti. :idea:

Özetle
(*) Önce mysql-noinstall-5.1.73-win32 gibi bir paket indir. İçinde Embedded klasöründeki DLL'yi alacaksın. Herhangi bir kurulum yapmanıza lüzum yok. DLL'yi de burada mesaj ekinde verirdim ama 250 kb sınırı var...

(1) FDPhysMySQLDriverLink nesnesini Release komutu ile bağlantıyı kapatırsın.
(2)

Kod: Tümünü seç

    DriverID     := 'MySQL';
    VendorLib    := ExtractFilePath(Application.Exename) + '\LIBMYSQLD.DLL';
şeklinde DLL'inin yerini bildirirsin.
(3) EmbeddedArgs içerisine

Kod: Tümünü seç

    --basedir=
    --datadir=
    --language=
    --skip-innodb
    --skip-networking
bilgilerini gömersin.
(4) FDConnection'a gelir Parametrelerine

Kod: Tümünü seç

      DriverID
      CharacterSet
      Database
bilgilerini girersin.
(5) Connected := True; yapar FDQuery'e geçersin.

(6) Örnek olarak Tablo yoksa Create etsin şeklindeki yapıyı da vereyim.

Kod: Tümünü seç

  With FDQuery do
  begin
    Active     := False;
    Connection := FDConnection;
    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;
(7) SELECT satırlarını yazarsın.

Resim
Dosya ekleri
KullaniciTablosu.rar
Örnekteki MySQL Tablosu ( Embedded Create edildi ve veri Insert edildi )
(760 Byte) 164 kere indirildi
Resim
Resim ....Resim
Kullanıcı avatarı
hido
Üye
Mesajlar: 268
Kayıt: 29 Mar 2014 04:32

Re: MySql database local bağlantısı

Mesaj gönderen hido »

Sayın Hocam bende çözemedim size zahmet örnek proje hazırlaya bilir misiniz sırf bu yüzden Sqlite öğrenmeye başladım...
En son hido tarafından 15 Nis 2014 01:18 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
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 »

Şu an yoldayım, akşam otelde örnek hazırlar buradan linkini paylaşırım.
Resim
Resim ....Resim
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 »

Örneğiniz hazır...

libmysqld.dll dosyası EXE klasöründedir. Orada bulunmasına özen gösterirseniz sorun çıkmadan çalışır. :idea:

Resim

Bu linkten indirebilirsiniz.

Kaynak Kodları:

Kod: Tümünü seç

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  FDConnection1.Close;

  With FDPhysMySQLDriverLink1 do
  begin
    Release; // Var olan bağlantıları kapatır.. (yenisi için hazırlık için)
    DriverID     := 'MySQL';
    VendorLib    := ExtractFilePath(Application.Exename) + '\LIBMYSQLD.DLL';
    EmbeddedArgs.Text := ''
    + '--basedir='  + ExtractFilePath(Application.Exename) +';'
    //'datadir' ile verilen yerde bulunen her alt klasör birer Veritabanıdır.
    // onların da altında fiziksel tablolar olacak.
    + '--datadir='  + ExtractFilePath(Application.Exename) +'\DATA;'
    + '--language=' + ExtractFilePath(Application.Exename) +';'
    + '--skip-innodb;'
    + '--skip-networking;'
    ;
  end;

  With FDConnection1 do
  begin
    Connected   := False;
    LoginPrompt := False;
    Params.Clear;
      Params.Values['DriverID']     := 'MySQL';
      Params.Values['CharacterSet'] := 'utf8';
      // Database ise aslı astarı yukarıda verilen "datadir" içindeki bir klasördür...
      Params.Values['Database']     := 'VERITABANI';
    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;
  DataSource1.DataSet := FDQuery1;
  DBGrid1.DataSource  := DataSource1;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
  With TFDQuery.Create(nil) do
  begin
    Connection := FDConnection1;
    SQL.Clear;
    SQL.Add( 'INSERT INTO KullaniciTablosu  '   );
    SQL.Add( '( Kullanici_Adi, Kullanici_ePosta )' );
    SQL.Add(' VALUES ' );
    SQL.Add(' ( '+ QuotedStr( Edit1.Text ) + ', '+QuotedStr( Edit2.Text )+ ' ) ' );
    ExecSQL;
    Free;
  end;
  FDQuery1.Active := False;
  FDQuery1.Active := True;
end;
Resim
Resim
Resim ....Resim
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: MySql database local bağlantısı

Mesaj gönderen brs »

Eline Sağlık Mrmarman hocam
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Cevapla