Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#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

 

Pied de page des forums

Powered by FluxBB