Aide - Recherche - Membres - Calendrier
Version complète : pb lors d'une ouverture de base de donnée
Les Forums de PalmAttitude.org > GENERAL PalmOS > Développement sous PalmOS
nsadon
Bonjour tout le monde,
voila lorsque je fais un DmFindDatabase ca me renvoit queque chose different de 0, ensuite lorsque je fais un DmOpenDatabase celui ci me renvoit 0.
D'ou ma question qu'est ce qui peut faire que cette fonction me renvoit 0;
quelqu'un avait donner un site ou l'on pouvait voir les different code d'erreur et leur signification pouvez vous me le rapellez svp.
Merci d'avance
Patrice
Les codes erreur sont décrits dans le guide "PalmOS Reference". Pour trouver la correspondance entre les "valeurs" et les "codes", il faut regarder dans le fichier "DataManager.h" (je ne suis pas tout à fait sur de son nom, mais c'est quelque chose dans ce style).

Quant à ton erreur, elle est probablement due à une erreur sur le paramètre "nom" que tu passes à la fonction, sachant que dans le cas de l'open, tu passes un ID. Le "nom" de la base est un nom interne et en aucun cas un nom de fichier.
nsadon
Ok, je vais regarder tout ca merci.
Patrice
icon_biggrin.gif anim_wink.gif
nsadon
Bonjour, voila jai trouvé un code d'ouverture qui ressembalit a ce ke j'avais besoin, mais celui me provoque des erreurs lorsque je quitte mon appli, de plus il ne ma fonction ne me retourne que une chaine vide:
Voici ma fonction:
char * townList() {
LocalID dbId;
DmOpenRef dbRef;
MemHandle record;
CharPtr pChar;
int i;
char *tab[2];

dbId = DmFindDatabase(0, "ville");
if (dbId != 0)
dbRef = DmOpenDatabase(0, dbId, dmModeReadOnly);
else {
tab[0] = "erreurDbFind";
return tab[0];
}
if (dbRef != 0) {
for (i=0; i < 2; i++) {
record = DmGetRecord(dbRef, i);
if (record == 0)
continue;
pChar = MemHandleLock(record);
tab[i] = pChar;
MemHandleUnlock(record);
DmReleaseRecord(dbRef, i, true);
}
} else
tab[0] = "erreurDbOpen";
return tab[0];
}
quand j'affiche tab[0] je n'ai qu'une chaine vide, pourtant j'ai recupéré ce code dans un tutoorial qui jusqu'a present semblait bon.
Le message d'erreur qui apparait est: "just read from memory location which is an unlocated chunk memory"
Merci d'avance.
Patrice
D'abord, est-ce que tu es sur de ta base nommée 'ville' ?

Autre point : dans le cas où tu trouves un résultat, ta fonction ne retourne rien rolleyes.gif

Pour finir, si tu as une erreur en quittant, c'est absolument normal : tu as récupéré un record de la base et tu l'as "locké" : il faut absolument libérer tout ça avant de quitter l'appli...
snark
CITATION(Patrice)
Pour finir, si tu as une erreur en quittant, c'est absolument normal : tu as récupéré un record de la base et tu l'as "locké" : il faut absolument libérer tout ça avant de quitter l'appli...

Y'a quand même bien un "DmReleaseRecord(dbRef, i, true)". Ca ne sert pas à "délocker"? (question par simple curiosité)
Patrice
Yes, Snark tu as raison... icon_bla.gif Et c'est encore pire que je ne l'avais cru... Si le handle est délocké et le record libéré, il n'y a plus rien de valide dans les pointeurs "tab" rolleyes.gif Et là, le système doit partir en sucette, mimi...
nsadon
ok merci ca m'aide plus pour savoir ou chercher mon erreur.
nsadon
Jai bien compris que lorsque je unlock et ke je release je n'ai plus rien dans tab maisje ne vois pas comment recuperer alors les infos, jais essayer un strcopy mais tjrs une erreur.
Pourrai je avoir une fois de plus un petit conseil svp.
Patrice
Si tu fais un strcpy sur tab[i], c'est sur que tu as une erreur : tu n'as pas réservé de mémoire pour une chaîne de caractère, tu as juste alloué un pointeur !

Tu vas dire que je recommence à t'envoyer bouler, mais là on tombe dans les bases du langage C... anim_wink.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.