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

 
Yazara teşekkür ederim, bu projeyi yerel olarak değiştirdim, böylece MySQL DB kod sayfasında UTF8'de saklanan İngilizce olmayan kelimeleri kullanabiliyorum.
 
Amy Liu:
Yazara teşekkür ederim, bu projeyi yerel olarak değiştirdim, böylece MySQL DB kod sayfasında UTF8'de saklanan İngilizce olmayan kelimeleri kullanabiliyorum.

Merhaba Amy. Bu harika, kendi başıma yapacak zamanım yoktu. Eğer sizin için de uygunsa, kaynakları toplulukla paylaşabilir misiniz?

 

Herkese merhaba!

Ne yazık ki, bu projeyi desteklemek ve toplulukta zaman geçirmek için zamanım yok, bu yüzden All My Dears beni cevapsız sorular ve sessizliğim için affedin.

Ancak burada başkalarına yardımcı olabilecek bazı deneyimli insanlar görüyorum ve bu gerçekten harika.

Kütüphanemi kullandığınız, işlevselliğini genişlettiğiniz ve kendi deneyimlerinizi edindiğiniz için hepinize teşekkür ederim.

Projelerinizde herkese iyi şanslar!


Saygılarımla,

Eugene

 
dragossh:

Merhaba Eugeniy Lugovoy,

Öncelikle, bu projeyi yapmak için zaman ayırdığınız için teşekkür ederim.

Haftalardır bir ticaret hesabındaki tüm açık / kapalı işlemlerin mümkünse gerçek zamanlı olarak bir MySQL tablosuna nasıl aktarılacağını / güncelleneceğini arıyordum. kütüphanenizi kullanarak bunu yapmanın bir yolu var mı?

Şimdiden çok teşekkürler.

Dragos

Merhaba Dragos!

Elbette, Mysql veritabanınıza veri eklemek ve bunları güncel tutmak için bu kütüphaneyi kullanarak EA oluşturabilirsiniz (gerçek zamanlı güncellemeye yakın).

MT4 / 5'teki kapalı siparişlerin yalnızca Geçmiş sekmesinde listelendiklerinde programlı olarak mevcut olduğuna dikkat edin. Dolayısıyla, filtreyi Geçmiş 3 son gün olarak ayarlarsanız - yalnızca o dönemde işlenen işlemlere erişebilirsiniz.

Bu kütüphaneye bağlı değil, sadece MQL-MT4 altyapısı.

Saygılar,

Eugene

 

'\MQL4\libraries\MQLMySQL.dll' içinde 0x000003B0 öğesine erişim ihlali okuması

Nereyi kazacağımı söyleyebilir misiniz?

İşletim sistemi win 10, mariadb 5.5.59
 

Eugene,

Çalıştırması çok basit olduğu için yine harika bir iş.

Merak ediyorum, siz veya burada başka biri bunu Strateji Test Cihazında çalıştırmayı denedi mi? Komut dosyasını canlı ortamda bir indie üzerine geliştirdim ve her şey yolunda, ancak bir geri test ortamına entegre etme şansı yok.


br George

 
Eugeniy Lugovoy:

Merhaba Amy. Bu harika, kendi başıma yapacak zamanım yoktu. Eğer sizin için de uygunsa, kaynakları toplulukla paylaşabilir misiniz?

Merhaba Eugeniy,

Geç yanıt için özür dilerim. İşte kodunuzla yaptığım şey.MultiByteToWideChar kullanmak için sadece bir cMySqlGetRowField işlevini değiştirdim. Orijinal kod karşılaştırma için yorumlanmıştır.

// alan değerinin dize gösterimini döndürür
// MySqlCursorFetchRow() işlevinden sonra çağrılmalıdır
// pCursorID - CURSOR IDENTIFIER
// pField - SELECT listesindeki alan sayısı (0'dan başlayarak) - 0,1,2 vb.
MT4_EXPFUNC wchar_t* __stdcall cMySqlGetRowField(int pCursorID, unsigned int pField)
{
        SCOPE_LOCK_MUTEX(g_mutex.get());
        ClearCursorErrors(pCursorID);
        if ((pCursorID >= 0) && (pCursorID < MAX_CURSORS) && (Cursors[pCursorID].Id!=-1))
        {
                if ((pField >= 0) && (pField < mysql_num_fields(Cursors[pCursorID].RecordSet)))
                {
                        // 预算-缓冲区中宽字节的长度
                        int unicodeLen = MultiByteToWideChar(CP_UTF8, 0, Cursors[pCursorID].CurrentRow[pField], -1, nullptr, 0);
                        if (unicodeLen<=1024)
                        {
                                // 开始向缓冲区转换字节
                                MultiByteToWideChar(CP_UTF8, 0, Cursors[pCursorID].CurrentRow[pField], -1, Cursors[pCursorID].Value, unicodeLen);
                                return(Cursors[pCursorID].Value);
                        }
                        //sprintf_s(Cursors[pCursorID].Value, "%s", Cursors[pCursorID].CurrentRow[pField]);
                        //swprintf(Cursors[pCursorID].Value, 1024, L"%S", Cursors[pCursorID].CurrentRow[pField]);
                        //return (Cursors[pCursorID].Value);
                }
                else
                {
                        Cursors[pCursorID].CursorErrorNumber = -4;
            swprintf(Cursors[pCursorID].CursorErrorDescription, 32, L"Wrong number of field.\x00");
                }
        }
        else
        {
                CursorErrorNumber = -5;
                swprintf(CursorErrorDescription, 32, L"Wrong CURSOR identifier.\x00");
        }
        return (WideNull);
}
 

Merhaba meslektaşlarım, bir sorum var:

Uzman Danışman bir terminalde çalıştığında sorun yok, aynı Uzman Danışmanı başka bir terminalde çalıştırdığımda sürekli aşağıdaki hatayı yazıyor:

İmleç #0 kapanış hatası: -5: Yanlış İMLEÇ tanımlayıcısı.

sorun ne olabilir?

 
Dmitry Melnichenko:

Merhaba meslektaşlarım, size bir sorum var:

Uzman Danışman bir terminalde çalıştığında sorun yok, aynı Uzman Danışmanı başka bir terminalde çalıştırdığımda sürekli bu hata yazıyor:

İmleç #0 kapanış hatası:-5: Yanlış İMLEÇ tanımlayıcısı.

Sorun ne olabilir?

Farklı kimlik bilgileri altında bağlanmayı deneyin. Yani, MySQL için başka bir giriş/geçiş ile. Yani, veritabanı için uygun izinlere sahip başka bir giriş oluşturun.

ve işlem modunda çalışın.


 
Maxim Kuznetsov:

farklı kimlik bilgileri altında bağlanmayı deneyin. Yani, MySQL için başka bir giriş/geçiş ile. Yani, veritabanı için uygun haklara sahip başka bir oturum açın.

ve işlem modunda çalışır.


Yeni bir kullanıcı oluşturdum, onun kimlik bilgileriyle bağlanmayı denedim, işe yaramadı!