Aller au contenu

LIAISON DE TABLES


lili2006

Messages recommandés

Re,

 

Merci de ton soutien Patrice,...B)

 

je ne pensais pas arriver à une histoire pareille,..:o:blink:

 

C'est vraiment un manquement de MAP ou je demande la lune ?

 

Remarque, sous d'autres logiciels "PUR SIG", je ne sais pas comment ça se gère,..

 

Et en "SIG MAP", quelle jointure proposez vous pour arriver à mes fins ? (Si des fois en rapport de dessin associé, j'arrive toujours à rien,...:()

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

  • Réponses 66
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans ce sujet

Meilleurs contributeurs dans ce sujet

Images postées

Re,

 

De ce lien de Olivier, cette partie me va très bien, en effet !

 

Le code vous permettra donc d'obtenir tous les prénoms possible pour un même nom.

Pour se faire il suffira d'écrire une requête du style :

 

Don, il faut que je puisse écrire la même chose, mais :

 

Tous les défunts possibles pour une même tombe

,

C'est ça ?

 

J'ai donc essayer d'adapter le code à mes besoins :

 

SELECT N_TOMBE, ConcatForQuery("N_TOMBE",[N_TOMBE],"N_DEFUNT","DEFUNTS"," - ") AS Résultat
FROM DEFUNTS
GROUP BY N_TOMBE;

 

Ce qui donne ce message d’erreur 1_TEST_CONCATENATION.png

 

 

 

Je suppose qu'il faut également "chargé la fonction "ConcatForQuery" du code proposé par Jessy SEMPERE ?

 

[color="#009900"]Function ConcatForQuery(strRegroup As String, fldRegroup    As String, _
     strConcat As String, strTable As String, _
     Optional strSep As String = "/") As String[/color]


[indent]   [color="#009900"]'** Regroupement de donnée sur le champ fldRegroup
   '** et concaténation sur le champ strConcat
   Dim db As Database
   Dim rst As Recordset
   Dim strResult As String
   Dim strRst As String
   
   Set db = CurrentDb()
   strRst = "Select * From [" & strTable & "] " _
       & "Where [" & strRegroup & "] = """ & fldRegroup & """;"
   
   Set rst = db.OpenRecordset(strRst, dbOpenDynaset)
   With rst
       If Not .BOF Then
   [/color][color="#009900"]        .MoveFirst
           Do Until .EOF
               If strResult = "" Then
                   strResult = .Fields(strConcat)
               Else
                   strResult = strResult & strSep & .Fields(strConcat)
               End If
           .MoveNext
           Loop
       End If
   End With
   rst.Close: Set rst = Nothing
   db.Close: Set db = Nothing
   ConcatForQuery = strResult[/color]

  [/indent]
[color="#009900"]End Function[/color]

 

Je suppose que c'est du code VBA dont tu parlais dans ton premier message Olivier ?, DSi je comprend bien les arguments, ce code devrait s'adapter ?

 

Faut donc maintenant que je trouve le moyen de charger ce code sous Access,...

 

Et c'est au dela de mes faibles competences Access ...

 

Et moi alors,:(

 

Mais j'ai bien l’impression qu'il va falloir que je m'y penche de plus près, surtout si on est si "vite" limité sous MAP,...

 

Bon, ben, j'retourne dans mes recherches,...:)

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Pour accéder au VBA (quelque soit l'appli Office word, excel, access...) le raccourci clavier c'est Alt+F11

 

Je te renvoie la base ACCESS avec le code VBA intégré et la requête construite nommée "ConcatDefunts"

 

J'ai modifié la base pour remplir les noms laissés vide par des ?? (enregistrement 49 à vérifier et 99 à 103) car la fonction VBA n'acceptait pas les valeurs "nulles" et je ne voulais pas la modifier.

Par rapport au code fourni précédemment, je l'ai légèrement modifié car ton champ N_TOMBE est de type entier et pas texte comme dans le code fourni => suppression des guillemets autour de la valeur.

 

Travaillant avec Office 2013 64 bits, j'ai dû ajouter la librairie "Microsoft Office 15 Access Database Engine Object Library" pour accéder à la couche DAO sous VBA.

Si tu as une version différente d'office (2010 par ex), il faudra peut-être que tu ajoutes la librairie "Microsoft Office 14 Access Database Engine Object Library" - à partir de l'éditeur VBA (Alt F11), menu Outils / Référence et descendre puis cocher la bonne librairie.

Olivier

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir à toutes et tous,

 

Ouahou !!

 

Super,:)

 

Un grand merci Olivier (le temps que je sache faire tout ça, les examens seront passées pour cette étudiante,...).

 

Merci avant tout pour cette étudiante tenace et patiente (et c'est plutôt deux grandes qualités à mes yeux) et dans un second temps pour moi à qui cette étude offre de nouvelles possibilités,...

 

Je me penche sur tout ça à nouveau au plus vite et reviens sur ce post.

 

ça m’épate tout de m^me d'être obligé d'être "expert" Access pour préparer ce qui me semblait à la base une malheureuse requête de base,...Je suis le seul ou quoi ?

 

Et comment gère ça d'autres logiciels ??

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Je ne suis pas du tout un "expert" Access, hier je ne savais même pas comment faire une requête SQL sous Access et je suis bien incapable de faire un état ou un formulaire de saisie. Et la dernière fois (qui était aussi la première) que j'ai joué avec du VBA sous Access, c'était il y a plus de 15 ans. Merci Google!

 

Par contre à partir du moment ou tu "joues" avec un SIG, il te faudra forcément quelqu'un qui touches sa bille en administration de BD et en programmation.

 

Olivier

 

PS: Suite à ta remarque sur les qualités de ton étudiante, si tu en as des bons et qui n'ont pas peur de travailler, ça peut être très intéressant. On est toujours à la recherche de gens compétents.

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir à toutes et tous,

 

Salut Olivier,

 

Je ne suis pas du tout un "expert" Access

 

OkOk mais tu t'adaptes rapidement du peu que j'ai vu et tu as surtout pris le temps, pour je ne sais quelle raison qui t'honore, de me dépanner, mais avant tout de dépanner cette demoiselle qui joue sa seconde carrière !! En effet, j'ai créé une formation d'adultes en reconversion (pour des raisons diverses et variées, tu te doutes bien,..) pour préparer le diplôme du BTS Géomètre Topographe en une année scolaire (au lieu de deux, imagine le challenge !!). On peut facilement comprendre qu'il joue gros dans cette formation. La plupart sont en couples et ont des enfants, etc bref===

 

tu "joues" avec un SIG, il te faudra forcément quelqu'un qui touches sa bille en administration de BD et en programmation.

 

Jouer et le bon verbe, mais le nouveau référentiel du diplôme qui commence dés Septembre de cette année sera plus accès géomatique,..donc, j'm'entraine ;) (Mais je ne veux bien entendu que ce ne soit pas au détriment des étudiants que j'encadre,...)

 

si tu en as des bons et qui n'ont pas peur de travailler,

 

J'enseigne également en formation initiale dans le même lycée, et là aussi, j'ai quelques bons ! Certains recherche des entreprises pour faire des licences pro en apprentissage, t'as ça sous l'coude ?

 

On est toujours à la recherche de gens compétents.

 

C'est clair ! (J’allais dire, surtout par ces temps qui court ou tout se barre en c . - - - -e !) Et cette année, comme chaque année (c'est vrai que c'est rassurant,:)), certain(e)s se distingue particulièrement dans différents domaines de compétences dont, pour certain(e)s, une très bonne approche du très fameux couple "AutoCAD*/Covadis", devenu aujourd'hui incontournable dans mon/ notre métier (j'allais dire, c'est le minimum requis aujourd'hui),...

 

Pensant avoir "suffisamment" de compétences pour l'enseignement que je dispense sur ces deux logiciels (rappelons que c'est un niveau BTS et non une dernière année d'école d'ingé,...! Bien entendu, rien de péjoratif, juste pour préciser que je ne me prétend pas pour un cador, loin de moi cette prétention mais pense avoir assez de compétences pour ce niveau de formation), je m'intéresse depuis quelques années au monde du SIG dés que le temps me le permet mais j'ai bien l'intention de monter en puissance dans ce domaine, d'autant que c'est l'enseignement que je devrai dispenser demain. C'est clair qu'en autodidacte, c'est tendu ! Très loin de mon monde de départ qui est le Génie civil et tout particulièrement le calcul des structures et ouvrages, pour dire,..

 

Merci encore,

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à toutes et tous,

 

La BD est prête, reste à tester sous MAP,..

 

J'aimerai refaire la requête sous Access que tu as faites Olivier, peux tu un peu détaillé la démarche si tu as le tps STP ?

En effet, je ne sais pas comment requêter en faisant appel au code.

 

Merci d'avance,

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Je viens de tester une connexion de la BD mise en lien sur le post précédent et j'ai ce message d'erreur =>

 

En connexion ODBC => CONNEXION_BD.png

 

Le journal d'erreur =>

 

  Une source de données faisant référence à cette base de données est déjà associée. Cette source s'appelle 'PLANTEY_DEFINITIVE '.

 SGBD relationnel: [Microsoft][Pilote ODBC Microsoft Access] Fichier « (Inconnu) » introuvable. [Microsoft][Gestionnaire de pilotes ODBC] Échec SQLSetConnectAttr du pilote

 SGBD relationnel: [Microsoft][Pilote ODBC Microsoft Access] Fichier « (Inconnu) » introuvable. [Microsoft][Gestionnaire de pilotes ODBC] Échec SQLSetConnectAttr du pilote

 

 

Par "glisser/déposer" => 1_Glisser-Déposer.png

 

Une idée ?

 

Merci d'avance,

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir,

 

pour la requête est elle de la forme :

 

SELECT N_TOMBE, ConcatForQuery("N_TOMBE",[N_TOMBE],"Nom","DEFUNTS"," ; ") AS ConcatDefunt FROM DEFUNTS GROUP BY N_TOMBE;

 

Dans la table DEFUNTS, elle sélectionne les 2 champs N_TOMBE et le champ obtenu par concaténation faisant appel à la fonction VBA : ConcatForQuery("N_TOMBE",[N_TOMBE],"Nom","DEFUNTS"," ; ") qu'elle affiche sous le nom ConcatDefunt, puis trie sur N_TOMBE

 

la fonction ConcatForQuery("N_TOMBE",[N_TOMBE],"Nom","DEFUNTS"," ; ") a besoin de 5 paramètres:

"N_TOMBE" : nom champ de regroupement

[N_TOMBE] : valeur du champ sélectionné

"Nom" : champ à concaténer

"DEFUNTS" : nom de la table dans laquelle faire la requête

";" : séparateur des valeurs concaténées.

 

le code VBA exécute la requête SQL suivante

Select * From [DEFUNTS] Where [N_TOMBE] = valeur;

et concatène la liste des enregistrements trouvés

 

Olivier

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à toutes et tous,

 

Salut Olivier,

 

Travaillant avec Office 2013 64 bits, j'ai dû ajouter la librairie "Microsoft Office 15 Access Database Engine Object Library" pour accéder à la couche DAO sous VBA.

 

Tu veux dire sous MAP ?

 

Il faut donc que j'installe : ?

 

Microsoft Office 15 Access Database Engine Object Library

 

Merci d'avance,

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Arf,

C'est en connexion ODBC que j'ai un pb maintenant,...:(

 

SGBD relationnel: [Microsoft][Pilote ODBC Microsoft Access] Fonction « ConcatForQuery » non définie dans l'expression.

 

 

Je suppose qu'il faut que je supprime la requête qui utilise la Fonction « ConcatForQuery » ?

 

LA DERNIÈRE BD

 

Merci d'avance,

EDIT :

Je suppose qu'il faut que je supprime la requête qui utilise la Fonction « ConcatForQuery » ?

 

Fait !

 

Tout fonctionne comme voulut à ce niveau là !

 

j'ai testé quelques requêtes en mode associé avec cette nouvelle table, je récupère bien le nom des défunts dans la tombe choisit !

 

Eh bé, quelle histoire !

 

Je vais voir les Exports/Imports maintenant,...:)

Question subsidiaire : Comment utiliser les photos liées aux tombes sous MAP (les photos se trouvent dans le sous formulaire de la table des tombes. PHOTOS_formulaire Table des Tombes.png

 

Merci d'avance,

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Hello Lilian

 

SVP je suis preneur du nouveau MDB ? ... et aussi du nouveau DWG associe ...

 

Bye, lecrabe

 

PS: je suis a Berlin cette semaine pour la convention Europeenne OTX d'Autodesk

Donc fort peu de presence ...

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Lilian,

 

Pour la question subsidiaire, étant donné que les photos ont été incorporées sous forme d'objet OLE, c'est mort, à moins que notre crustacé préféré ait une solution une fois revenu d'Outre-Rhin.

Si tu avais disposé d'un champ contenant le nom de la photo, tu aurais pu utiliser les vues de document (commande ADEDEFDOCVIEW pour définir les vues clés et ADEDOCVIEW pour afficher le fichier associé - la photo dans ton cas).

 

Ceci dit, disposer d'un champ texte contenant le nom de la photo et sortir l'objet OLE serait une très bonne chose, car ça ne me semble pas très judicieux d'encapsuler les photos dans la base Access:

- Premièrement car la BDD est énorme en taille, tu modifies n'importe quelle données, c'est un fichier de 350Mo qui est mis à jour => espace de stockage, sauvegarde, traffic réseau important. Surtout que je suis sûr que les photos ont aussi été sauvegardées en JPG quelque part => double stockage.

- Deuxièmement, OLE est une techno pure Microsoft et si un jour tu dois convertir cette BDD pour une utilisation client/serveur avec un Postgre/PostGis, Oracle, SQL Serveur ou autre, il faudra retraiter la base pour sortir les photos.

 

Je pense qu'avec un petit coup de VBA, tu dois pouvoir recréer un champ texte correspondant au nom de l'image OLE => la nécessité de disposer de quelqu'un qui touche un peu sa bille en dev.

 

Olivier

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à toutes et tous,

 

Salut Olivier,

 

Si tu avais disposé d'un champ contenant le nom de la photo, tu aurais pu utiliser les vues de document (commande ADEDEFDOCVIEW pour définir les vues clés et ADEDOCVIEW pour afficher le fichier associé - la photo dans ton cas).

 

Ce sont des fonctions AutoCAD ou MAP ?

 

car ça ne me semble pas très judicieux d'encapsuler les photos dans la base Access:

 

Le service technique de la mairie en question ne connaissant pas MAP, voilà pourquoi on tente de mettre en place quelque chose,..

 

pour une utilisation client/serveur avec un Postgre/PostGis, Oracle, SQL Serveur ou autre, il faudra retraiter la base pour sortir les photos.

 

Arf ! :(

 

Je pense qu'avec un petit coup de VBA, tu dois pouvoir recréer un champ texte correspondant au nom de l'image OLE

 

Bon, je vais retenter ma chance ici,..

 

Merci encore Olivier,

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Hello Lilian

 

Si tu avais disposé d'un champ contenant le nom de la photo, tu aurais pu utiliser les vues de document (commande ADEDEFDOCVIEW pour définir les vues clés et ADEDOCVIEW pour afficher le fichier associé - la photo dans ton cas).

 

La reponse est dans la question car les fonctions/commandes ADExxxxxx sont forcement des fonctions/commandes AutoCAD MAP !

 

Cela provient du tres vieux module ADE qui est apparu avec AutoCAD R12 ...

 

+1 avec Olivier

Comme d'habitude - C'est enervant car je suis toujours d'accord avec Olivier !

 

Sinon en effet j'aurais bien vu les photos comme un hyperlien !!

 

Bye, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Salut Patrice,

 

ADExxxxxx sont forcement des fonctions/commandes AutoCAD MAP !

 

 

Ok ! Je savais pour MAP...(Exemple !: MAPcsassign), mais pas pour les "ADExxxxxx"

 

Sinon en effet j'aurais bien vu les photos comme un hyperlien !!

 

A suivre,...

 

PS: J'ai également posté cette nouvelle demande ici ,..

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Lilian,

 

Je te renvoie la base modifiée comme suit :

- dans le module VBA, j'ai ajouté 2 fonctions

Function GetLinkedPath(objOLE As Variant) As String
  Dim strChunk As String
  Dim pathStart As Long
  Dim pathEnd As Long
  Dim path As String
  If Not IsNull(objOLE) Then
     ' Convert string to Unicode.
     strChunk = StrConv(objOLE, vbUnicode)
     pathStart = InStr(1, strChunk, ":\", 1) - 1

     ' If mapped drive path not found, try UNC path.
     If pathStart <= 0 Then pathStart = _
              		InStr(1, strChunk, "\\", 1)

     ' If either drive letter path or UNC path found, determine
     ' the length of the path by searching for the first null
     ' character Chr(0) after the path was found.
     If pathStart > 0 Then
		pathEnd = InStr(pathStart, strChunk, Chr(0), 1)
		path = Mid(strChunk, pathStart, pathEnd - pathStart)
		GetLinkedPath = path
		Exit Function
     End If
  Else
     GetLinkedPath = ""
  End If
End Function

 

cette 1ère fonction permet d'extraire d'un objet OLE, le nom et le chemin du fichier ayant servi à le créer, puis

Sub ExtractPhoto()

   Dim db As DAO.Database
   Dim rst As DAO.Recordset

   Dim strRst As String    
   Set db = CurrentDb()
   strRst = "Select * From [TOMBES];"
   
   Set rst = db.OpenRecordset(strRst, dbOpenDynaset)
   With rst
       If Not .BOF Then
           .MoveFirst
           Do Until .EOF
           If .Updatable Then
               .Edit
               .Fields("NomPhoto") = GetLinkedPath(.Fields("Photo").Value)
               .Update
           End If
           .MoveNext
           Loop
       End If
   End With
   rst.Close: Set rst = Nothing
   db.Close: Set db = Nothing

End Sub

 

Cette 2ème fonction balaie la table TOMBE via une requête SQL et remplit le nouveau champ NomPhoto avec le résultat de la fonction précédente exécutée sur l'objet OLE de l'enregistrement en cours.

 

J'ai ensuite extrait et sauvegardé les photos des 5 premières tombes (joint en JPG dans le ZIP joint) à copier au même endroit que la base Access.. Je laisse le soin à ton étudiante de faire les autres ou de récupérer les images auprès du client.

 

J'ai ensuite modifié le formulaire des tombes en remplaçant le contrôle cadre d'objet par un contrôle image et j'ai ajouté le code VBA suivant dans la feuille du formulaire.

Public Function DisplayImage(ctlImageControl As Control, strImagePath As Variant) As String
On Error GoTo Err_DisplayImage

Dim strResult As String
Dim strDatabasePath As String
Dim intSlashLocation As Integer

With ctlImageControl
   If IsNull(strImagePath) Then
       .Visible = False
       strResult = "No image name specified."
   Else
       If InStr(1, strImagePath, "\") = 0 Then
           ' Path is relative
           strDatabasePath = CurrentProject.FullName
           intSlashLocation = InStrRev(strDatabasePath, "\", Len(strDatabasePath))
           strDatabasePath = Left(strDatabasePath, intSlashLocation)
           strImagePath = strDatabasePath & strImagePath
       End If
       .Visible = True
       .Picture = strImagePath
       strResult = "Image trouvée et affichée."
   End If
End With
   
Exit_DisplayImage:
   DisplayImage = strResult
   Exit Function

Err_DisplayImage:
   Select Case Err.Number
       Case 2220   	' Can't find the picture.
           ctlImageControl.Visible = False
           strResult = "Image non trouvée."
           Resume Exit_DisplayImage:
       Case Else   	' Some other error.
           MsgBox Err.Number & " " & Err.Description
           strResult = "Erreur à l'affichage de l'image."
           Resume Exit_DisplayImage:
   End Select
End Function

 

Cette fonction permet d'afficher dans le contrôle image passé en paramètre, la photo correspondant au nom également passé en paramètre. Enfin cette fonction est encapsulée et exécutée sur l’événement AfterUpdate du contrôle du nom du fichier photo.

Private Sub CallDisplayImage()
   Me!txtInfosPhoto = DisplayImage(Me!PhotoTombe, Me!NomPhoto)
End Sub

Private Sub NomPhoto_AfterUpdate()
   CallDisplayImage
End Sub

 

Ainsi à chaque changement de tombe, le nom de la photo remplit le champ NomPhoto du formulaire ce qui déclenche le chargement de la photo correspondante.

 

Maintenant que ta base contient le nom de la photo sous forme de texte, tu peux utiliser les vues de documents comme indiqué précédemment.

Si tu veux passer par un hyperlien, en FDO, il me semble que c'est natif, mais sous le moteur DWG il me semble pas que ce soit direct => il va falloir passer par un bout de lisp. A moins que notre ami berlinois n'ait une autre solution.

 

Olivier

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir à toutes et tous,

 

ReOuah !

 

Je ne sais une fois de plus comment te remercier Olivier :o !

 

Je vais regarder tout ça en détail ce WE !!

 

Me tarde de tester sous MAP !!:)

 

Je reviens sur le post dés les premiers test effectués

 

Salut GéGé,

 

cette discussion est passionnante,

 

Carrément !

 

J'm'attendais pas à tout ça j"dois dire,...:blink:

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Etant bloque cette semaine (pas de PC opérationnel sous le coude,//) et en te relisant Olivier, je me demandais comment tu faisait :

 

J'ai ensuite extrait et sauvegardé les photos des 5 premières tombes

 

Est ce que les images sont forcément des objets OLE sous Access ?

 

cette 1ère fonction permet d'extraire d'un objet OLE,

 

Merci d'avance,

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant



×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité