IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[E-07] Probleme odbc et requete sql


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Mars 2008
    Messages : 325
    Par défaut [E-07] Probleme odbc et requete sql
    Bonjour

    Je ne comprend pas pourquoi le programme plante au niveau de l'ouverture d'une requete (en rouge dans le code).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Friend Function ListeUtilisateur() As String
        Dim s_Liste As String
        Dim ADD_User As ADODB.Recordset
        Set ADD_User = New ADODB.Recordset
        s_Liste = ""
    
        ADD_User.Open "SELECT * FROM USER", ConnCACAO, adOpenStatic, adLockReadOnly
        If ADD_User.EOF = False Then
            Do While Not ADD_User.EOF
                If s_Liste = "" Then
                    s_Liste = ADD_User("TLOGIN")
                Else
                    s_Liste = Liste & car_Tabulation & ADD_User("TLOGIN")
                End If
                ADD_User.MoveNext
            Loop
        End If
        ADD_User.Close
        Set ADD_User = Nothing
        ListeUtilisateur = s_Liste
     
    End Function
    le programme plante sur la ligne en rouge et voici le message d'erreur :
    erreur d'exécution .'-2147217887(80040e21)'
    Ce pilote OBDC ne prend pas en charge les proprietés demandées
    pourtant j'ai réalisé plusieurs requêtes sur différents fichiers de cette base et cela fonctionne bien exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Global ADD_Dossier As ADODB.Recordset
    Set ADD_Dossier = New ADODB.Recordset
    ADD_Dossier.Open "SELECT * FROM Dossier ", ConnCACAO, adOpenStatic, adLockReadOnly

  2. #2
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Etrange,
    car ADO ne nécessite aucun pilote ODBC, ni aucune définition de donnée.

    J'utilise par exemple le code suivant, sans ODBC, juste avec la référence ADO 2.6 (je crois) cochée dans le VBA.

    NB : j'ai caché certain paramètre en les remplaçant par **** pour que le code soit neutre/anonyme.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    Public Sub ReadFileFull(ByVal Input_File As String, ByVal Target_worksheet As String, ByVal Target_range As String)
    'ReadFileFull : get  data from Lib.file(member) and insert that in Worksheet at desired range cell
    'usage : ReadFileFull (File, Worksheet, Range)
    ' Input_File : can be either Lib.file
    '                    or Lib.File(member)
    ' Target_Worksheet : Must be a valid Worksheet Name : if exists : cleared before fullfillment
    '                                              if not exists : will be created
    ' Target_Range     : Must be a valid cell name : Example "A1"
     
        On Error GoTo ErrorHandler
     
        Dim cn          As New ADODB.Connection
        Dim rs          As New ADODB.Recordset
        Dim sConn       As String
        Dim SqlString   As String
        Dim FileName    As String
        Dim DSN_Name As String
        Dim ws          As String 'Results Storing Worksheet name
        Dim Rg          As String 'results Cells top left
        Dim cellule     As Range
        Dim CompA       As Integer
        Dim idx         As Long
        Dim sheet_found As Boolean
        Dim ActShName   As String
     
     
     
     
     
        sConn = "provider=*****;Data source=***.***.***.***;USER ID=*****;PASSWORD=****"
        FileName = Trim(Input_File)
        ws = Trim(Target_worksheet)
        Rg = Trim(Target_range)
     
        'check target Worsksheet exists and if not build
        sheet_found = False
        For idx = 1 To Sheets.Count
            If Sheets(idx).Name = ws Then
                Application.DisplayAlerts = False
                Sheets(idx).Cells.Clear
                Application.DisplayAlerts = True
                sheet_found = True
                Exit For
            End If
        Next idx
        'Build Ws
        If Not sheet_found Then
            ActShName = ActiveSheet.Name
            Sheets.Add
            ActiveSheet.Name = ws
            Sheets(ActShName).Activate
        End If
     
        'Open Connection
        cn.ConnectionString = sConn
        cn.Open
        SqlString = "SELECT * FROM " & FileName & ""
     
        'open record Set
        rs.Open SqlString, cn
     
     
     
        'Paste Fields names in line 1
        Set cellule = Worksheets(ws).Range(Rg)
        For CompA = 0 To rs.Fields.Count - 1
            cellule.Offset(0, CompA).Value = rs.Fields(CompA).Name
        Next CompA
        'Paste results line above names
        Worksheets(ws).Range(Rg).Offset(1, 0).CopyFromRecordset rs
     
        rs.Close
        cn.Close
        Set cn = Nothing
        Set rs = Nothing
     
        Exit Sub
    ErrorHandler:
        ' clean up
        If Not cn Is Nothing Then
            If cn.State = adstateopen Then cn.Close
        End If
        Set cn = Nothing
        If Not rs Is Nothing Then
            If rs.State = adstateopen Then rs.Close
        End If
        If Err <> 0 Then
          MsgBox Err.Source & "-->" & Err.Description, , "Error"
        End If
     
    End Sub

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Mars 2008
    Messages : 325
    Par défaut
    voici ma connextion odbc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    Sub ConnexionODBC()
        Dim strConnCACAO As String
        Dim strConnCACAOServ As String
        ' Connexion à la base hyperfile par lien odbc
        Set ConnCACAO = New ADODB.Connection
        Set ConnCACAOServ = New ADODB.Connection
     
        On Error GoTo errorhandler
     
        ' Connexion base CACAO Fichier
        strConnCACAO = "DRIVER={HyperFileSQL};DSN=CACAO;ANA=" & s_RepCACAO & s_AnalysCACAO & ";REP=" & s_RepFichiers & "\;Server Name=;Server Port=;Database=;UID=;PWD"
        ConnCACAO.ConnectionString = strConnCACAO
        ConnCACAO.Open
     
        ' Connexion base CACAO Serveur
        strConnCACAOServ = "DRIVER={HyperFileSQL};DSN=CACAO;ANA=" & s_RepCACAO & s_AnalysCACAO & ";REP=" & s_RepFichiersServ & "\;Server Name=;Server Port=;Database=;UID=;PWD"
        ConnCACAOServ.ConnectionString = strConnCACAOServ
        ConnCACAOServ.Open
     
     
        Exit Sub
     
    errorhandler:
            MsgBox Err.Number & vbLf & Err.Description, vbCritical, "ERREUR Connexion ODBC"
     
            'Quitte Excel
            Application.Quit
            'Libère la mémoire
            Set ApplicationExcel = Nothing
    End Sub

  4. #4
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Pourquoi 2 connections, 1 fichier et 1 serveur.

    Essaie de faire comme moi et de remplacer le nom DNS (DSN) par l'iP du serveur et donc de faire sans l'ODBC.

    Attention que tes paramêtres pour le string de connection seront différents des miens car le type de serveur influe sur la syntaxe de connection.

    NB : j'ai trouvé la doc pour ma connection dans la pateform SDK de microsoft que j'ai téléchargé du Web (libre).

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Mars 2008
    Messages : 325
    Par défaut
    enfet j'ai 2 bases de données

    la première C:\CACAO\FICHIERS la j'ai les fichiers suivant :

    JOURNAL
    PERSONNE
    BDNUM
    COMPTES

    DOSSIER
    DROIT

    ...

    en vert se que j'utilise et qui fonctionne
    en rouge ce que j'utilise et qui ne fonctionne pas

    la première C:\CACAO\Serveur la j'ai les fichiers suivant :

    DOSSIER
    DROIT
    ...

    DICOS

    en vert se que j'utilise et qui fonctionne
    en rouge ce que je n'utilise pas

    Donc les fichiers qui existent dans les deux bases possent problème
    pourtant dans ma requête je présice bien la base

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ADD_UserFichier.Open "SELECT * FROM USER ", ConnCACAO, adOpenStatic, adLockReadOnly

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Mars 2008
    Messages : 325
    Par défaut
    J'ai créé un nouveau projet et j'ai crée un fichier user et droit et le fichier droit pas bien mais pas user, c'est les même suf leur nom. Je pense que user doit être un mot interdit pour les requêtes

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Probleme boucle avec requete SQL
    Par sandrine dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 19/07/2008, 21h50
  2. [MySQL]probleme introuvable sur requete sql
    Par SegmentationFault dans le forum Requêtes
    Réponses: 2
    Dernier message: 27/11/2006, 01h12
  3. [Access 2003] probleme de regroupement requete SQL
    Par blond2comet dans le forum Langage SQL
    Réponses: 4
    Dernier message: 25/09/2006, 16h11
  4. Probleme ASP et requete SQL
    Par alhc2666 dans le forum ASP
    Réponses: 2
    Dernier message: 15/03/2006, 23h04
  5. probleme avec creation requete sql server
    Par Firas_tn dans le forum MS SQL Server
    Réponses: 19
    Dernier message: 15/04/2005, 13h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo