Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: Datenbanken ::  sqlite3 Problem  
Gehen Sie zu Seite 1, 2  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
Sitt0030
Unregistrierter




Beitrag Sitt0030 Unregistrierter 16:22:20 10.05.2012   Titel:   sqlite3 Problem            Zitieren

Hallo ich habe folgendes Problem und hoffe Ihr könnt mir helfen
Ich Versuche sqlite in meinem Programm einzubauen. Ich bekomme aber schon beim öffnen

"result = sqlite3_open("/Data/File/Sample1.db" , &Database);"

einen Errorcode zurück

"#define SQLITE_NOMEM 7 /* A malloc() failed */"

könnt ihr mir helfen???

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include "sqlite3.h"
 
static int Callback( void *Pointer, int argc, char **argv, char **columnNames);
 
 
static int Callback( void *Pointer, int argc, char **argv, char **columnNames)
{
    char Buff[81];
    strcpy(Buff,*argv);
 
    return 0;
}
void Test(void)
{
    int result;
    sqlite3 *Database;
   
    result = sqlite3_open("/Data/File/Sample1.db" , &Database);
 
    if(result == 0)
    {
        // Tabelle anlegen und füllen:
        // (Da das nur Anweisungen sind, brauchen wir die Callbackfunktion nicht und lassen den 3ten Parameter auf "NULL")
        sqlite3_exec( Database , "create table test(number integer , eintrag varchar(50) , primary key(number));" , NULL , NULL , NULL);
        sqlite3_exec( Database , "insert into test (number , eintrag) values (1 , 'Testeintrag');" , NULL , NULL , NULL);
        sqlite3_exec( Database , "insert into test (number , eintrag) values (2 , 'Testeintrag 2');" , NULL , NULL , NULL);
        sqlite3_exec( Database , "insert into test (number , eintrag) values (3 , 'Testeintrag 3');" , NULL , NULL , NULL);
        sqlite3_exec( Database , "insert into test (number , eintrag) values (4 , 'Testeintrag 4');" , NULL , NULL , NULL);
        sqlite3_exec( Database , "insert into test (number , eintrag) values (5 , 'Testeintrag 5');" , NULL , NULL , NULL);
        sqlite3_exec( Database , "insert into test (number , eintrag) values (6 , 'Testeintrag 6');" , NULL , NULL , NULL);
        sqlite3_exec( Database , "insert into test (number , eintrag) values (7 , 'Testeintrag 7');" , NULL , NULL , NULL);
        sqlite3_exec( Database , "insert into test (number , eintrag) values (8 , 'Testeintrag 8');" , NULL , NULL , NULL);
        sqlite3_exec( Database , "insert into test (number , eintrag) values (9 , 'Testeintrag 9');" , NULL , NULL , NULL);    
   
        result = sqlite3_exec( Database , "select eintrag from test;" , Callback , NULL , NULL);
 
    }
    else
    {
        // Anfrage an Datenbank: Wir wollen alle Felder aus der Spalte "eintrag":
    }
    // Das war`s, wir schließen die Datenbank:
    sqlite3_close(Database);
}
Scheppertreiber
Mitglied

Benutzerprofil
Anmeldungsdatum: 16.05.2008
Beiträge: 1476
Beitrag Scheppertreiber Mitglied 19:36:02 11.05.2012   Titel:              Zitieren

OS ? Sieht nach einem -x aus. Existiert das Verzeichnis ?
Der Fehlercode heißt mit Sicherheit nicht "#define SQLITE_NOMEM 7 /* A malloc() failed */"
Sitt0030
Unregistrierter




Beitrag Sitt0030 Unregistrierter 11:02:37 22.05.2012   Titel:              Zitieren

Ne, das ist schon richtig der rückgabewert von open ist 7 und beim nächsten Zugriff auf die Datenbank schmiert alles ab.

Das Verzeichnis ist auch vorhanden.
Danke für deine Antwort.
Scheppertreiber
Mitglied

Benutzerprofil
Anmeldungsdatum: 16.05.2008
Beiträge: 1476
Beitrag Scheppertreiber Mitglied 11:09:24 22.05.2012   Titel:              Zitieren

Na ja, dem sqlite_open übergibts Du ja nur 2 Sachen: den Datenbanknamen
und die Adresse des db-Pointers wo er das Handle reinschreiben soll.

Bleibt nur der Datenbankname als Verdächtiger. Da liegt der Hase im Kiesbett.

Welches OS ? Zugriffsrechte auf das Verzeichnis ?
Genug Speicher ? Platte voll ?
C++ Forumbot
Forumbot

Benutzerprofil
Anmeldungsdatum: 29.02.2004
Beiträge: 17122
Beitrag C++ Forumbot Forumbot 12:17:02 22.05.2012   Titel:              Zitieren

Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum Datenbanken verschoben.

Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?


Dieses Posting wurde automatisch erzeugt.

_________________
Besuchen Sie unsere Bücherecke.
http://www.c-plusplus.de/bucher.php
Mit jeder Bestellung unterstützen Sie das Forum.
Sitt0030
Unregistrierter




Beitrag Sitt0030 Unregistrierter 16:05:25 22.05.2012   Titel:              Zitieren

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
Scheppertreiber
Mitglied

Benutzerprofil
Anmeldungsdatum: 16.05.2008
Beiträge: 1476
Beitrag Scheppertreiber Mitglied 18:56:18 22.05.2012   Titel:              Zitieren

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

Zitat:
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 ?
hustbaer
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.10.2006
Beiträge: 16057
Beitrag hustbaer Mitglied 03:10:05 23.05.2012   Titel:              Zitieren

Wird vermutlich am Problem nix ändern, aber ...
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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!
     }
 }

_________________
"Let there be Licht..." http://lichttools.sourceforge.net/
Sehr cooles ASCII Spiel (leider nicht von mir): ASCII-Scramble - http://www.roskakori.at/ascii/
Scheppertreiber
Mitglied

Benutzerprofil
Anmeldungsdatum: 16.05.2008
Beiträge: 1476
Beitrag Scheppertreiber Mitglied 09:16:34 23.05.2012   Titel:              Zitieren

Code:
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.


Zuletzt bearbeitet von Scheppertreiber am 09:17:31 23.05.2012, insgesamt 1-mal bearbeitet
hustbaer
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.10.2006
Beiträge: 16057
Beitrag hustbaer Mitglied 09:31:10 23.05.2012   Titel:              Zitieren

Scheppertreiber schrieb:
Code:
sqlite3 *Database = 0; // <----


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

Ja, das ist mir auch klar :rolleyes:
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:
Zitat:
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, ...

_________________
"Let there be Licht..." http://lichttools.sourceforge.net/
Sehr cooles ASCII Spiel (leider nicht von mir): ASCII-Scramble - http://www.roskakori.at/ascii/


Zuletzt bearbeitet von hustbaer am 18:12:50 23.05.2012, insgesamt 2-mal bearbeitet
c++.de :: Datenbanken ::  sqlite3 Problem  
Gehen Sie zu Seite 1, 2  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.