Problème: je parcours une base DB avec la methode seq et je veux
modifier les clés de chaque enregistrement. Pour ca je fait un put avec
l'option R_CURSOR, mais visiblement ca tourne en rond.
Voici un petit programme illustrant le problème (enfin la je ne modifie
pas la clé mais les données de l'enregistrement, mais l'idée est la
même)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
DINH Viêt Hoà
Problème: je parcours une base DB avec la methode seq et je veux modifier les clés de chaque enregistrement. Pour ca je fait un put avec l'option R_CURSOR, mais visiblement ca tourne en rond.
Voici un petit programme illustrant le problème (enfin la je ne modifie pas la clé mais les données de l'enregistrement, mais l'idée est la même)
Problème : tu as une structure de données sur laquelle tu itères et tu modifies en même temps le contenu.
solution : stocker la liste des clefs dans une liste et itérer sur cette liste.
-- DINH V. Hoa,
"ben le problème c'est que les voitures à motorisations XXL ça passe rarement inaperçu" -- raoul
Problème: je parcours une base DB avec la methode seq et je veux
modifier les clés de chaque enregistrement. Pour ca je fait un put avec
l'option R_CURSOR, mais visiblement ca tourne en rond.
Voici un petit programme illustrant le problème (enfin la je ne modifie
pas la clé mais les données de l'enregistrement, mais l'idée est la
même)
Problème : tu as une structure de données sur laquelle tu itères et tu
modifies en même temps le contenu.
solution : stocker la liste des clefs dans une liste et itérer sur
cette liste.
--
DINH V. Hoa,
"ben le problème c'est que les voitures à motorisations XXL
ça passe rarement inaperçu" -- raoul
Problème: je parcours une base DB avec la methode seq et je veux modifier les clés de chaque enregistrement. Pour ca je fait un put avec l'option R_CURSOR, mais visiblement ca tourne en rond.
Voici un petit programme illustrant le problème (enfin la je ne modifie pas la clé mais les données de l'enregistrement, mais l'idée est la même)
Problème : tu as une structure de données sur laquelle tu itères et tu modifies en même temps le contenu.
solution : stocker la liste des clefs dans une liste et itérer sur cette liste.
-- DINH V. Hoa,
"ben le problème c'est que les voitures à motorisations XXL ça passe rarement inaperçu" -- raoul
manu
DINH Viêt Hoà wrote:
Problème: je parcours une base DB avec la methode seq et je veux modifier les clés de chaque enregistrement. Pour ca je fait un put avec l'option R_CURSOR, mais visiblement ca tourne en rond.
Voici un petit programme illustrant le problème (enfin la je ne modifie pas la clé mais les données de l'enregistrement, mais l'idée est la même)
Problème : tu as une structure de données sur laquelle tu itères et tu modifies en même temps le contenu.
Ben justement ca me paraissait ok: j'itère et je modifie l'entrée courrante. Mais visiblement un put en R_CURSOR déplace le curseur?
solution : stocker la liste des clefs dans une liste et itérer sur cette liste.
Je dois modifier toutes les clés, donc ca n'est pas très pratique. Ou alors je réouvre une autre base, et une fois fini je vire l'ancienne et je renomme.
-- Emmanuel Dreyfus Publicité subliminale: achetez ce livre! http://www.eyrolles.com/php.informatique/Ouvrages/9782212112443.php3
DINH Viêt Hoà <dinh.viet.hoa@free.fr> wrote:
Problème: je parcours une base DB avec la methode seq et je veux
modifier les clés de chaque enregistrement. Pour ca je fait un put avec
l'option R_CURSOR, mais visiblement ca tourne en rond.
Voici un petit programme illustrant le problème (enfin la je ne modifie
pas la clé mais les données de l'enregistrement, mais l'idée est la
même)
Problème : tu as une structure de données sur laquelle tu itères et tu
modifies en même temps le contenu.
Ben justement ca me paraissait ok: j'itère et je modifie l'entrée
courrante. Mais visiblement un put en R_CURSOR déplace le curseur?
solution : stocker la liste des clefs dans une liste et itérer sur
cette liste.
Je dois modifier toutes les clés, donc ca n'est pas très pratique. Ou
alors je réouvre une autre base, et une fois fini je vire l'ancienne et
je renomme.
--
Emmanuel Dreyfus
Publicité subliminale: achetez ce livre!
http://www.eyrolles.com/php.informatique/Ouvrages/9782212112443.php3
manu@netbsd.org
Problème: je parcours une base DB avec la methode seq et je veux modifier les clés de chaque enregistrement. Pour ca je fait un put avec l'option R_CURSOR, mais visiblement ca tourne en rond.
Voici un petit programme illustrant le problème (enfin la je ne modifie pas la clé mais les données de l'enregistrement, mais l'idée est la même)
Problème : tu as une structure de données sur laquelle tu itères et tu modifies en même temps le contenu.
Ben justement ca me paraissait ok: j'itère et je modifie l'entrée courrante. Mais visiblement un put en R_CURSOR déplace le curseur?
solution : stocker la liste des clefs dans une liste et itérer sur cette liste.
Je dois modifier toutes les clés, donc ca n'est pas très pratique. Ou alors je réouvre une autre base, et une fois fini je vire l'ancienne et je renomme.
-- Emmanuel Dreyfus Publicité subliminale: achetez ce livre! http://www.eyrolles.com/php.informatique/Ouvrages/9782212112443.php3
Laurent Wacrenier
Emmanuel Dreyfus écrit:
res = db->seq(db, &key, &rec, opt);
Il faut que le curseur soit initialisé, essaye :
res = db->seq(db, &key, &rec, opt&R_CURSOR);
Je ne suis pas sûr que ça marche si l'ordre des clef change.
Emmanuel Dreyfus <manu@netbsd.org> écrit:
res = db->seq(db, &key, &rec, opt);
Il faut que le curseur soit initialisé, essaye :
res = db->seq(db, &key, &rec, opt&R_CURSOR);
Je ne suis pas sûr que ça marche si l'ordre des clef change.
Ca ne change pas grand chose. Mais R_FIRST est censé l'initialiser, en principe...
-- Emmanuel Dreyfus Publicité subliminale: achetez ce livre! http://www.eyrolles.com/php.informatique/Ouvrages/9782212112443.php3
DINH Viêt Hoà
solution : stocker la liste des clefs dans une liste et itérer sur cette liste.
Je dois modifier toutes les clés, donc ca n'est pas très pratique. Ou alors je réouvre une autre base, et une fois fini je vire l'ancienne et je renomme.
Cette liste peut prendre beaucoup d'espace mémoire ?
Si oui, tu peux la stocker dans une autre base berkeley DB ?
-- DINH V. Hoa,
"ben le problème c'est que les voitures à motorisations XXL ça passe rarement inaperçu" -- raoul
solution : stocker la liste des clefs dans une liste et itérer sur
cette liste.
Je dois modifier toutes les clés, donc ca n'est pas très pratique. Ou
alors je réouvre une autre base, et une fois fini je vire l'ancienne et
je renomme.
Cette liste peut prendre beaucoup d'espace mémoire ?
Si oui, tu peux la stocker dans une autre base berkeley DB ?
--
DINH V. Hoa,
"ben le problème c'est que les voitures à motorisations XXL
ça passe rarement inaperçu" -- raoul
solution : stocker la liste des clefs dans une liste et itérer sur cette liste.
Je dois modifier toutes les clés, donc ca n'est pas très pratique. Ou alors je réouvre une autre base, et une fois fini je vire l'ancienne et je renomme.
Cette liste peut prendre beaucoup d'espace mémoire ?
Si oui, tu peux la stocker dans une autre base berkeley DB ?
-- DINH V. Hoa,
"ben le problème c'est que les voitures à motorisations XXL ça passe rarement inaperçu" -- raoul
DINH Viêt Hoà
Ben justement ca me paraissait ok: j'itère et je modifie l'entrée courrante. Mais visiblement un put en R_CURSOR déplace le curseur?
Sinon, pour rerépondre, j'utilisais la chose suivante :
<< int mail_cache_db_clean_up(struct mail_cache_db * cache_db, chash * exist) { DB * dbp; int r; DBT db_key; DBT db_data;
dbp = cache_db->internal_database;
r = dbp->seq(dbp, &db_key, &db_data, R_FIRST); if (r == -1) return r;
while (r == 0) { chashdatum hash_key; chashdatum hash_data;