sqlite3 Problem



  • Welches OS ?
    Ich benutze WinCE.

    Zugriffsrechte auf das Verzeichnis ?
    Ein einfacher Dateizugriff funktioniert im gleichen Verzeichnis.

    Genug Speicher ? Prüfe ich gerade aber die Datei ist nur 600kB groß.

    Platte voll ? Platte ist definitiv nicht voll

    Gruß Sitt0030



  • http://de.wikipedia.org/wiki/Microsoft_Windows_CE

    Eine der wichtigsten Änderungen, die Windows CE 5.0 mitbringt, betrifft den Speicher: Der interne Datenspeicher befindet sich nicht mehr im flüchtigen RAM, sondern als sogenannter Persistent Storage im Flash-ROM, was nun vor Datenverlust schützt, wenn die Akku-Energie aufgebraucht ist. Außerdem lässt das nunmehr modular aufgebaute Betriebssystem im ROM erstmals ein selektives Update zu und muss nicht mehr komplett geflasht (überschrieben) werden, wenn der Hersteller bzw. OEM Bugfixes, Verbesserungen oder Ergänzungen anbieten will.

    Sagen wir mal, es gibt genug Fallen.

    also, was ist ?



  • Wird vermutlich am Problem nix ändern, aber ...

    void Test(void) 
     { 
         int result; 
         sqlite3 *Database = 0; // <----
    
         result = sqlite3_open("/Data/File/Sample1.db" , &Database); 
    
         if(result == 0) 
         { 
             // ...
    
             // Das war`s, wir schließen die Datenbank: 
             sqlite3_close(Database); // <---- 
         } 
         else 
         { 
             // Anfrage an Datenbank: Wir wollen alle Felder aus der Spalte "eintrag": 
             // Wie wo was huch?
             // Nix Anfrage an Datenbank, wir haben hier nämlich keine Datenbank!
         } 
     }
    


  • sqlite3 *Database = 0; // <----
    

    In Database schreibt sqlite das Handle rein, das isses nich ...

    Der OP könnte ja einfach mal im Quellcode sqlites nachsehen wann es die
    Meldung absetzt.



  • Scheppertreiber schrieb:

    sqlite3 *Database = 0; // <----
    

    In Database schreibt sqlite das Handle rein, das isses nich ...

    Ja, das ist mir auch klar 🙄
    Manchmal frag' ich mich echt ob ich hier von manchen für einen sabbernden Vollidioten gehalten werde.

    Die Sache ist die: garantiert SQLite dass sämtliche Output-Parameter immer, d.h. auch im Fehlerfall überschrieben werden? Und weiter: selbst wenn eine solche Garantie besteht, ist es dann guter Stil sich darauf zu verlassen?

    Jetzt könntest du sagen OK, gibt ja noch den Fehlercode, das wird ja wohl reichen. Tut es auch. Nur ... wenn ich für zwei Zeichen + ein Whitespace aus "gültig oder random, und damit wir wissen was von beiden müssen wir nochmal woanders nachsehen" ein "gültig oder 0" machen kann... nen?

    ps:

    und beim nächsten Zugriff auf die Datenbank schmiert alles ab

    Ich behaupte mal das wird ganz einfach daher kommt, weil der OP einen Schrottzeiger übergibt. NULL Werte fängt sqlite nämlich ab. Wenn man aber nicht für "gültig oder 0" sorgt, ...



  • Ob Du sabberst kann ich nicht wissen und Vollidioten könne kein Forum bedienen 😉

    Der OP bekommt ja von sqlite gesagt "mit dem open war's nix". Klar schmiert
    es ab wenn man das ignoriert. Die Fehlermeldung ist eigentlich auch klar. Mit
    WinCE hatte ich noch nichts zu tun, packt das nochmal 600 KB Daten ? Und wo
    will er die herhaben ?



  • Ich finde keinen Fehler der Speicher ist auch ok.

    Ich habe mal Herrn Google gefragt und folgendes gefunden.

    [sqlite] sqlite3_open returns
    SQLITE_NOMEM
    Ryan Clark
    Wed, 25 Jun 2008 17:41:31 -0700
    This is a "known" issue.

    http://www.sqlite.org/cvstrac/tktview?tn=2508,6

    The fix is to include SYSGEN_CORELOC.
    Can someone mention that in the documentation somewhere?
    Ryan

    Kann mit das einer erklären??
    Sitt0030



  • Windows CE baut man sich ja selber, anscheinend mit einem Tool Namens "sysgen", und da musst du das SYSGEN_CORELOC Flag setzen, damit es im gebauten Windows CE dann das entsprechende Paket gibt. Oder so hänlich. Klick halt auf den MSDN Link der in dem Bug-Ticket verlinkt ist.

    Ansonsten schreib die Funktion einfach so um (bzw. neu) dass sie MultiByteToWideChar nicht mehr verwendet. Da wird bloss UTF-8 nach UTF-16 konvertiert, und das ist ziemlich easy und schnell ergoogelt.

    Evtl. musst du noch weitere Stellen anpassen wo MultiByteToWideChar verwendet wird.



  • Danke für euere Hilfe ich werde mal die Infos von hustbaer realisieren und meine Ergebinsse hier berichten.



  • Ich habe es geschaft. Einfach in der SQLite.c "CP_UTF8" durch "CP_ACP" ersetzen eine neue *.lib erzeugen und es geht. 😃

    Danke noch einmal Hustbaer


Anmelden zum Antworten