VB DAO!!!!

cs_Tiger1982 Messages postés 13 Date d'inscription mardi 20 décembre 2005 Statut Membre Dernière intervention 24 août 2007 - 24 déc. 2005 à 23:57
cs_jym Messages postés 115 Date d'inscription lundi 31 décembre 2001 Statut Membre Dernière intervention 15 avril 2014 - 30 déc. 2005 à 08:39
Bon voila mon pbleme, j'ai deux data controls munis de leurs textbox, lorsque j'essaie de les parcourir pour vérifier les contraintes d'intégritée avant l'insertion, il plante!!!!
La premiere comparaison se fait convenablement puis sa ne parcoure plus la base. Donnez moi des idées sur le parcours de bases. Merci

5 réponses

cs_jym Messages postés 115 Date d'inscription lundi 31 décembre 2001 Statut Membre Dernière intervention 15 avril 2014
27 déc. 2005 à 19:48
bjr,

c'est pas clair...

je vois pas ce que tu fais comme "contrôle d'intégrité"???

pour parcourir une table (pas une base, le contrôle data est attaché à une table, à moins de changer don datasource en cours de code)

data.refresh
data.recordset.movefirst
do until data.recordset.eof = true

if test then
test

exit do 'si besoin
end if

data.recordset.movenext
loop

'''a ce stade, sauf si tu es sorti à exit do, la propriété EOF est à true, donc si tu passes une commande au recordset, il plante (no current record).

bonne prog

jym
0
cs_Tiger1982 Messages postés 13 Date d'inscription mardi 20 décembre 2005 Statut Membre Dernière intervention 24 août 2007
27 déc. 2005 à 22:58
J'ai presque fait ce que tu m'as écrit, le probleme est que je dois parcourir la table courante pour verifier la contrainte ncompte( numero compte d'un client; c la table compte), puis, parcourir une autre table data1 qui existe dans une autre forme pour verifier l'existence du code client.
Et sa ne veut pas marcher!!!!!!!! Cela me rend fous!!!!!!!!!!!!!
0
cs_jym Messages postés 115 Date d'inscription lundi 31 décembre 2001 Statut Membre Dernière intervention 15 avril 2014
29 déc. 2005 à 21:22
Bjr,

je suis un programmeur amateur et je n'utilise pas les relations.

donc je fais un peu comme toi, sauf qu'au lieu de parcourir la table je lance des requêtes (simples!!!hi).

je me fais par contre mes propres relations en mettant des "colonnes index" dans les tables.

par exemple j'ai une table des départements et une table des villes.
la table des départements contient un index access comme clé primaire, mais je m'en sers pas. puis un champ departementN° et un champ départementNom.

la table de ville a aussi un index access que je n'utilise toutjours pas!, 1 champ villeNom et un champ villeDepartment.

quand je rentre un département je renseigne le nom et le N°.

quand je rentre une ville je rentre le nom de la ville dans villeNom et le N° du département dans villeDepartement.
(avec pour choisir le n° du département une combo extraite de la table des départements pour éviter des choix erronés).

la relation entre la ville et le département c'est le champ villeDepartement.

ça permet :
pour les départements :

si tu ecris select * from département where departementN° = '83';
de te retrouver avec 1 seul enregistrement, le var, qui a 3 champs :
l'index, le nom, le N°.
qui sont datadepartement.recordset(0) index
datadepartement.recordset(1) le nom
datadepartement.recordset(2) le N°

pour les villes

soit tu cherches les villes de tout un departement :

select * from ville where villedepartement = '83';

ton datasource contient toutes les villes qui sont dans le '83'.

si tu cherches a savoir dans quel département de situe Toulon.

select * from ville where villenom ='toulon';

retourne 1 seul enregistrement dans le dataville.
qui contient 1 enregistrement de 3 champs

dataville.recordset(0) index
dataville.recordset(1) nomville
dataville.recordset(2) n°departement

pour faire simple tu crées mainteant une variable
dim num
num = dataville.recordset(2) 'contient maintenant le n0 du département recherché.

tu lances la requête sur les départements

select * from departement where departementN° =''' & num & ';"

tu peux écrire dans tes textbox

textbox1 = dataville.recordset(1) 'nom de la ville
textbox2= datadépartement.recordset(1) 'nom du département
textbox3 = dataville.recordset(2) 'n°du département (également disponible dans le recordset des départements, champ 2).

la recherche récursive (l'un après l'autre) peut être longue sur une table importante.
la requête par contre est immédiate.

si le contenu du recorset est vide
if dataville.recordset.recordcount =0 then
msg erreur pas de ville 'par exemple!!
end if

te permet de vérifier si tu peux continuer.

en ce qui me concerne, pour enregistrer ou supprimer ou même modifier un enregistrement, je fais toutes les vérifs AVANT de passer en mode édition ou autre sur le RST.

A commencer par vérifier "l'intégrité" des relations.

par exemple :

si tu veux supprimer un département de la table des départements tu dois d'abord vérifier qu'aucune ville de la table des villes n'utilise ce département et donc interdire la suppression de ce département.
idem pour une modif, si tu changes le N° du département du var de 83 à 833 (exemple stupide hi) il te faut aussi lire et sélectionner toutes les villes qui ont le 83 comme N° de département et les modifier en 833.

sinon tu ne trouveras plus aucun département pour caser tes villes du 83 puisqu'il n'existe plus en tant que 83!!

voili voilou, si tu as lu jusque là j'espère avoir éclairé ta lanterne, sinon mail moi en direct pour ne pas charger le forum avec mes exemples stupides!!

jean.y.monfort@wanadoo.fr

bonne prog.

cqfd.
0
cs_Tiger1982 Messages postés 13 Date d'inscription mardi 20 décembre 2005 Statut Membre Dernière intervention 24 août 2007
29 déc. 2005 à 23:53
Merci infiniment, c pas mal comme idée surtout que cela ne veut pas marcher malgrés ttes les modifications!!!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_jym Messages postés 115 Date d'inscription lundi 31 décembre 2001 Statut Membre Dernière intervention 15 avril 2014
30 déc. 2005 à 08:39
c'est quoi qui marche pas??

c'est quoi le message d'erreur??


si besoin envoi moi ton code et ta base (avec mot de passe si besoin) sur ma boite perso.


jym
0
Rejoignez-nous