[RESOLU] MS QUERY connexion ODBC avec SEVEN64

vynmarius

XLDnaute Nouveau
Bonjour,

J’ai souvent utilisé MS query avec Excel 2007 ou 2010 sur un système 32bits, et je n'ai jamais rencontré de problème.

Je suis passé à seven 64bits depuis peu, et je n'arrive plus à faire de requête avec MS QUERY.

- j'ai configuré ma connexion via c:\windows\syswow64\odbcad32.exe
- j'ai tenté une connexion via l'assistant de connexion OLE DB pour oracle, ce qui m'a permis de voir que la connexion marche, puisque la requête m'a renvoyé les données de la table interrogée.

J’ai ouvert une ancienne requête dans excel, donc là aussi pas de problème de liaison, on dirait plutôt que c’est MS Query qui plante, lors de la création d’une nouvelle requête.

J’espère avoir bien exposé mon problème, et qu’il y a des personnes qui connaissent bien MS Query, merci.


edit : je viens de tester avec l'assistant de connexion d'excel sur une base DSN ODBC, et ça a planté, donc ce serait la liaison Excel ODBC qui aurait un problème
 
Dernière édition:

pedrag31

XLDnaute Occasionnel
Re : MS QUERY connexion ODBC avec SEVEN64

Bonjour Vynmarius, le forum,

Si ça peut t'aider le code que j'utilise pour faire des requêtes ODBC depuis Excel/VBA qui fonctionne pour mes AddIns sur Win98 (Excel 2003) et Win7 (Excel 2007 et 2010):

Dans un module:
VB:
'*****************************************************
'Dans VBA Menu "Tools/References..."
'Cocher "Microsoft ActiveX Data Object 2.8 Library"
'Ajouter "Microsoft Scripting Runtime" reference
'*****************************************************

'Option Private Module
Public Connection_Base As New ADODB.Connection

'*****************************************************

Public Function Connection()

Dim strSource As String
' .State=0 càd non connecté
' .State=1 càd CONNECTé
If Connection_Base.State = 0 Then

DriverName = "Firebird/InterBase(r) driver"
ServerName = "SERVER" 'nom serveur
DataBaseName = "SERVER:C:\Program Files\Firebird\bin\data.fdb" 'adresse base
UserId = "UserName"
PswdID = "PassWord"
OptionName = "ODBC"

   Connection_Base.ConnectionString = "DRIVER=" & DriverName & ";SERVER=" & ServerName & ";DATABASE=" & DataBaseName & ";UID=" & UserId & ";PWD=" & PswdID & "; OPTION=" & OptionName
    Connection_Base.Open
End If

'Pour tests:
'If Connection_Base.State = 1 Then MsgBox "youpi!"
End Function

'*****************************************************

Public Function Connection_Close()

Dim strSource As String
' .State=0 càd non connecté
' .State=1 càd CONNECTé
If Connection_Base.State = 1 Then
    Connection_Base.Close
End If

'Pour tests:
'If Connection_Base.State = 0 Then MsgBox "youpi!"
End Function

Puis le code que j'utilise dans mes macros/USF pour faire les requêtes:

VB:
Dim Rst_Temp As New ADODB.Recordset
Dim sSQL As String

   Set Rst_Temp = Nothing
   Call Connection
        'Le texte de la requête souhaitée
        sSQL = "SELECT * FROM ARTICLE WHERE ARKTSOC='999' AND ARKTCODART LIKE '%" & UCase(TextBox1.Value) & "%'"

'Exécution de la requête...
With Rst_Temp
      .CursorLocation = adUseClient
      .Open sSQL, Connection_Base, adOpenStatic, adLockOptimistic, adCmdText
End With

If Rst_Temp.RecordCount <> 0 Then
     Do While Not Rst_Temp.EOF

        '***** Exploitation des données de la requête... (ici un affichage Listview)*****
        With ListView1
            .ListItems.Add , , Rst_Temp(0)
            If Rst_Temp(4) = "1" Then .ListItems(.ListItems.Count).ForeColor = RGB(50, 0, 255)
            If Rst_Temp(4) = "6" Then .ListItems(.ListItems.Count).ForeColor = RGB(255, 0, 50)
            
                For i = 1 To 165
                    .ListItems(.ListItems.Count).ListSubItems.Add , , Rst_Temp(i)
                    'Format
                    If Rst_Temp(4) = "1" Then .ListItems(.ListItems.Count).ListSubItems(i).ForeColor = RGB(50, 0, 255)
                    If Rst_Temp(4) = "6" Then .ListItems(.ListItems.Count).ListSubItems(i).ForeColor = RGB(255, 0, 50)
                Next i
            .View = lvwReport
        End With
        '***** Fin d'exploitation des données *****


        Rst_Temp.MoveNext
       Loop
Else
     MsgBox "No data"
End If

'Affichage du nombre d'article trouvés
Label4.Caption = Rst_Temp.RecordCount & " Items found"

Rst_Temp.Close

Voilà, en espérant que ça te mette sur une piste de solution...

Edit: Les pilotes (drivers Firebird) ODBC que j'utilise ne sont pas les mêmes entre la version 32bits et 64bits de Windows. A voir si ça ne viendrait pas de ça dans ton application...

Bonne journée :)
 
Dernière édition:

vynmarius

XLDnaute Nouveau
Re : MS QUERY connexion ODBC avec SEVEN64

merci, je vais regarder ;)

super avec ton code et l'indication entre 32/64 j'ai pu régler mes problèmes, même si le premier accès à la création de la requête avec MS QUERY dure pas loin de 5min, avant de me proposer la liste des tables de la BDD. sinon après ouverture ça marche nickel, merci.

j'ai bien aimé :

Code:
'If Connection_Base.State = 1 Then MsgBox "youpi!"
 
Dernière édition:

pedrag31

XLDnaute Occasionnel
Re : MS QUERY connexion ODBC avec SEVEN64

Re,

Ravi que ça ait pu t'aider et que ta requête fonctionne!
J'avais mis pas mal de temps à l'époque avant de trouver ce code pour les requêtes depuis VBA.

A noter que mon code est un peu incomplet, il faut que tu penses à ajouter un " Call Connection_Close" à la fin de tes macros (avant la fermeture de ton appli) pour ne pas laisser des connexions ouvertes vers la base que tu utilises.

Bon code et bonne journée :)
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
314 626
Messages
2 111 299
Membres
111 094
dernier inscrit
MFrequence