Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1249 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Comment Importer des données Sql en Vb

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comment Importer des données Sql en Vb

n°701048
FRED20000
Posté le 16-04-2004 à 13:59:29  profilanswer
 

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.

mood
Publicité
Posté le 16-04-2004 à 13:59:29  profilanswer
 

n°701087
cleini
Posté le 16-04-2004 à 14:29:52  profilanswer
 

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

n°701095
alterisanz
Posté le 16-04-2004 à 14:36:14  profilanswer
 

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"
@+

n°701116
FRED20000
Posté le 16-04-2004 à 14:59:45  profilanswer
 

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

n°701147
alterisanz
Posté le 16-04-2004 à 15:24:04  profilanswer
 

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à.

n°701150
drasche
Posté le 16-04-2004 à 15:25:11  profilanswer
 

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.

n°701158
alterisanz
Posté le 16-04-2004 à 15:32:29  profilanswer
 

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

n°701166
drasche
Posté le 16-04-2004 à 15:35:10  profilanswer
 

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

n°701180
alterisanz
Posté le 16-04-2004 à 15:47:33  profilanswer
 

Tiens merci pour ça c'est sympa.

n°701270
FRED20000
Posté le 16-04-2004 à 16:57:08  profilanswer
 

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)

mood
Publicité
Posté le 16-04-2004 à 16:57:08  profilanswer
 

n°701278
alterisanz
Posté le 16-04-2004 à 17:02:01  profilanswer
 

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

n°701280
drasche
Posté le 16-04-2004 à 17:04:01  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Comment Importer des données Sql en Vb

 

Sujets relatifs
[SQL] Supprimer les lignes 'inutiles' dans mon résultat...connection base de données ?
structures de données en c++: graphes[SQL] Erreur incompréhensible (insert into)
problème SQL sur une plateforme W2003Server et SQL 2000Quelques conseils pour un débutant vba - base de données
[SQL] Requete update qui ne s'effectue pasfaire un tableau à 2dim depuis 2 colonnes de données dans un fichier
Problème de requête SQL[Windev] interaction avec SQL Server
Plus de sujets relatifs à : Comment Importer des données Sql en Vb


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR