Delphi 7 ile MySQL Bağlantısı nasıl yapabilirim ?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
dicle_gsm
Üye
Mesajlar: 19
Kayıt: 26 Oca 2016 06:52
Konum: Mardin
İletişim:

Delphi 7 ile MySQL Bağlantısı nasıl yapabilirim ?

Mesaj gönderen dicle_gsm »

Merhaba,


Ben kaç gündür MySql ile bağlantı sağlamayı deniyorum delphi 7 üzeri, ama Delphi ile gelen paketler bağlantı sağlamıyor, 3. parti component denedim MyDac ve benzeri " Socket Error 10061 " Hatası ile karşılaşıyorum, localhost'dan bağlantıyı deniyorum kullandığım işletim sistemi win10, Wamp server düzgün şekilde çalışıyor ama bir türlü delphi de bağlantıyı sağlayamadım.

Teşekürler.
ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: Delphi 7 ile MySQL Bağlantısı nasıl yapabilirim ?

Mesaj gönderen ertank »

Merhaba,

Verdiğiniz soket hata mesajı bağlantı reddedildi anlamına geliyor. Sorununuz daha çok MySQL sunucu ayarları (hangi port üzerinden çalışacak, ağ olmadan mı çalışacak vb.) ve/veya işletim sistemi TCP/IP ayarlarından (firewall yetkilendirmesi vb.) kaynaklı gözüküyor.

MySQL kullanmıyorum. Ancak sitesinde kurulum sonrasındaki adımlar şu şekilde:
1- Initialize Data Directory
2- Start Server
3- Test Server

Server düzgün çalışıyor mu kontrolü yapmak için aşağıdaki komutu deneyebilirsiniz:

Kod: Tümünü seç

mysqladmin version
mysqladmin sisteminizde kurulu bir exe dosyası olması gerekiyor.

Ayrıca server bağlantı sorunları ile ilgili aşağıdaki örnekleri vermişler:

Kod: Tümünü seç

mysql
ERROR 2003: Can't connect to MySQL server on 'host_name' (111)
mysql
ERROR 2002: Can't connect to local MySQL server through socket
'/tmp/mysql.sock' (111)
Yukarıda mysql uygulamasının iki farklı sistem üzerindeki hata mesajını görebilirsiniz. Bu şekilde bir hata mesajı MySQL server çalışmadığı anlamına geliyor.

Normalde MySQL 3306 port ile çalışır. Firewall ayarlarınızda TCP 3306 port üzerinden gelen isteklerin tamamına izin vermeyi deneyebilirsiniz.

Son olarak MySQL'in database yönetimi için kullanılan grafik uygulamasını kurarak bağlantı yapmayı deneyebilirsiniz.
https://dev.mysql.com/downloads/workbench/

Özetle, eğer Workbench bağlantı kurabiliyor ise MyDAC ile de bağlantı kurabilmeniz gerekli.
dicle_gsm
Üye
Mesajlar: 19
Kayıt: 26 Oca 2016 06:52
Konum: Mardin
İletişim:

Re: Delphi 7 ile MySQL Bağlantısı nasıl yapabilirim ?

Mesaj gönderen dicle_gsm »

Cevap verdiğinizi için teşekür ederim, Port ayarları değişmişti, Wamp ayarlarından port'u 3306 ollarak düzenledikten sonra düzeldi.. tekrardan teşekür ederim.
dicle_gsm
Üye
Mesajlar: 19
Kayıt: 26 Oca 2016 06:52
Konum: Mardin
İletişim:

Re: Delphi 7 ile MySQL Bağlantısı nasıl yapabilirim ?

Mesaj gönderen dicle_gsm »

Bir sorun daha ile karşılaştım yardımcı olasanız çok sevinirim :)
basit bir veri ekleme kodu yazdım, verileri ekliyor ama böyle bir hata alıyorum

Resim

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
MyQuery1.sql.clear;
MyQuery1.sql.text := 'INSERT INTO users(isim, mail, sifre, tel_no) VALUES("sadas", "asdasd", "12121", "111111")';
MyQuery1.Open;
MyQuery1.Execute;
end;
ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: Delphi 7 ile MySQL Bağlantısı nasıl yapabilirim ?

Mesaj gönderen ertank »

1)

Kod: Tümünü seç

MyQuery1.Open;
Yukarıdaki satır SQL çalıştığı zaman sunucudan veri okuyup göstermek için kullanılır. "INSERT INTO" ile başlayan SQL komutları genelde geriye bilgi çevirmezler. İstisnai olarak geriye veri çeviren şekilleri vardır. Ancak sizin verdiğiniz örnek bu şekilde değil.

Dolayısıyla sunucu size "geriye veri çevirilmeyeceği halde geri veri çevirme şeklinde bir komut çalıştırmak istedin. Bunu yapamam" gibi bir hata mesajı veriyor.

Birçok TQuery bileşeni yukarıdaki sebepten dolayı birden fazla SQL komut çalıştırma yöntemi içerir. TMyQuery'de bunlardan bir tanesi.

Geriye veri çevirmek gereken "SELECT * FROM" gibi SQL komutları için:

Kod: Tümünü seç

TMyQuery.Open()
// veya
TMyQuery.Execute()
Veri kaydı, geri veri çevirmeyecek prosedür çalıştırma, veri silme vb. işlemler için:

Kod: Tümünü seç

TMyQuery.ExecSQL()
// veya
TMyQuery.Execute() 
kullanılabilir.

Devart bileşenlerindeki kolaylık yukarıdan da farkedeceğiniz üzere TMyQuery.Execute() prosedürüdür. Zira bu prosedür SQL komutunu inceleyip geri veri çeviren türde ise arka planda Open() eğer geri veri çevirmeyen türde ise arka planda ExecSQL() prosedürlerini çağırır. Bu ilk bakışta güzel bir özellik gibi gözükse de SQL içeriğini anlamak için bir süre zaman harcaması gerektiği için şahsen tercih ettiğim bir kullanım şekli değil.

2)
Sizin gönderdiğiniz örnekteki koda göre siz SQL komutunu ard arda iki kez çalıştırıyorsunuz. İlk çalıştırma MyQuery.Open() ile oluyor. İkinci çalıştırma MyQuery.Execute() ile oluyor.

MyQuery.Open() hata vermese database içine iki kayıt kaydetmiş olabilirsiniz. Ya da PRIMARY KEY sebebi ile mükerrer kayıt hatası alabilirsiniz. Kod içindeki bu sorunu da düzeltmeniz gerekli.

3)
Yapmak istediğiniz uygulamayı bilemiyorum. Ancak eğer database MySQL olması zorunluğu yok ise;
- Tek bilgisayar üzerinde çalışacak uygulamalar için FirebirdSQL 3 ve sonrası (çoklu işlemci desteği geliştirildi),
- Yerel ağ veya uzak erişim gerekiyor ise PostgreSQL database sistemini incelemenizi tavsiye ederim. Ekim 2017 civarında versiyon 10 kullanılabilir hale gelmesi planlanıyor. Özellik olarak Oracle ile kıyaslanabilen bir database sistemidir. Ancak görsel database yönetim aracı Windows işletim sistemi üzerinde Unix sistemlerde olduğu kadar performanslı değildir. İlk kullanımda bir miktar yavaş gelebilir.
- Son olarak, yerel ağ için veri miktarı çok artmayacak ise veya yıllar itibariyle yeni database dosyası oluşturulup aktarım yapılabilecek ise SQL Server Express ile uygulama geliştirmek oldukça hızlı olabilir. Ücretsiz sürümünün 10GB database boyut limiti vardır.
Cevapla