"MQL5'ten (MQL4) MySQL Veritabanına Nasıl Erişilir" makalesi için tartışma

 

Yeni makale MQL5'ten (MQL4) MySQL Veritabanına Nasıl Erişilir yayınlandı:

Makale, MQL ve MySQL veritabanı arasında bir arayüzün geliştirilmesini açıklar. Mevcut pratik çözümleri tartışır ve veritabanlarıyla çalışmak için bir kitaplık uygulamanın daha uygun bir yolunu sunar. Makale, MySQL ile çalışmanın işlevleri, arayüz yapısı, örnekleri ve bazı belirli özelliklerinin ayrıntılı bir açıklamasını içerir. Yazılım çözümlerine gelince, makale ekleri, MQL4 ve MQL5 dilleri için dinamik kitaplıkların dosyalarını, dokümantasyonu ve script dosyası örneklerini içerir.

MetaTrader terminali (MQL programları aracılığıyla) arasındaki etkileşim, aşağıdaki bileşenlerin yardımıyla uygulanabilir:

MQL ve MySQL etkileşiminin şeması

Arabirim kitaplığı MQLMySQL.mqh. #include dizini kullanılarak projeye eklenir ve zevkinize göre değiştirilebilir.

MQLMySQL.dll dinamik kitaplığının içe aktarma işlevlerinin yanı sıra bunları çağırma ve hataları işleme işlevleri için yönergeleri içerir.

Yazar: Eugeniy Lugovoy

 
DB = MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag);

her tick için çağrı yaparken büyük bir yük oluşturmaz mı?????

init'te veritabanına bağlanmak ve ardından erişim için tanımlayıcıyı kullanmak daha mantıklı olmaz mı?

 
DKeN:

her tick için çağrı yaparken büyük bir yük oluşturmaz mı?????

Init'te veritabanına bağlanmak ve ardından erişim için tanımlayıcıyı kullanmak daha mantıklı olmaz mı?

Selamlar. Uzman Danışmanlar ve Göstergeler için veritabanına bağlantı başlatma işlevinde yapılır. Makalede, her tikte veritabanı ile nasıl bağlantı kurulacağına dair herhangi bir öneri bulunmamaktadır. Yalnızca komut dosyası örnekleri verilmiştir ve anladığınız gibi komut dosyalarında başlatma yoktur.
 

Eugene, makale için teşekkürler. DBMS hakkında ilginç bir materyal.

Benim böyle bir sorunum var.

MetaTrader5, x64, 975 derlemem var.

"MySQL-001" komut dosyasını çalıştırırken bir hata alıyorum:

RL      1       12:41:22.443    MySQL-001       'C:\Program Files\MetaTrader5\MQL5\libraries\MQLMySQL.dll' is not 64-bit version
PG      1       12:41:22.474    MySQL-001 (AUDCAD.e,M1) Cannot load 'C:\Program Files\MetaTrader5\MQL5\libraries\MQLMySQL.dll'
DK      2       12:41:23.677    MySQL-001 (AUDCAD.e,M1) Cannot call 'cMySqlVersion', '..\libraries\MQLMySQL.dll' is not loaded
ID      2       12:41:23.677    MySQL-001 (AUDCAD.e,M1) unresolved import function call

Nedeni, anladığım kadarıyla, sistem 64 bitlik bir kütüphane yüklemeye çalışıyor...

 
denkir:

Eugene, makale için teşekkürler. DBMS hakkında ilginç bir materyal.

Benim böyle bir sorunum var.

MetaTrader5, x64, 975 derlemem var.

"MySQL-001" komut dosyasını çalıştırırken bir hata alıyorum:

Nedeni, anladığım kadarıyla, sistem 64 bitlik bir kütüphane yüklemeye çalışıyor ...

Evet, çoğunlukla 32 bit terminallerle çalıştığım için proje x32 için derlendi. Sorunu anlıyorum, önümüzdeki birkaç gün içinde MT5 x64 altında derleyip test edeceğim.

Yorum için teşekkürler.

 

Metatrader 5 için kütüphane sürümü - x64

- Proje MQLMySQL.DLL x64 için yeniden derlenmiştir (kaynaklar düzeltilmemiştir).

- Standart LibMySQL.DLL, en son kararlı MySQL dağıtımı v5.6.21 x64'ten alınmıştır

Aslında, projeyi MT5 x64 altında çalıştırmayı deneyenler için, yalnızca MQL5\Libraries dizininin içeriğini değiştirebilirsiniz. MQL programlarının kaynak kodunun düzeltilmesine veya yeniden derlenmesine gerek yoktur.

Denis'e (denkir) yorumu için tekrar teşekkürler, x64 kullanıcılarını unutmuşum.

Dosyalar:
 

Okudum ve ağladım. Yazarla bir alıp veremediğim yok. Umarım eleştirileri uygun bir şekilde ele alır. Her neyse:

1. Onsuz her şey yolunda gidiyorsa, neden başka bir DLL şeklinde bir sarmalayıcı yazasınız ki? MQL dili, genellikle tırmıklara dönüşen bu tür koltuk değnekleri yazmak için geliştirme aşamasında değildir.

2. Tüm bu çalışmaların sonucunda neden gerekli her şeye sahip olan ve yazarın atıfta bulunduğu öncüllerin eksikliklerini ortadan kaldıran bir sınıf yazılmıyor?

3. Şunu özellikle belirtmek isterim:

string SQL;
SQL = "INSERT INTO EURUSD(Ask,Bid) VALUES (1.3601,1.3632);";
SQL = SQL + "INSERT INTO EURUSD(Ask,Bid) VALUES (1.3621,1.3643);";
SQL = SQL + "INSERT INTO EURUSD(Ask,Bid) VALUES (1.3605,1.3629);";

Aslında her şey çok daha basit:

string SQL="INSERT INTO EURUSD(Ask,Bid) VALUES (1.3601,1.3632),(1.3621,1.3643),(1.3605,1.3629);";

Makale genel olarak "Bakın ve nasıl yapılması gerektiğini öğrenin" yerine "Bakın ben neler yapabiliyorum!" tarzında yazılmış.

 
avoitenko:

Okudum ve ağladım. Yazarla bir alıp veremediğim yok. Umarım eleştirileri uygun bir şekilde ele alır. Her neyse:

1. Onsuz her şey yolunda gidiyorsa, neden başka bir DLL şeklinde bir sarmalayıcı yazasınız ki? MQL dili, genellikle tırmıklara dönüşen bu tür koltuk değnekleri yazmak için geliştirme aşamasında değildir.

2. Tüm bu çalışmaların sonucunda neden gerekli her şeye sahip olan ve yazarın atıfta bulunduğu öncüllerin eksikliklerini ortadan kaldıran bir sınıf yazılmıyor?

3. Şunu özellikle belirtmek isterim:

Aslında her şey çok daha basit:

Yazı genel olarak "Bakın ve nasıl yapılması gerektiğini öğrenin" yerine "Bakın ben neler yapabiliyorum!" tarzında yazılmış.

Sırayla cevap vereceğim.

Projenin oldukça uzun zaman önce, MQL dilinin şu anki gelişim aşamasında olmadığı ve MQL4'ün sınıfları, yapıları olmadığı bir zamanda başlatıldığını söylemeliyim.

Ve yazılım çözümünün hem MQL4 hem de MQL5 için çalışması ve MQL4'ten MQL5'e geçiş için (gerekirse) minimum maliyete sahip olması gerekiyordu. Proje yakın zamana kadar tamamlanmak üzereydi.

Bu nedenle proje bir sınıf olarak uygulanmadı. Bir sınıf mı istiyorsunuz? Sorun değil - yazın! Kimse sizi yasaklamıyor.

Şimdi bir yerine 3 INSERT ile ilgili. Aşağıdaki nedenlerden dolayı bu şekilde yazdım (ve telif hakkı saklıdır):

- genel kabul görmüş SQL'92, SQL'2000 standartlarını ihlal etmiyor (sizin varyantınız - sözdiziminin özellikleri tam olarak MySQL toplu ekleme);

- bu alanda acemi bir programcının okuması ve anlaması daha kolay olacaktır;

- bir değil, tam olarak 3 INSERT talimatının yürütülmesinin gösterilmesi.

Çoklu ifadeler herhangi bir DML/DDL/DCL işlemini içerebilir, örneğiniz tek bir tablo üzerinde INSERT işlemi ile sınırlıdır.

Not: Makale "Al ve kullan" tarzında yazılmıştır.

 

Teşekkürler! Çözümünüzü derinlemesine inceleyeceğim, yalnızca MQL'e güvenmekten daha kararlı olabilir.

Bilginiz olsun, bir süre önce MT4 build 600+ için yazdığım sadece MQL4'e özel bir köprü var: https://www.mql5.com/tr/code/11114

MySQL for new MQL4 (tested in build 600)
MySQL for new MQL4 (tested in build 600)
  • oylar: 12
  • 2014.02.10
  • Sergey
  • www.mql5.com
Connecting to MySQL server from new MQL4
 
lukins:

Teşekkürler! Çözümünüzü derinlemesine inceleyeceğim, yalnızca MQL'e güvenmekten daha kararlı olabilir.

Bilginiz olsun, bir süre önce MT4 build 600+ için yazdığım sadece MQL4'e özel bir köprü var: https://www.mql5.com/tr/code/11114

Bu makaleyi okuyarak zaman ayırdığınız için teşekkürler. Ayrıca(https://www.mql5.com/tr/code/11114) adresinizi de kontrol ettim, böyle bir çözümü uzun zaman önce buldum (MT4 yapı 600'den önce) ve MQL ve MySQL dostu yapma fikrini beğendim. Ancak kullanmak istemediğim tek şey, verileri veritabanından almak için diziler. Bu yüzden bu çözümü MT4 ve MT5 ile kullanmak için oluşturdum.

Ayrıca, x64 tabanlı projeyi makaleye eklemeyi unuttum, bu yüzden tartışmada buradan indirebilirsiniz. Kaynaklarda hiçbir şey değiştirilmedi, sadece DLL x64 için yeniden derlendi.

İyi şanslar,

Eugene

MySQL for new MQL4 (tested in build 600)
MySQL for new MQL4 (tested in build 600)
  • oylar: 12
  • 2014.02.10
  • Sergey
  • www.mql5.com
Connecting to MySQL server from new MQL4
 
x64 platformları için aşağıdaki kütüphaneleri kullanın (tartışmayla birlikte)