nsadon
31/03/2004 à 11:43
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
31/03/2004 à 12:05
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
31/03/2004 à 12:14
Ok, je vais regarder tout ca merci.
Patrice
31/03/2004 à 13:02
nsadon
01/04/2004 à 09:29
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
01/04/2004 à 09:35
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
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...
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
01/04/2004 à 09:40
Yes, Snark tu as raison...

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"

Et là, le système doit partir en sucette, mimi...
nsadon
01/04/2004 à 09:48
ok merci ca m'aide plus pour savoir ou chercher mon erreur.
nsadon
01/04/2004 à 12:45
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
01/04/2004 à 15:39
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...
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.