Comment Importer des données Sql en Vb - VB/VBA/VBS - Programmation
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
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"
@+
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
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à.
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.
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
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
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)
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.
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.
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.