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

 

Serhii Shevchuk:

Yardım almak için zor bir adam olduğunuzun farkındayım.

Sorununuza nasıl ulaştığınızı söylemezseniz size nasıl yardımcı olabilirim?

Belki bir mac üzerinde çalışıyorsunuz ya da salt okunur izinlere sahip bir klasörünüz var.

Dosya sisteminizin ne olabileceğini bilmiyorum.

Araba forumundan:

xxx: yağ kapakları değiştirildikten sonra motor çatırdıyor. Nedenlerini ve sonuçlarının neler olabileceğini anlamaya yardımcı olun

uuu: pek çok neden olabilir, ancak sonuçlar farklı olabilir.

xxx: Teşekkürler.



Henüz nedenini bilmiyorum.

Öğrendiğinizde bana da haber verin.

 
Bu kütüphaneler karmakarışık olduğu için makalenin tamamını okumadım. Yine de, bu konuda gördüğüm ilk şey olduğu için kendime bazı şeyler aldım. Daha sonra resmi dokümantasyonu okumam gerektiğini fark ettim çünkü böyle bir makaleden hiçbir şey öğrenemezsiniz. Aslında, sqlite3_bind_xxx fonksiyonları hakkındaki bilgilerin doğru olmadığını söyleyeceğim. Makalenin yazarı yanıltıcıdır. Bu fonksiyonların amacı tamamen farklıdır. Makalenin yazarı konuyu kendisi incelemediyse veya sadece yazmak istemediyse yazmasa daha iyi olurdu. Makalede bu işlevsellikle ilgili o saçmalığı okuduktan sonra, bir saatten fazla düşünmek zorunda kaldım. Aynen öyle. DBMS ile çalışmaya bir hafta önce başladım. Daha yeni yeni alışıyorum. Bu yüzden anlamak kolay olmadı. Ve sqlite3_bind_xxx fonksiyonlarının ne işe yaradığını anladığımda şaşırdım. Makalenin yazarından böyle bir şey beklemiyordum. Onun bir profesyonel olduğunu düşünürdüm.
 
Yazıya ekli materyali test etmedim ama artılarda benzer bir hata alıyorum. Geçilen yolda bir base açamıyorum/oluşturamıyorum, hep ya proje dizininde ya da proje dizininden belirtilen yolda (/new folder/myDB.db) oluşturuluyor...

Base oluşturma ve kapatmafonksiyonlarını import edip oluşturmaya çalıştım. Sonuç olarak indirilenlerde oluşturulmuş veritabanına sahibim.
 
---:

Birçok neden ve birçok sonuç olabilir.

Teşekkürler, bu yardımcı oldu. Sorun çözüldü, soru kaldırıldı.

 
Çok ilginç bir durumum var) daha dün her şey oluşturuldu ve çalıştı ("İndirilenler" klasöründeki bir şeyden olsa da) Ancak, bir gecede taban dosyası oluşturulmayı durdurdu, ancak tabanın kendisi testler için olması gerektiği gibi çalışıyor belleğe yerleştirilmiş bir taban oluşturmaya çalıştı sqlite3_open(":memory:"") - taban oluşturulur, veriler yüklenir / okunur.

Belki de erişim haklarıyla ilgili bir sorun, ne düşünüyorsunuz? bunu Windows'ta nasıl kontrol edeceğimi kim bilir?
 
Andrey Azatskiy:
Çok ilginç bir durumum var) daha dün her şey oluşturuldu ve çalıştı ("İndirilenler" klasöründeki bir şeyden olsa da) Ancak, bir gecede taban dosyası oluşturulmayı durdurdu, ancak tabanın kendisi testler için olması gerektiği gibi çalışıyor belleğe yerleştirilmiş bir taban oluşturmaya çalıştı sqlite3_open(":memory:"") - taban oluşturulur, veriler yüklenir / okunur.

Belki de erişim haklarıyla ilgili bir sorun, ne düşünüyorsunuz? Windows'ta bunu nasıl kontrol edeceğimi kim bilir?

Aslında kontrol etmesi kolay. Yeni başlayanlar için veritabanını "Belgelerim" içine koymayı deneyin. Eğer çalışıyorsa, o zaman bu bir hak sorunu değildir. Ama genel olarak, bu nasıl yaptığınıza bağlıdır. Ben şahsen SQLite3 ile çalışmak için ihtiyacım olan her şeyi oluşturana kadar 2 hafta harcadım. Belgeleri çevirmek zorunda kaldım, çünkü Rusça'da bu konuda yeterli bilgi yok. Bu makalede olduğu gibi çok fazla saçmalık ve levak var. Yukarıda o anlardan birine dikkat çektim. Sonra durdum ve konuyu kendim inceledim.

Bunun için böyle bir sarmalayıcım var:

//==================================================================================================================================================================================
// sqlite3_open_v2 için temel sarmalayıcı. ==============================================================================================================================================
int SQLite3 :: sqlite3_open(const string& filename, intptr_t& dbHandle, int flags) {
  uchar utf8_filename[];
  stringToUtf8(filename, utf8_filename);
  return sqlite3_open_v2(utf8_filename, dbHandle, flags, 0);
}

İşte stringToUtf8 fonksiyonu:

//==================================================================================================================================================================================
// Bir dizeyi utf-8 bayt dizisine dönüştürün. =========================================================================================================================================
void stringToUtf8(const string strToConvert,                     // utf-8 kodlamasında bir diziye dönüştürülecek dize
                  uchar& utf8[],                                 // Dönüştürülen strToConvert dizesinin yerleştirileceği utf-8 kodlamasında dizi
                  const bool untilTerminator = true) export {    // utf8 dizisine kopyalanacak ve utf-8 kodlamasına dönüştürülecek karakter sayısı.
//---
  int count = untilTerminator ? -1 : StringLen(strToConvert);
  StringToCharArray(strToConvert, utf8, 0, count, CP_UTF8);
}

Ayrı bir kütüphanem var.

 
Viktar Dzemikhau:

Aslında kontrol etmesi kolay. Yeni başlayanlar için veritabanını "Belgelerim" içine koymayı deneyin. Eğer çalışıyorsa, o zaman bu bir hak meselesi değildir. Ancak genel olarak, her şeyi nasıl yaptığınıza bağlıdır. Ben şahsen SQLite3 ile çalışmak için ihtiyacım olan her şeyi oluşturana kadar 2 hafta harcadım. Belgeleri çevirmek zorunda kaldım, çünkü Rusça'da bu konuda yeterli bilgi yok. Bu makalede olduğu gibi çok fazla çöp ve levak var. Yukarıda o anlardan birini çektim. Sonra pes ettim ve konuyu kendim inceledim.

Bunun için bir paketleyicim var:

Ve işte stringToUtf8 işlevi:

Ayrı bir kütüphanem var.

Evet, 2 hata aldım:
1 - kodlama (işlev için çok teşekkürler, normalde UTF -8'e nasıl çevireceğimi bilmiyordum)
2 - izinler.


 
Andrey Azatskiy:

Evet, 2 hata aldım:
1 - kodlama (işlev için çok teşekkürler, normalde UTF -8'e nasıl çevireceğimi bilmiyordum)
2 - izinler.


Evet, rica ederim. Bununla kendim ne kadar mücadele ettiğimi hatırlıyorum. Böyle üzücü makalelerle. Tek bir seçenek var. Ya resmi belgeleri okursunuz ya da sorarsınız. Soracak kimse yoktu. Kendim çalışmak zorunda kaldım. Mesele şu ki, eğer C++ ile yazıyorsanız, soracak biri vardır. Ama bir contanın içinden yazıp µl'ye aktardığınızda size yardımcı olabilecek çok az kişi var. Plus kullanıcılarının bu işe girmesi çok zor)))

 

Sanırım bir bellek sızıntısı buldum:

SQLite3Base.mqh satır 250'de

::sqlite3_finalize(stmt); // temiz

Öyle olmalı:

::sqlite3_finalize(pstmt); // temiz
 
Viktar Dzemikhau:

Aslında kontrol etmesi kolay. Yeni başlayanlar için veritabanını "Belgelerim" içine koymayı deneyin. Eğer çalışıyorsa, o zaman bu bir hak meselesi değildir. Ancak genel olarak, her şeyi nasıl yaptığınıza bağlıdır. Ben şahsen SQLite3 ile çalışmak için ihtiyacım olan her şeyi oluşturana kadar 2 hafta harcadım. Belgeleri çevirmek zorunda kaldım, çünkü Rusça'da bu konuda yeterli bilgi yok. Bu makalede olduğu gibi çok fazla çöp ve levak var. Yukarıda o anlardan birini çektim. Sonra pes ettim ve konuyu kendim inceledim.

Bunun için bir paketleyicim var:

Ve işte stringToUtf8 işlevi:

Ayrı bir kütüphanem var.

ve utf'ye dönüştürmek için kullanıyorum

int u2a(string txt,uchar &out[]){ return(StringToCharArray(txt,out))};