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

Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Tamam, bu amaç için bir uzman danışman yazdığınızı görüyorum ve makalede yayınladığım öneriler olmadan yazılmış.
Öyleyse, adım adım ilerleyelim: 1.
1. " DB = cMySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag); " çağrısı OnInit() içinde yapılmalıdır OnTick() yerine standart fonksiyon.
2. cMySqlConnect kullanıyorsunuz - DLL'den içe aktarılan bir işlevdir, bunun yerine MySqlConnect işlevini kullanmanız gerekir cMySqlConnect fonksiyonu !
3. MySqlDisconnect fonksiyonunu OnDeinit() standart fonksiyonu içinde çağırmalısınız.
4. Bağlantının başarılı olduğundan emin olmak için OnTick() standart fonksiyonu içinde veritabanı bağlantı tanımlayıcısını kontrol etmeniz gerekir.
Sonunda şöyle görünecek.
Tamam, bu amaç için bir uzman danışman yazdığınızı görüyorum ve makalede yayınladığım öneriler olmadan yazılmış.
Öyleyse, adım adım ilerleyelim: 1.
1. " DB = cMySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag); " çağrısı OnInit() içinde yapılmalıdır OnTick() yerine standart fonksiyon.
2. cMySqlConnect kullanıyorsunuz - DLL'den içe aktarılan bir işlevdir, bunun yerine MySqlConnect işlevini kullanmanız gerekir cMySqlConnect fonksiyonu !
3. MySqlDisconnect fonksiyonunu OnDeinit() standart fonksiyonu içinde çağırmalısınız.
4. Bağlantının başarılı olduğundan emin olmak için OnTick() standart fonksiyonu içinde veritabanı bağlantı tanımlayıcısını kontrol etmeniz gerekir.
Sonunda böyle görünecek.
Tamam, bu amaç için bir uzman danışman yazdığınızı görüyorum ve makalede yayınladığım öneriler olmadan yazılmış.
Öyleyse, adım adım ilerleyelim: 1.
1. " DB = cMySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag); " çağrısı OnInit() içinde yapılmalıdır OnTick() yerine standart fonksiyon.
2. cMySqlConnect kullanıyorsunuz - DLL'den içe aktarılan bir işlevdir, bunun yerine MySqlConnect işlevini kullanmanız gerekir cMySqlConnect fonksiyonu !
3. MySqlDisconnect fonksiyonunu OnDeinit() standart fonksiyonu içinde çağırmalısınız.
4. Bağlantının başarılı olduğundan emin olmak için OnTick() standart fonksiyonu içinde veritabanı bağlantı tanımlayıcısını kontrol etmeniz gerekir.
Sonunda şöyle görünecek.
Adım adım değiştirdim, ancak uzmanı dört veya daha fazla sembol için bir mt4'te kullandığımda sorun hala var. yazdırır " Erişim ihlali okundu 0x0000000B içinde '... .MQLMySQL.dll'
"
kod takip edilir
<--
#include <MQLMySQL.mqh
int MySqlErrorNumber; // son MySQL hata numarası
string MySqlErrorDescription; // hata açıklaması
//+------------------------------------------------------------------+
//| Uzman başlatma işlevi & nbsp; |
//+------------------------------------------------------------------+
int OnInit()
OnInit(); int OnInit()
EventSetTimer(timeSeconds);
DB = MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag); if( DB == -1 )
if( DB == -1 )
{
Print("Veritabanı bağlı değil ..."); if( DB == -1 ) { print("Veritabanı bağlı değil ... "); }
}
return(INIT_SUCCEEDED); }
}
//+------------------------------------------------------------------+
//| Uzman başlangıçtan kaldırma işlevi |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
MySqlDisconnect(DB);
EventKillTimer();
ObjectsDeleteAll();
}
void OnTimer()
{
//Alert(TimeCurrent());
OnTick();
}
//+------------------------------------------------------------------+
//| Uzman tik fonksiyonu & nbsp; |
//+------------------------------------------------------------------+
void OnTick()
{
if( DB == -1 )
{
Alert("Veritabanı bağlı değil ... "); return; { Alert("Veritabanı bağlı değil ...")
return; }
}
if( IsExpertEnabled() && IsConnected() && AccountNumber() > 0 && DB ! = -1 )
{
int hesap = HesapNumarası();
string symbol = Symbol(); if( cmd !
if( cmd ! = "" && cmd ! = NULL )
{
sembol = cmd; }
}
symbolOrder = symbol + "_table";
double spread = (Ask - Bid); } symbolOrder = symbol + "_table"; }
giriş = spread*MathPow(10, Digits).
//int DB = cMySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag);
Query = "SELECT * FROM " + symbol + " where AccountNumber = " + (string)AccountNumber();
//Print(Query);
int Cursor1 = MySqlCursorOpen(DB, Query);
if (Cursor1 >= 0)
{
int Rows1 = MySqlCursorRows(Cursor1); int Cursor1 = MySqlCursorOpen(DB, Query); if (Cursor1 >= 0)
int dataRows1 = Rows1;
//Alert(dataRows);
if( dataRows1 > 0 )
{
Query = "update " + symbol + " set Bid = " + (string)Bid + ", Ask = " + ( string)Sor
+ ", Spread = " + DoubleToStr(spread, Digits)
+ ", Zaman = '" + TimeToString(TimeLocal(), TIME_DATE|TIME_SECONDS ) + "' where AccountNumber = "
+ (string)account; // + "' ve Symbol = '" + symbol + "'".
MySqlExecute(DB, Sorgu);
MySqlCursorClose(Cursor1);
}
else if( dataRows1 == 0 )
{
Query = "CREATE TABLE IF NOT EXISTS " + symbol + " (id int NOT NULL AUTO_ INCREMENT PRIMARY KEY, AccountNumber int, "
+ "Symbol char(20), Bid double, Ask double, Spread double,"
+ "Memo char(50), "
+ "Time datetime) ENGINE=MEMORY DEFAULT CHARSET=utf8 ";
MySqlExecute(DB, Sorgu);
Query = "INSERT INTO " + symbol + "(AccountNumber, Symbol, Bid, Ask, Spread. Memo, Time) VALUES ("
+ (string)account + ", '" + symbol + "', "+(string)Bid+", "+ (string)Ask + ", "
+ DoubleToStr(spread, Digits)
+ ", '" + (string)AccountCompany()
+ "', \'"+TimeToString(TimeLocal(), TIME_DATE|TIME_SECONDS)+"\')"";
if(MySqlExecute(DB, Query) ! = true )
{
//Query = "DROP TABLE IF EXISTS `data_table`";
//MySqlExecute(DB, Sorgu);
Query = "CREATE TABLE IF NOT EXISTS " + symbol + "(id int NOT NULL AUTO_INCREMENT PRIMARY KEY, AccountNumber int, "
+ "Symbol char(20), Bid double, Ask double, Spread double,"
+ "Memo char(50), "
+ "Zaman datetime) ENGINE=MEMORY DEFAULT CHARSET= utf8 ";
MySqlExecute(DB, Sorgu);
}
}
MySqlCursorClose(Cursor1); // ASLA CURSOR'U KAPATMAYI UNUTMAYIN !!!!
}
}
}
-->
Tamam, bu amaç için bir uzman danışman yazdığınızı görüyorum ve makalede yayınladığım öneriler olmadan yazılmış.
Öyleyse, adım adım ilerleyelim: 1.
1. " DB = cMySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag); " çağrısı OnInit() içinde yapılmalıdır OnTick() yerine standart fonksiyon.
2. cMySqlConnect kullanıyorsunuz - DLL'den içe aktarılan bir işlevdir, bunun yerine MySqlConnect işlevini kullanmanız gerekir cMySqlConnect fonksiyonu !
3. MySqlDisconnect fonksiyonunu OnDeinit() standart fonksiyonu içinde çağırmalısınız.
4. Bağlantının başarılı olduğundan emin olmak için OnTick() standart fonksiyonu içinde veritabanı bağlantı tanımlayıcısını kontrol etmeniz gerekir.
Sonunda şöyle görünecek.
Sorun, bir mt4'te ikiden fazla sembol için kullanılamamasıdır, yalnızca bir sembolde kullanılırsa normaldir. Dört veya daha fazla kullanıldığında, iyi çalışır, ancak birkaç dakika sonra "OnTick ()" sorununu yazdırır. dakika, "Erişim ihlali '...MQLMySQL.db' içinde 0x0000000B'ye okundu" sorununu yazdırır. .MQLMySQL.dll'"
Sınavların hepsi komut dosyasıdır, yalnızca bir kez çalıştırılır, Bir veya iki mt4'te dört veya daha fazla sembolde dll'yi çağıran bir uzman deneyebilirsiniz, sorunu bulabilirsiniz.
Dll'in bir memeoy sürümüne veya garbe koleksiyonuna ihtiyacı var mı?
CRT'nin sızıntıları dökmesini beklemek yerin e, çıktığında sızıntıları erken döker ve bu da MFC başlatılmadan önce bellek ayıran ve dolayısıyla MFC'den sonra i mha edile n nesneler için ο sahte sızıntı raporlarına neden olur nbsp;
MFC
başlatılmadan önce bellek ayıran ve bu nedenle MFC çıktıktan sonra yok edilen nesneler için sahte sızıntı raporları . Bu durum
genellikle
C++ çalışma zamanı DLL' sinide kullanan bir programda MFC DLL'si kullanıldığında gözlemlenir .
Tekrar merhaba.
Verdiğiniz koda dayanarak MQL'de yeni olduğunuzu tahmin ediyorum.
Üzgünüm, size öğretecek zamanım yok, ancak geliştirdiğim yazılımı test etmek için zamanım var.
Üzgünüm, size öğretecek zamanım yok, ancak geliştirdiğim yazılımı test etmek için zamanım var.
Mantığınıza göre sizin için test EA'sı oluşturdum: her tablo her döviz çifti için tanımlandı ve farklı hesaplar için çevrimiçi piyasa verilerini tutabilir.
Günlükleri inceleyebilirsiniz, "Erişim ihlali..." hatası alınmadı. Günlükleri inceleyebilirsiniz, "Erişim ihlali..." hatası alınmadı.
Sorun MQLMySQL kütüphanesinde değil.
EA'yı test ediyorum.
Bu, kütüphaneyi kullanmanın doğru mantığıdır.
Optimizasyon nedeniyle SELECT deyimini bile kullanmayabilirsiniz, sadece UPDATE deyimini çalıştırın, daha sonra (MySqlRowsAffected()==0) olup olmadığını kontrol edin, bu bir satır olmadığı anlamına gelir Güncellemelerin ~%100'üne sahipsiniz, bu nedenle INSERT deyimini uygulayın.
Güncellemelerin ~%100'üne sahipsiniz, bu nedenle bu geçici çözüm performansı artırabilir ve ağ trafiğini azaltabilir.
Ve sonunda, projenin tam kaynak kodları (DLL geliştirme dahil) makaleye eklenmiştir, kendi yolunuzla değiştirebilirsiniz.
Eğer sorunu MqlMySQL.DLL'de bulursanız, hata ayıklama yapabilir ve kendiniz düzeltebilirsiniz.
En iyi dileklerimle, Eugene
Eugene
Harika iş, çok teşekkür ederim Eugeniy.
Kodlarınız bana çok yardımcı oluyor, çok fazla zaman kazanabiliyorum. INSERT, SELECT, UPDATE ve DELETE sorgularını başarıyla yapmaya çalıştım. Yanılmıyorsam, "İmleç" yalnızca SELECT sorgusu için gereklidir ??
= pedma
Harika iş, çok teşekkür ederim Eugeniy.
Kodlarınız bana çok yardımcı oluyor, çok fazla zaman kazanabiliyorum. INSERT, SELECT, UPDATE ve DELETE sorgularını başarıyla yapmaya çalıştım. Yanılmıyorsam, "İmleç" yalnızca SELECT sorgusu için gereklidir ??
= pedma
Kesinlikle dostum!
İmleçler sadece veri seçimi için kullanılır çünkü db'den MQL değişkenine veri almamız gerekir, sadece sql komutunu veritabanına göndermek için değil.
Çözümümün size yardımcı olmasına sevindim.
İyi şanslar,
Eugene
Merhaba Eugene,
Satacağım bir EA'ya entegre edilmiş bir uzaktan ticaret kopyalayıcı oluşturmak istediğim için hala ücretli geliştirme projeleri yapıp yapmadığınızı merak ediyordum?
Upwork'e baktım ve son zamanlarda herhangi bir freelancer projesi tamamlamış görünmüyorsunuz.
Oluşturduğunuz kütüphaneyi kullanarak kendim denedim, ancak çok iyi sonuç vermedi. Gerçi sizin programlama yeteneğinize sahip biri için bunun kolay olacağından eminim!
Şimdiden teşekkürler,
James
Merhaba Eugene,
Satacağım bir EA'ya entegre edilmiş bir uzaktan ticaret kopyalayıcı oluşturmak istediğim için hala ücretli geliştirme projeleri yapıp yapmadığınızı merak ediyordum?
Upwork'e baktım ve son zamanlarda herhangi bir freelancer projesi tamamlamış görünmüyorsunuz.
Oluşturduğunuz kütüphaneyi kullanarak kendim denedim, ancak çok iyi sonuç vermedi. Gerçi sizin programlama yeteneğinize sahip biri için bunun kolay olacağından eminim!
Şimdiden teşekkürler,
James
Merhaba James,
Şu anda Upwork'te sadece bir büyük proje üzerinde çalışıyorum. Yani bugünlerde pek boş zamanım yok. Libs ile yaşadığınız sorun nedir? Size nasıl yardımcı olabilirim?