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

 

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.

... your code
int DB = -1; // veritabanı tanımlayıcısı//--
... your code
int OnInit()
{
   DB = MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag); 

   if (DB != -1)
    {
    // bağlantı başarılı!
    // burada tablo oluşturma mantığını tanımlamanız gerekir
   }
   return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
 {
 MySqlDisconnect(DB);
 }

void OnTick()
{
 // ilk komut.
 if (DB==-1) return; // bağlantı olmadığında herhangi bir işlem yapma

 // burada cMySqlConnect çağrısı olmadan kodunuz
}
You have to rebuild your code based on the requirements of project, as I see the currently there is no clear logic, everything messed up.
 
elugovoy:

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.

Teşekkürler, tekrar deneyeceğim ve sonucu geri vereceğim.
 
elugovoy:

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 !!!!

}

}

}

-->

 
elugovoy:

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ı?

 
MFC , statik veri imhasının ardından
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 &#959; 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.

//+------------------------------------------------------------------+
//|& nbsp; &nbsp ; DFTest.mq4 |
//|& nbsp; Telif Hakkı 2014, MetaQuotes Software Corp. |
//|& nbsp; &nbsp ; http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property strict
#include <MQLMySQL.mqh>

input string Host = "localhost";
input string User = "root";
input string Password = "ioctrl";
input string Database = "mysql";
input int Port = 3306;
input string Socket = "";
input int ClientFlag = 0;

input int Timer = 1; // Zamanlayıcı (saniye) şimdi kullanılmıyor

int DB;

int OnInit()
{
 SQLTrace = true; // tüm sorguların veritabanına gönderileceğini görmek için
       EventSetTimer(Timer);
       DB = MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag); 
       if( DB == -1 )
       {
            Print("Database is not connected! Error: ", MySqlErrorDescription);
            return (INIT_FAILED);
       }
       
 // mevcut değilse tablo oluştur
 string cmd;
 cmd = "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";
 if (!MySqlExecute(DB, cmd))
    {
     Print ("Table creation error: ",MySqlErrorDescription);
     return (INIT_FAILED);
    }
                      

       return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{
      MySqlDisconnect(DB); 
      EventKillTimer();
}


void OnTimer()
{
 // OnTick'i asla OnTimer'dan çağırmamalısınız ya da tam tersi.
 // bu 2 fonksiyonun hedefi farklıdır
}

void OnTick()
{
 int account;
 string symbol;
 double spread;
 string Query, cmd;
 int Cursor;
 int Rows;
 
 if (DB == -1)
    {
    Comment("Database is not connected ... ");
    return;
    }

 if ( IsExpertEnabled() && IsConnected() && AccountNumber() > 0 )
    {
     account = AccountNumber();
     symbol = "`"+Symbol()+"`"; // tablo adı olarak kullanmanız gerekiyorsa, MySQL veritabanı için iyi bir uygulama olarak tırnak işareti kullanmanız gerekir
     
 
 spread = (Ask - Bid);
 
 // mümkünse şöyle bir şey kullanmak daha iyi olabilir: admission = MarketInfo(symbol, MODE_SPREAD);
 Query = "SELECT * FROM " + symbol + " where AccountNumber = " + (string)account;
 Cursor = MySqlCursorOpen(DB, Query);
 if (Cursor >= 0)
    {
      Rows = MySqlCursorRows(Cursor);
      if ( Rows > 0 )
         {
          cmd = "update " + symbol + " set Bid = "+(string)Bid + ", Ask = " + (string)Ask
                       + ", Spread = " + DoubleToStr(spread, Digits)  
                       + ", Time = '" + TimeToString(TimeLocal(), TIME_DATE|TIME_SECONDS) +"' where AccountNumber = " + (string)account;
         }
      else
         {
          cmd = "INSERT INTO " + symbol + "(AccountNumber, Symbol, Bid, Ask, Spread, Memo, Time) VALUES (" 
                + (string)account + ", \'" + symbol + "\', "+DoubleToStr(Bid,Digits)+","+ DoubleToStr(Ask,Digits) + ","  + DoubleToStr(spread, Digits) 
                + ", \'" + AccountCompany() +"\', \'"+TimeToString(TimeLocal(), TIME_DATE|TIME_SECONDS)+"\')";
         }
      if (!MySqlExecute(DB, cmd))
         {
          Print("Updating error: ",MySqlErrorDescription);
          Print (cmd);
         }

      MySqlCursorClose(Cursor);
     }
  }

} 

 

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

Dosyalar:
logs.zip  302 kb
 

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

//+------------------------------------------------------------------+
//|MySQL-006.mq4 |
//|Telif Hakkı 2014, Eugene Lugovoy |
//| http://www.fxcodexlab.com |
//| Select, Insert, Update & Delete Query|
//| tarafından değiştirildi : pedma|
//+------------------------------------------------------------------+

#property copyright "Copyright 2014, Eugene Lugovoy."
#property link      "http://www.fxcodexlab.com"
#property version   "1.00"
#property strict

#include <MQLMySQL.mqh>

string INI;
//+------------------------------------------------------------------+
//| Betik program başlatma işlevi|
//+------------------------------------------------------------------+
void OnStart() {
 string Host, User, Password, Database, Socket; // veritabanı kimlik bilgileri
 int Port,ClientFlag;
 int DB; // veritabanı tanımlayıcısı
 
 Print (MySqlVersion());

 INI = "C:\\This\\Must\\be\\Real\\Path\\To\\MyConnection.ini";
 
 // INI dosyasından veritabanı kimlik bilgilerini okuma
 Host = ReadIni(INI, "MYSQL", "Host");
 User = ReadIni(INI, "MYSQL", "User");
 Password = ReadIni(INI, "MYSQL", "Password");
 Database = ReadIni(INI, "MYSQL", "Database");
 Port     = StrToInteger(ReadIni(INI, "MYSQL", "Port"));
 Socket   = ReadIni(INI, "MYSQL", "Socket");
 /// ClientFlag = StrToInteger(ReadIni(INI, "MYSQL", "ClientFlag")); 
 ClientFlag = CLIENT_MULTI_STATEMENTS;

 Print ("Host: ",Host, ", User: ", User, ", Database: ",Database);
 
 // veritabanı bağlantısını aç
 Print ("Connecting...");
 
 DB = MySqlConnect(Host, User, Password, Database, Port, Socket, ClientFlag);
 
 if (DB == -1) { Print ("Connection failed! Error: "+MySqlErrorDescription); return; } else { Print ("Connected! DBID#",DB);}
 
 // SELECT deyimi çalıştırılıyor
 string Query0,Query1,Query2,Query3,Query4,Query5,Query6,Query7;
 int    i,Cursor1,Cursor3,Cursor5,Cursor7,Rows,total;
 
 int      vId;
 string   vCode;
 datetime vStartTime;
 
 Query0 = "DROP TABLE IF EXISTS `test_table`";
 MySqlExecute(DB, Query0);
 
 Query0 = "CREATE TABLE `test_table` (id int, code varchar(50), start_date datetime)";
 if (MySqlExecute(DB, Query0))  {
     Print ("Table `test_table` created.");
 }
 else  {
     Print ("Table `test_table` cannot be created. Error: ", MySqlErrorDescription);
 }
 
 //--- veri ekleniyor
 Query0 = "INSERT INTO `test_table` (id, code, start_date) VALUES ("+(string)AccountNumber()+",\'ACCOUNT\',\'"+TimeToStr(TimeLocal(), TIME_DATE|TIME_SECONDS)+"\')";
  if (MySqlExecute(DB, Query0))   {
      Print ("Succeeded: ", Query0);
  }
  else  {
      Print ("Error: ", MySqlErrorDescription);
      Print ("Query: ", Query0);
  }
  
  // çoklu ekleme
  Query0 =          "INSERT INTO `test_table` (id, code, start_date) VALUES (1,\'EURUSD\',\'2014.01.01 00:00:01\');";
  Query0 = Query0 + "INSERT INTO `test_table` (id, code, start_date) VALUES (2,\'EURJPY\',\'2014.01.02 00:02:00\');";
  Query0 = Query0 + "INSERT INTO `test_table` (id, code, start_date) VALUES (3,\'USDJPY\',\'2014.01.03 03:00:00\');";
  if (MySqlExecute(DB, Query0))   {
      Print ("Succeeded! 3 rows has been inserted by one query.");
  }
  else  {
      Print ("Error of multiple statements: ", MySqlErrorDescription);
  }

 //--- select query, Cursor'a ihtiyaç var ----
 Query1 = "SELECT id, code, start_date FROM `test_table`";
 Print ("SQL> ", Query1);
 Cursor1 = MySqlCursorOpen(DB, Query1);
 
 if (Cursor1 >= 0)  {
     Rows = MySqlCursorRows(Cursor1);
     Print (Rows, " row(s) selected.");
     for (i=0; i<Rows; i++) {
         if (MySqlCursorFetchRow(Cursor1))   {
             vId = MySqlGetFieldAsInt(Cursor1, 0); // id
             vCode = MySqlGetFieldAsString(Cursor1, 1); // kod
             vStartTime = MySqlGetFieldAsDatetime(Cursor1, 2); // start_time
             Print ("ROW[",i,"]: id = ", vId, ", code = ", vCode, ", start_time = ", TimeToStr(vStartTime, TIME_DATE|TIME_SECONDS));
         }
         total += vId;
     }
     //--- sorguya dayalı olarak veri ekle
     Query2 = "INSERT INTO `test_table` (id, code, start_date) VALUES ("+(string)total+",\'ABCDEF\',\'"+TimeToStr(TimeLocal(), TIME_DATE|TIME_SECONDS)+"\');  ";
     if (MySqlExecute(DB, Query2))  {
         Print ("Succeeded! 1 new row has been inserted.");
     }
     else  {
         Print ("Error inserting data based on SELECT query : ", MySqlErrorDescription);
     }
     //---
     MySqlCursorClose(Cursor1); // IMLECI KAPATMAYI ASLA UNUTMAYIN !!!
 }
 else  {
     Print ("Cursor1 opening failed. Error: ", MySqlErrorDescription);
 }
     
 //--- select için yeni Cursor --- 
 Query3 = "SELECT id, code, start_date FROM `test_table`";
 Print ("SQL> ", Query3);
 Cursor3 = MySqlCursorOpen(DB, Query3);
 if (Cursor3 >= 0)  {
     Rows = MySqlCursorRows(Cursor3);
     Print (Rows, " row(s) selected.");
     for (i=0; i<Rows; i++) {
         if (MySqlCursorFetchRow(Cursor3))   {
             vId = MySqlGetFieldAsInt(Cursor3, 0); // id
             vCode = MySqlGetFieldAsString(Cursor3, 1); // kod
             vStartTime = MySqlGetFieldAsDatetime(Cursor3, 2); // start_time
             Print ("ROW[",i,"]: id = ", vId, ", code = ", vCode, ", start_time = ", TimeToStr(vStartTime, TIME_DATE|TIME_SECONDS));
         }
     }
     //--- verileri güncelle ----
     Query4 = "UPDATE `test_table` SET id=8,code='PQRXYZ',start_date=\'"+TimeToStr(TimeLocal(), TIME_DATE|TIME_SECONDS)+"\' WHERE code='ABCDEF';  ";
     if (MySqlExecute(DB, Query4))  {
         Print ("Succeeded! last row has been updated (code ABCDEF => PQRXYZ & new id=8.");
     }
     else  {
         Print ("Error updating data of last row : ", MySqlErrorDescription);
     }
     //---
     MySqlCursorClose(Cursor3); // IMLECI KAPATMAYI ASLA UNUTMAYIN !!!
 }
 else  {
     Print ("Cursor3 opening failed. Error: ", MySqlErrorDescription);
 }
 
 //--- güncellendikten sonra sonucu göster, yeni imleç gerekli ---- 
 Query5 = "SELECT id, code, start_date FROM `test_table`";
 Print ("SQL> ", Query5);
 Cursor5 = MySqlCursorOpen(DB, Query5);
 if (Cursor5 >= 0)  {
     Rows = MySqlCursorRows(Cursor5);
     Print (Rows, " row(s) selected.");
     for (i=0; i<Rows; i++) {
         if (MySqlCursorFetchRow(Cursor5))   {
             vId = MySqlGetFieldAsInt(Cursor5, 0); // id
             vCode = MySqlGetFieldAsString(Cursor5, 1); // kod
             vStartTime = MySqlGetFieldAsDatetime(Cursor5, 2); // start_time
             Print ("ROW[",i,"]: id = ", vId, ", code = ", vCode, ", start_time = ", TimeToStr(vStartTime, TIME_DATE|TIME_SECONDS));
         }
     }
     //--- sorguyu sil ---
     Query6 = "DELETE FROM `test_table` WHERE id=3;  ";
     if (MySqlExecute(DB, Query6))  {
         Print ("Succeeded! 1 row (id=3) has been deleted.");
     }
     else  {
         Print ("Error deleting 1 row : ", MySqlErrorDescription);
     }
     //---
     MySqlCursorClose(Cursor5); // IMLECI KAPATMAYI ASLA UNUTMAYIN !!!
 }
 else  {
     Print ("Cursor3 opening failed. Error: ", MySqlErrorDescription);
 }
 
 //--- silindikten sonra sonucu göster, başka bir imleç gereklidir --- 
 Query7 = "SELECT id, code, start_date FROM `test_table`";
 Print ("SQL> ", Query7);
 Cursor7 = MySqlCursorOpen(DB, Query7);
 if (Cursor7 >= 0)  {
     Rows = MySqlCursorRows(Cursor7);
     Print (Rows, " row(s) selected.");
     for (i=0; i<Rows; i++) {
         if (MySqlCursorFetchRow(Cursor7))   {
             vId = MySqlGetFieldAsInt(Cursor7, 0); // id
             vCode = MySqlGetFieldAsString(Cursor7, 1); // kod
             vStartTime = MySqlGetFieldAsDatetime(Cursor7, 2); // start_time
             Print ("ROW[",i,"]: id = ", vId, ", code = ", vCode, ", start_time = ", TimeToStr(vStartTime, TIME_DATE|TIME_SECONDS));
         }
     }
     //---
     MySqlCursorClose(Cursor7); // IMLECI KAPATMAYI ASLA UNUTMAYIN !!!
 }
 else  {
     Print ("Cursor3 opening failed. Error: ", MySqlErrorDescription);
 }
 //----- sonunda ---- 
 MySqlDisconnect(DB);
 Print ("Disconnected. Script done!");
}
//+------------------------------------------------------------------+




 
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

 
James Beach:

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?