Comment Importer des données Sql en Vb

Comment Importer des données Sql en Vb - VB/VBA/VBS - Programmation

Marsh Posté le 16-04-2004 à 13:59:29    

Bonjour,
Je cherche à importer des données venant d'une base de données SQL
Avec le Prog suivant, je l'importe dans Excel :
Dim qt As QueryTable
sqlstring = "Select CodeArticle,Design From ARTICLE "
connstring = "ODBC;DSN=XXXX;UID=XXX;XX=;"
With ActiveSheet.QueryTables.Add(Connection:=connstring, _
Destination:=Range("a1" ), Sql:=sqlstring)
.Refresh BackgroundQuery:=False
End With
Le but est d'importer les données dans un tableau VB genre "Array" ou autre sans passer par excel.
Est-ce que quelqu'un a une idée et pourrait éventuellement m'écrire le Prog ?
Merci.

Reply

Marsh Posté le 16-04-2004 à 13:59:29   

Reply

Marsh Posté le 16-04-2004 à 14:29:52    

déclarer un tableau de x postes
faire une boucle  
et remplir  
voilà mon idée

Reply

Marsh Posté le 16-04-2004 à 14:36:14    

Voila une fontion VBA qui permet sur une BD distante (comme avec SQL server) d'excuter des procedures stockées et des requetes
 
 
Public Const strConnect = "ODBC;DRIVER=SQL Server;SERVER=xxx ;DATABASE=xxx"
 
Public Function ps_Execute(sSQL As String, Optional bResult As Boolean = True) As DAO.Recordset
Dim oRst As DAO.Recordset
 
    ' test si la query est toujopurs valide en mémoire
    If qdfTemp Is Nothing Then
        ' recherche du query
        On Error GoTo Erreur
        Set qdfTemp = CurrentDb.QueryDefs("temp" )
        On Error GoTo 0
        ' si pas trouvé on le créer
        If qdfTemp Is Nothing Then
            Set qdfTemp = CurrentDb.CreateQueryDef("temp" )
        End If
    End If
    qdfTemp.Connect = strConnect
    qdfTemp.Sql = sSQL
     
    If bResult Then
        qdfTemp.ReturnsRecords = True
        Set ps_Execute = qdfTemp.OpenRecordset()
    Else
        qdfTemp.ReturnsRecords = False
        qdfTemp.Execute
    End If
Exit Sub
 
Erreur:
    MsgBox "Erreur n°" & err.Number & Chr(10) & Chr(10) & "DESCRIPTION :" & Chr(10) & _
            err.Description
             
End Function
 
 
 
Voila apres tu mets tes requetes pour recuperer les infos de ta BD distantes. Pour les procedures stockées au lieu d'une requete tu mes "exec NomProc"
@+

Reply

Marsh Posté le 16-04-2004 à 14:59:45    

Merci pour ta reponse Alterisanz.
J'ai une msgbox "Erreur de compilation;Type defini par l'utilisateur non defini" qui apparait sur la 2éme ligne.
Pour info je ne suis pas une lumiere en Vb

Reply

Marsh Posté le 16-04-2004 à 15:24:04    

Ah merde desfois il me la met aussi...
En fait si tu veux ça fait seulement 4 jours que je fait du VBA mais 8h par jour... donc je débute aussi mais cette fonction, je te rassure n'est pas de moi mais d'un gars à mon boulot qui me l'a refilé et qui taquine.
Essaye de rajouter cette ligne dans ton code :
 
Public oFs As FileSystemObject
 
Mais je crois que cela ne fait rien puisque c'est un objet que l'on n'utilise pas.  
 
Sinon verifie que ton serveur SQL distant soit lancé. Moi j'ai Microsoft SQL server et ça marche et toi tu a quelle version ? Peut-être que cela vient de là.

Reply

Marsh Posté le 16-04-2004 à 15:25:11    

La méthode GetRows de la classe Recordset permet de faire ça en une seule ligne. Donc tu ouvres un recordset, et tu fais GetRows directement que tu assignes à une simple variable de type Variant.

Reply

Marsh Posté le 16-04-2004 à 15:32:29    

J'ai pas trop pigé ce que tu a dis Drasche...
Au fait Fred 2000 j'y pense cela vient plutot du fait que tu n'a pas tte les référence. Dans Acess tu fais "Outil", puis "référenceé et là tu vérifie ce que t'as. Tu dois avoir "Microsoft DAO object library" moi en plus c'est la version 3.6.
Bonne chance

Reply

Marsh Posté le 16-04-2004 à 15:35:10    

bin c'est simple, la méthode GetRows renvoie un tableau bidimensionnel équivalent au contenu du recordset ouvert :o

Reply

Marsh Posté le 16-04-2004 à 15:47:33    

Tiens merci pour ça c'est sympa.

Reply

Marsh Posté le 16-04-2004 à 16:57:08    

Ok les gars, donc si je comprends bien :
1- J'installe la library DAO (Est-ce que ça marche avec Vba Excel et Vba autocad)
2- Je tape le Prog de Alterisanz
3- Je fais un GetRows (As-tu un exemple de code pour cette fonction)

Reply

Marsh Posté le 16-04-2004 à 16:57:08   

Reply

Marsh Posté le 16-04-2004 à 17:02:01    

Le getrows c'est pas indispensable mais ça à l'air bien pratique pour manipuler les tables mais renseigne toi pour cette fonction.

Reply

Marsh Posté le 16-04-2004 à 17:04:01    

le GetRows, ça sert uniquement à retourner un tableau comme je le disais plus haut mais ça s'arrête là. Il n'y a aucun lien entre ce tableau et la DB, ça revient donc à faire une lecture simple.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed