Liaisons avec d'autres bases de données

wilfried_42

XLDnaute Barbatruc
Bonjour à tous

suite à Ce post
j'essaie d'améliorer la macro de Ce post : Excel gere Acces
j'ai déjà pas mal avancé, voire à mon niveau terminé. Mais (Encore un) je ne peux rien tester. Faisant cela à titre personnel, je n'ai qu'un modeste ordinateur sans réseau, sans même un fichiers autres que des fichiers access bidons (utilisé dans les précédents tests).
j'ai essayé de rendre la connexion entièrement paramétrable.
Au lancement de la bibliothèque externe : Liaisons_V3, elle crée un nouveau Menu avec les différents choix de connexion et un paramétrage.
en cliquant sur paramétrage, une usf apparaît permettant de créer ou de modifier une connexion. Si vous en créez une, elle s'ajoute dans le menu.
Différent paramètres sont à entrer ainsi qu'une ligne de contruction (connecting).
Si un bonne âme pouvait me tester ma xla ca serait vraiment Super!
ps : ne connaissant pratiquement rien en ADO, je ne peux même pas savoir si le reste qui fonctionne avec access, fonctionne aussi avec d'autre bases...

Merci à vous.

Edit : J'ai retiré le fichier suite à nouvelle version plus bas.
 
Dernière édition:

vbacrumble

XLDnaute Accro
Re : Liaisons avec d'autres bases de données

Bonjour


VBE surligne cette ligne en jaune
Public Function Get_Table_Names(Code As String) As Variant

(test sur Excel 2000 avec le fichier Comptois.mdb de Microsoft)

Si tu peux m'indiquer comment corriger, je testerai volontiers ton application
qui à l'air d'être très top niveau code VBA.
 

wilfried_42

XLDnaute Barbatruc
Re : Liaisons avec d'autres bases de données

Bonjour Vbacrumble

Merci à toi de bien vouloir m'aider

si tu essayes une table Access, logiquement j'ai déjà fait et ça fonctionne du moins à partir de la version 2002.
la fonction en cause :
Code:
' Récupération d'un tablo comprenant le nom des tables et requete
' T pour Table
' V ou R pou View ou Requete
' A pour les tables et les requetes
Public Function Get_Table_Names(Code As String) As Variant ' récupération des noms des tables pour usage
    Dim tablo() As Variant, i As Integer, drapeau As Boolean, j As Integer
    Application.Volatile
    j = -1
    For i = 0 To UBound(ADO_Module)
        drapeau = False
        Select Case UCase(Code)
            Case "T" ' Table
                If ADO_File.Table_Type(i) = "TABLE" Then drapeau = True
            Case "V", "R" ' View ou requete
                If ADO_File.Table_Type(i) = "VIEW" Then drapeau = True
            Case "A" ' All
                drapeau = True
        End Select
        If drapeau = True Then
            j = j + 1
            ReDim Preserve tablo(j)
            tablo(j) = ADO_File.Table_Name(i)
        End If
    Next i
    Get_Table_Names = tablo
End Function
Cette fonction renvoie une matrice avec les noms des tables et requettes
Sur la version 2000, dans cette procédure, je ne vois que ReDim Preserve tablo(j), qui pourrait ne pas fonctionner à confirmer.

si c'est redim preserve, j'en ai 20 dans le projet. Je peux les remplacer mais ca va compliquer le code vba
 
Dernière édition:

vbacrumble

XLDnaute Accro
Re : Liaisons avec d'autres bases de données

Re


Pourtant j'ai déjà utilisé du code VBA sous Excel 2000
avec des Redim Preserve

Je vais essayer de retester.
EDITION:
En fait , c'est plutôt le Ref Edit qui coince dans les références

(Si je le décoche cela fonctionne pour le moment)

Comment faire pour tester le SQL, si on ne connait pas la syntaxe ?

PS: compliments pour ce joli travail ;)
 
Dernière édition:

wilfried_42

XLDnaute Barbatruc
Re : Liaisons avec d'autres bases de données

re:

je n'utilise pas ref edit, pourquoi cela coincerait avec cette bibliothèque ?
aurais je une variable publique ou une fonction avec le même nom ?

la plus simple des SQL est : SELECT * From nomdelatable

mais dans le module, j'ai fait un paramétrage, qui permettrait de lier à l'aide de ADO d'autres acces à d'autres type de table que acces et c'est cette partie que je ne peux pas tester. Aujourd'hui je continue mes recherches, pour essayer de lier une table Dbase, celle ci, je pourrai la tester en en téléchargeant une.

merci encore de ton aide
 

vbacrumble

XLDnaute Accro
Re : Liaisons avec d'autres bases de données

Bonjour wilfried 42

Ce matin , j'ai voulu relancer ton appli

Et j'ai le message: Erreur de chargement de la Dll :confused:

Pour l'instant, je n'en vois pas la cause. Je cherche et te redis.

EDITION: Voila comment je m'en suis sorti.
1) effacement des fichiers temporaires dans mon profil
2) suppression du fichier utilisé hier
3) décompression d'un nouveau fichier xla de ton archive
4) ouverture "macros désactivées"
5) décochage Ref Edit MANQUANT dans VBE et enregistrement des changements dans le xla
6) réouverture du nouvau xla avec lancement des macros

Résultat : plus de message et application fonctionnelle.

Par contre, je ne sais pas expliquer le pourquoi du comment de ces messages d'erreur.

PS: autre phénomène curieux: quand on dézippe Liaisons_V3.xla
Taille du fichier : 366 Ko
Après 1ère utilisation puis fermeture du fichier et d'Excel
Taille du fichier : 166 ko
Bizarre non ?
 
Dernière édition:

wilfried_42

XLDnaute Barbatruc
Re : Liaisons avec d'autres bases de données

Re:

en testant sur une base access que je viens de télécharger, j'ai constater une erreur dans le cas ou la table n'est pas indexée (je ne savais pas que c'était possible m'enfin!)

correction à effectuer :
Module : ADO_Usf
Fonction : ADO_Move
correction en rouge :
Code:
        [COLOR="Red"]On Error Resume Next[/COLOR]
        ADO_Module(index).Field_Index = ADO_Module(index).Module.Fields(0).Value ' Mémorisation de l'index de l'enregistrement
        [COLOR="red"]On Error GoTo 0[/COLOR]

Suite à ton message : J'ai actuellement une taille de la XLA de 373 Ko en tenant compte que j'ai paramétré 2 nouvelles connexions : Dbase IV et Dbf Standard, cela correspondrait à 366 Ko et non 166 oui bizarre (je ne peux malheureusement tester sur 2000)

Par contre, je ne comprends pas la démarche que tu as du faire pour relancer après le plantage, personnellement je n'ai pas ce problème. j'ai relancé ce matin et continuer à travailler normalement sans aucun plantage spécifique.
Le changement de la taille qui impliquerait une modification de la XLA en serait-elle la Cause ?

Edit : Je viens de faire l'essai avec la version 2007, ça fonctionne à l'identique que la version 2002, Pour la gestion des tables Access, je ne trouve plus de problèmes...
je continue sur les bases Standard DBF. pour le moment j'ai un problème avec la connexion... Oui je sais, ce n'est que le début :D, mais j'ai l'espoir que le reste soit identique :p
 
Dernière édition:

vbacrumble

XLDnaute Accro
Re : Liaisons avec d'autres bases de données

Re


Si d'autres membres du forum (version Excel 2000) pouvaient tester ton fichier, on saurait si
c'est ma configuration (pourtant classique) qui pose problème ou si c'est Excel 2000.

Donc amis du forum en Excel 2000, si vous pouviez, s'il vous plait, rejoindre l'équipe des beta-testeurs du fichier de Wielfried , Merci :)

PS: voici les tailles exactes:
Fichier extrait de l'archive (et encore non utilisé)
10/03/2009 14:10 Liaisons_V3.xla
1 fichier(s) 374 272 octets

Fichier après une 1ère utilisation
11/03/2009 07:14 Liaisons_V3.xla
1 fichier(s) 139 264 octets
 

wilfried_42

XLDnaute Barbatruc
Re : Liaisons avec d'autres bases de données

Re:

Bon j'avance, mais je ne comprends pas tout

Voici la dernière version. Normalement, je n'ai plus de problème avec Acces, sur Excel 2002 / 2007.

j'essaie maintenant Sql Server, j'ai trouvé un fichier Sql que j'ai téléchargé sur mon Ordinateur. Par contre, mon micro n'est pas en réseau, donc je récupère les critères de connexion (Adresse Ip) par l'intermédiaire du programme Dos Ipconfig. Après un essai (m'enfin plusieurs) toujours la même erreur : Server Sql spécifié non trouvé.

la question est est-ce que je peux me connecter sur une base Sql alors que je n'ai pas de serveur. Si oui Comment ?

Installer la XLA jointe, elle Crée un menu déroulant dans la barre de commande. Liaisons Externes / Paramétrage
Dans la combobox : choisir Sql Server et Entrer le paramètre de connexion.
Tout en bas : connecting : un textbox permettant de programmer sa Connexion.
 

Pièces jointes

  • Liaisons_V3.zip
    133.3 KB · Affichages: 179

wilfried_42

XLDnaute Barbatruc
Re : Liaisons avec d'autres bases de données

re:

Non surtout pas, je cherche à accéder à toute forme de base de données sans avoir besoin d'un quelconque logiciel externe à Excel.

@ bientôt pour la nouvelle version.
 

MichelXld

XLDnaute Barbatruc
Re : Liaisons avec d'autres bases de données

bonjour Wilfried,

je cherche à accéder à toute forme de base de données sans avoir besoin d'un quelconque logiciel externe à Excel.

As tu consulté cette démo :

Lien supprimé


bonne journée
michel
 

michel_m

XLDnaute Accro
Re : Liaisons avec d'autres bases de données

Salut Wilfried,

Pour te connecter à différentes bases de données, ce site te donne pas mal de scripts:
Strings and Manipulations

En parcourant rapidement ce post, il me semble que la méthode la + efficace pour "voir" la structure d'une base de données est la technologie AOX et non ADO ( tu as des exemples dans le Wiki page6 de MichelXLD)

ci dessous un exemple avec Access (il est dans le wiki: construire une base au format Access sans avoir Access d'installé)
Code:
' d'après ...\Program Files\Microsoft Office\Office\Samples et MichelXLD sur Forum Excel-downloads
Dim T_xxx
Dim conn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim cat As ADOX.Catalog
Dim fld As ADODB.Field

    Sub schematiser_base()
        Dim chemin As String, fichier As String
        
        'effacement de la zone dictionnaire
        Range("A4:D100").Clear
        
       ' Création de l'objet Connexion
        chemin = ThisWorkbook.Path
        fichier = chemin & "\" & base
        Set conn = New ADODB.Connection
        With conn
            ' Définition du fournisseur OleDB pour la connexion
            .Provider = "Microsoft.JET.OLEDB.4.0"
            ' Ouverture d'une connexion vers la base
            .Open fichier
        End With
        
        Set cat = New ADOX.Catalog
        Set cat.ActiveConnection = conn
        ' énumère les tables de la base commencant par "T_"
        ' méthode d'après MichelXLD sur Forum Excel-downloads
        For Each T_xxx In cat.Tables
            If Left(T_xxx.Name, 2) = "T_" Then
                lister_champs
            End If
        Next
        conn.Close
    End Sub

                           
    Sub lister_champs()
    
    lig = Range("B100").End(xlUp).Row + 2
    With Cells(lig, 1)
        .Value = T_xxx.Name
        .Font.Bold = True
    End With
        
    Set rst = New ADODB.Recordset
        With rst
            .ActiveConnection = conn
            .Open "SELECT * FROM " & T_xxx.Name & ""
        End With
        
        For Each fld In rst.Fields
            Cells(lig, 2) = fld.Name
            Cells(lig, 3) = dire(fld.Type)
            Cells(lig, 4) = fld.DefinedSize
            lig = lig + 1
        Next fld
      
    Set rst = Nothing
        
    End Sub

Function dire(num As Long) As String
Select Case num
    ' Il existe 39 types; les + utilisés:
    Case 3
    dire = "Entier long"
    Case 4
    dire = "réel simple"
    Case 5
    dire = "Réel double"
    Case 6
    dire = "monétaire 4 après virgule"
    Case 7
    dire = "date"
    Case 11
    dire = "booléen"
    Case 202
    dire = "texte type access"
    Case 203
    dire = " texte type mémo"
End Select
End Function

si ca peut t'aider...
pour trouver les clés primaires, j'ai eu la flemme...
Amicalement
 

MJ13

XLDnaute Barbatruc
Re : Liaisons avec d'autres bases de données

Bonjour à tous

Il est vrai que ce n'est pas toujours pratique de faire des requêtes sur Excel avec SQL.

Mais quand j'en ai besoin, je le fait directement d'Excel. J'enregistre une macro avec \Données \données externe. Puis je modife le code, ainsi, je ne me prend pas trop la tête avec la syntaxe.

Mais c'est vrai que c'est pas toujours facile de trouver le bon type ODBC (j'aime bien le .txt qui est assez universel).
 

Discussions similaires

Statistiques des forums

Discussions
313 928
Messages
2 103 632
Membres
108 739
dernier inscrit
titoooo428