Pages: 1
- Sujet précédent - Ajouter le résultat d'une requête dans Access d'un seul bloc - Sujet suivant
#1 Mon 24 November 2008 11:00
- Miss T.
- Participant assidu
- Lieu: En pleine amazonie...
- Date d'inscription: 17 Oct 2005
- Messages: 294
Ajouter le résultat d'une requête dans Access d'un seul bloc
Bonjour à tous,
Pour l'instant, j'arrive à parcourir ligne à ligne le résultat de la requête depuis Access avec des alternances
Code:
mapinfo_obj.Do "Fetch First from Communes_selectionnees" 'Début de la boucle mapinfo_obj.Eval("communes_selectionnees.col2") mapinfo_obj.Do "Fetch next from Communes_selectionnees" 'fin de la boucle
J'aimerai savoir s'il était possible de récupérer la totalité du résultat d'une requête pour l'intégrer d'un seul bloc dans Access (récupérer un tableau de données assimilable à un recordset).
Quelqu'un connaîtrait l'utilisation des fonctions MISelection(), MISearchInfo() ou GetTable()? L'aide de MapBasic ne présente pas d'exemple de syntaxe là dessus...
Dernière modification par Miss T. (Mon 24 November 2008 11:07)
Hors ligne
#2 Mon 24 November 2008 11:20
- snaileater
- Participant actif
- Date d'inscription: 5 Nov 2008
- Messages: 121
Re: Ajouter le résultat d'une requête dans Access d'un seul bloc
Tu rédiges bizarrement tes questions ... on se croirait au milieu d'un thread ... mais non c'est bien ton premier post ...
C'est ton code VB que tu nous montre ? Et tu veux automatiser l'ensemble dans VB ? = Créer une nouvelle Table Access ?
Qu'entends tu par "alternances" ?
Hors ligne
#3 Mon 24 November 2008 11:43
- Miss T.
- Participant assidu
- Lieu: En pleine amazonie...
- Date d'inscription: 17 Oct 2005
- Messages: 294
Re: Ajouter le résultat d'une requête dans Access d'un seul bloc
on se croirait au milieu d'un thread
Euh, plutôt au milieu d'un développement VBA... Désolée. Je détaille:
Je suis en train de développer une base de données Access faisant le lien avec des données cartographiques.
C'est ton code VB que tu nous montre ? Et tu veux automatiser l'ensemble dans VB ?
Oui. (je me suis vraiment mal exprimée..)
Par exemple, j'ai une table access décrivant des objets (T_Zone_Humide) dont les données géographiques sont dans la table MapInfo MI_Zone_Humide (le lien se fait par le champ ZH_Code présent dans les deux tables).
Comme je suis une feignasse, je voudrais, par exemple, mettre automatiquement à jour la liste des communes dans la base Access selon les communes couvertes par l'objet de la table MI_Zone_Humide correspondant.
Pour cela, je lance MapInfo avec Access, l'associe à une variable objet (MapInfo_Obj) puis envoie des commandes MapBasic à MapInfo:
Code:
mapinfo_obj.Do "Select * from MI_Communes, MI_Zone_Humide WHERE... INTO Communes_selectionnees"
Puis je récupère le résultat Communes_selectionnees, ligne à ligne, toujours depuis Access:
Code:
'Je me place sur la 1e ligne de la sélection mapinfo_obj.Do "Fetch First from Communes_selectionnees"
Puis je parcours la table Communes_Selectionnees en bouclant les lignes suivantes:
Code:
' ajout de la commune dans la table Access T_COMMUNE_ZH sql = "insert into T_COMMUNE_ZH (ZH_CODE, COM_CODE) Values (" & Chr$(34) & Me.ZH_CODE & Chr$(34) & "," & Chr$(34) & mapinfo_obj.Eval("communes_selectionnees.col2") & Chr$(34) & ")" Db.Execute sql mapinfo_obj.Do "Fetch next from Communes_selectionnees"
= Créer une nouvelle Table Access ?
Non, ajouter les données issues de la requête à une table déjà existante.
Hors ligne
#4 Tue 25 November 2008 12:57
- snaileater
- Participant actif
- Date d'inscription: 5 Nov 2008
- Messages: 121
Re: Ajouter le résultat d'une requête dans Access d'un seul bloc
Je vais poser plus de question que fournir de réponses, je ne suis pas spécialiste du tout ... :
A quel moment concrétises tu l'échange d'information entre VB et Mapinfo ? tu dois pouvoir faire cela avec un lien ODBC vers ta table Access non ? Si tu sais parcourir ta sélection Mapinfo tu dois pouvoir à partir de chaque enregistrement faire un UPDATE de ta table distante ? (en déclarant a priori ta table distante ou en partant de zéro et en l'initialisant dans Mapbasic ...)
Sinon comment envisages tu de récupérer dans Access cette sélection Mapinfo ?
Hors ligne
#5 Tue 25 November 2008 14:12
- Miss T.
- Participant assidu
- Lieu: En pleine amazonie...
- Date d'inscription: 17 Oct 2005
- Messages: 294
Re: Ajouter le résultat d'une requête dans Access d'un seul bloc
tu dois pouvoir faire cela avec un lien ODBC vers ta table Access non ?
Je n'utilise pas l'ODBC. Les tables MapInfo et Access sont indépendante (i.e. les données attributaires des tables MapInfo ne sont pas dans les tables Access) ==> le client a donc la possibilité de refiler ses tables à des tiers sans filer la totalté de la base de données.
A quel moment concrétises tu l'échange d'information entre VB et Mapinfo ?
Avec les lignes suivantes:
Code:
sql = "insert into T_COMMUNE_ZH (ZH_CODE, COM_CODE) Values (" & Chr$(34) & Me.ZH_CODE & Chr$(34) & "," & Chr$(34) & mapinfo_obj.Eval("communes_selectionnees.col2") & Chr$(34) & ")" Db.Execute sql
Ce qui me lance l'instruction en VBA:
Insert into T_Commune_ZH (ZH_CODE, COM_CODE) Values ("ID de la ZH", "ID de la commune récupérée dans la requête de MapInfo")
La commande VBA mapinfo_obj.Eval("communes_selectionnees.col2") me permet de récupérer le contenu de la 2e colonne de communes_selectionnees pour la ligne en cours (que je parcours enregistrement par enregistrement en envoyant la ligne mapinfo_obj.Do "Fetch next from Communes_selectionnees"
==> ça me lance une instruction SQL qui ajoute un enregistrement à la table Access "T_Commune_ZH" pour chaque enregistrement de Communes_selectionnees
Pour faire cela, je dois parcourir enregistrement par enregistrement la table temporaire MI Communes_selectionnees.
Sinon comment envisages tu de récupérer dans Access cette sélection Mapinfo ?
Ben justement, c'est bien la question: existe-t-il un moyen de récupérer toute la table temporaire communes_selectionnees (en tant que Recordset?) pour l'insérer dans la table T_Communes_ZH au lieu de parcourir ligne à ligne le résultat de ma requête?
Hors ligne
Pages: 1
- Sujet précédent - Ajouter le résultat d'une requête dans Access d'un seul bloc - Sujet suivant