"SQL ve MQL5: SQLite Veritabanı ile Çalışmak" makalesi için tartışma - sayfa 3

 

Test betiği:

//--- DAHİL OLANLAR 
#include <MQH\Lib\SQLite3\SQLite3Base.mqh>
//--- DEĞIŞKENLER
CSQLite3Base   sql3;
CSQLite3Table  testTable;
CSQLite3Cell   testCell;
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
void OnStart()
  {
//--- VERITABANI BAĞLANTISINI AÇ
   if(sql3.Connect("test.db3")!=SQLITE_OK)
     {Print(sql3.ErrorMsg()); DebugBreak(); return;}
   else
      Print("CONNECTED TO DB.");
//--- CEATE TABLOSU
   if(sql3.Query("DROP TABLE IF EXISTS [test]")!=SQLITE_DONE)
     {Print(sql3.ErrorMsg()); DebugBreak(); return;}
   if(sql3.Query("CREATE TABLE [test] ([i] INT)")!=SQLITE_DONE)
     {Print(sql3.ErrorMsg()); DebugBreak(); return;}
   else
      Print("TABLE CREATED.");
//--- DEĞER EKLE
   if(sql3.Query("INSERT INTO [test] VALUES(1)")!=SQLITE_DONE)
     {Print(sql3.ErrorMsg()); DebugBreak(); return;}
   else
      Print("VALUE \"1\" INSERTED.");
//--- TABLO SATIRLARINI SAY
   if(sql3.Query(testTable,"SELECT COUNT(*) FROM [test]")!=SQLITE_DONE)
     {Print(sql3.ErrorMsg()); DebugBreak(); return;}
   testTable.Cell(0,0,testCell);
   Print("RETRIEVED DATA FROM TABLE : Count(*)=",testCell.GetInt());
   
  }
//+------------------------------------------------------------------+

+Karşılaştırma amacıyla int ViewInt() içine __int d0 yazdırıldı ve test edildi

      Print(__FUNCSIG__," || ENTER FUNCTION");
      
      //--- TEST d0 
      __int d0={0};  Print ("TEST d0: d0.v=",d0.v, " DATA d.b:"); ArrayPrint(d0.b);
      ViewArray(d0.b,0,4);
      Print("ViewArray OUTPUT: d0.v=",d0.v," DATA d.b:"); ArrayPrint(d0.b);
      
      //--- d - OLDUĞU GİBİ+bazı Baskılar
      __int d; d.v=0; Print("\n","d AS WAS: d.v=",d.v," DATA d.b:"); ArrayPrint(d.b);
      ViewArray(d.b,0,4);
      Print("ViewArray OUTPUT: d.v=",d.v, " DATA d.b:"); ArrayPrint (d.b);
      //---
       return(d.v);

ÇIKTI:

//DB'YE BAĞLANDI.
//TABLO OLUŞTURULDU.
//DEĞER "1" EKLENMIŞTIR.
//int CSQLite3Cell::GetInt() || ENTER FONKSİYONU
//int CSQLite3Cell::GetInt() || type=CT_INT case
//int CByteImg::ViewInt() || ENTER FONKSİYONU
//TEST d0: d0.v=0 VERİ d.b:
//0 0 0 0
//ViewArray OUTPUT: d0.v=1 DATA d.b:
//1 0 0 0
// 
//d OLDUĞU GİBİ: d.v=0 VERİ d.b:
//0 0 0 0
//ViewArray ÇIKTI: d.v=0 DATA d.b:
//10 0 0
/VERİLER TABLODAN GERİ ALINDI : Count(*)=0

Önceki mesajları yazmadan önce kodunuzu okudum @o_o ve bir birleşme olduğunu gayet iyi gördüm - bu yüzden bu hata bana da garip geldi, ama belli ki orada.

Bununla birlikte, lib'deki hatayı bulamadım (kodun ilerisinde - ViewArray ve yapıcılarda __int) . Bununla birlikte, OUTPUT 'ta vurgulanan şeyden (union için açıkça garip), "tür" derleyicinin ViewArray'den sonra __int'deki değişikliği görmediğini varsayabilirim ( . b) ve d. v'nin kendisine "bakmadan" önbellekten .v = 0 (vurgulanan) için bilinen son değeri döndürdü .

Ancak burada sadece varsayımlarım var, çünkü derleyicinin kendisini görmedim ve tekrar ediyorum, kodunuzda bu hatayla ilgili herhangi bir hata bulamadım.

 
MetaQuotes Software Corp.:

Yeni makale SQL ve MQL5: SQLite Veritabanı ile Çalışma yayınlandı:

Yazar: o_O


Hey dostum, harika bir makale.

 

İyi günler,

Komut dosyasını çalıştırırken 2 uyarı alıyorum:

2017.09.26 07:39:35.569 SQLite3Test 'C:\Users\Roman\AppData\Roaming\MetaQuotes\Terminal\MQL5\Libraries\sqlite3_32.dll' 64 bit sürüm değil

2017.09.26 07:39:35.602 SQLite3Test (GAZP,H1) 'C:\Users\Roman\AppData\Roaming\MetaQuotes\Terminal\MQL5\Libraries\sqlite3_32.dll' yüklenemiyor [193]


Hem 32 hem de 64 kütüphaneleri arşivdeydi. Bende Win7 64 var. Anlamıyorum - ne yapmam gerekiyor?


 
rvkstudent:
Komut dosyasını çalıştırırken 2 uyarı alıyorum:

2017.09.26 07:39:35.569 SQLite3Test 'C:\Users\Roman\AppData\Roaming\MetaQuotes\Terminal\MQL5\Libraries\sqlite3_32.dll' 64 bit sürüm değil
2017.09.26 07:39:35.602 SQLite3Test (GAZP,H1) 'C:\Users\Roman\AppData\Roaming\MetaQuotes\Terminal\MQL5\Libraries\sqlite3_32.dll' yüklenemiyor [193]

Hem 32 hem de 64 kütüphaneleri arşivdeydi. Bende Win7 64 var. Anlamıyorum - ne yapmam gerekiyor?

hiçbir şey

bu MT'nin içe aktarmaya verdiği tepkidir, ancak kod çalışmaya devam eder.

Ekte PrintTable işlevi için bir düzeltme bulunmaktadır.

Dosyalar:
sql_ft__mql5.zip  808 kb
 
MetaQuotes Software Corp.:

Yeni makale SQL ve MQL5: SQLite Veritabanı ile Çalışmak yayınlandı:

Yazar: o_O


32 bit sürümünüz var mı?

Sorun şu ki çok sayıda 32 bit müşterim var...

 

Merhaba.

SQLite3Test.mq5 dosyasını çalıştırdığımda 14 hatası alıyorum (SQLITE_CANTOPEN). Neyi yanlış yapıyorum?

 
Serhii Shevchuk:

Merhaba.

SQLite3Test.mq5 dosyasını çalıştırdığımda 14 hatası alıyorum (SQLITE_CANTOPEN).

Neyi yanlış yapıyorum?

hata ayıklamıyor veya hata konumunu günlüğe kaydetmiyor

 
o_o:

hata ayıklama yapmayın veya hata konumunu günlüğe yazdırmayın

1. Komut dosyasını arşivden "olduğu gibi" çalıştırıyorum.

2. "Gerçek veriler üzerinde" hata ayıklama. İlk fonksiyonu giriyorum:

//--- veritabanı bağlantısını aç
   if(sql3.Connect("SQLite3Test.db3")!=SQLITE_OK)
      return;

3. SQLite3Base.mqh dosyasında bu yere ulaşıyorum:

int CSQLite3Base::Reconnect()
  {
   Disconnect();
   uchar file[];
   StringToCharArray(m_dbfile,file);
   int res=::sqlite3_open(file,m_db);
   m_bopened=(res==SQLITE_OK && m_db);
   return(res);
  }

4. Satırı çalıştırdıktan sonra

int res=::sqlite3_open(file,m_db);

Res değeri 14'e eşit. Bu senaryonun sonu.

Yine de, makalenin metnine bakılırsa, şöyle olması gerekir

"В результате работы появится файл базы данных в папке установки терминала MetaTrader 5."

Sebebi ne olabilir? Hangi yöne bakmalı?

 

İndirilen komut dosyası kontrol edildi


Her şey ilk seferinde doğru çalıştı




Serhii Shevchuk:

Hangi yöne bakmalı?

buradan başlayın

 
o_o:

İndirilen komut dosyası kontrol edildi

Ben de kontrol ettim:

Hala hata 14.

Sizden yardım almanın zor olduğunun farkındayım. Bunu kendim çözmem gerekecek. Sadece örneğinizin her yerde çalışmadığını unutmayın. Nedenini bilmiyorum.