Bonjour,
je suis en train de develloper une application sous VB 6 et je n'arrive pas a trouver la commande adéquat a mes exigeances :
Tout d'abord je vais vous expliquer la procedure du programme en question ensuite le code
La procedure du programme
1 - il charge la base de données choisi par code
2 - il charge le nom de tables contenu dans la table dans une listbox
3 - il charge le noms des champs de la table choisi en 2 dans une liste box
4 - il transfert les noms de champs choisi en 3
5 - il genere un code SQL de type SELECT ... FROM en prenant le nom des champs qui sont en 4 et le nom de la table saisie en 2
6 - de cette requete il extrait les resultats des champs pour faire une requete de remplissage de table de type INSERT INTO ... VALUES puis ('Valeur.champ1','Valeur.champ2',...);
7 - il enregistre ligne par ligne (la sauvegarde dans le fichier se fait par pairs de INSERT INTO avec('......'); dans un fichier
seul les 6 et 7 sont encore a faire, mais si les autres ne vous semble pas assez bien fait, merci d'expliquer pourquoi :-)
voici le code :
Option Explicit
'creation d'une var de connection ADO
Dim Adoconnex As New ADODB.Connection
'Creation d'un RecordSet
Dim Rcdset As New ADODB.Recordset
'creation des champs de la table
Dim fldLoop As ADODB.Field
Dim nom_table As String
Private Sub cmdcharg_Click()
'ouverture d'une connexion Scheme de table
Set Rcdset = Adoconnex.OpenSchema(adSchemaTables)
' Repeter tant que le dernier élément n'est pas atteint
Do Until Rcdset.EOF
'la listbox recoit le nom de la table et avant d'un cran
lstnomtabl.AddItem Rcdset!table_name
Rcdset.MoveNext
Loop
Rcdset.Close
' une fois les tables chargées le bouton devient inactif
cmdcharg.Visible = False
End Sub
Private Sub cmdnouv_Click()
Lstchamprecep.Clear
lstnomchamp.Clear
lstnomtabl.Clear
cmdcharg.Visible = True
Cmdrecupchamp.Visible = True
End Sub
Private Sub Cmdquitter_Click()
'fermeture des connexions
Adoconnex.Close
'fermeture de la fenetre
Unload Me
'fermeture du programme
End
End Sub
Private Sub Cmdrecupchamp_Click()
' Variable pour les boucles
Dim i As Integer
'mise à 0
i = 0
'tant que la valeur de i reste inferieure à la valeurs des elements - 1 (1er element à la place 0)
While i <= (lstnomtabl.ListCount - 1)
'si l'element est selectionné
If lstnomtabl.Selected(i) = True Then
'la viariable recupere le nom de la table
nom_table = lstnomtabl.Text
End If
'incrementation de 1
i = i + 1
Wend
If Not nom_table = "" Then
' Ouverture de la table selectionnée
Rcdset.Open nom_table, Adoconnex, adOpenDynamic, adLockOptimistic, adCmdTable
'Charge dans la listbox les noms des champs de la table selectionnée
For Each fldLoop In Rcdset.Fields
' Pour chaque champs de la table l'ajouter dans la la listbox
lstnomchamp.AddItem fldLoop.Name
Next fldLoop
' le bouton une fois activé devient invisible
Cmdrecupchamp.Visible = False
Else
'message d'erreur
MsgBox "Veuillez selectionner une table avant d'executer!"
End If
Rcdset.Close
End Sub
Private Sub cmdrqsql_Click()
' Chaine de caractere contenant les requetes SQL
Dim rqSQL As String
'Recupuration de la requête SQL
Dim resSQL2 As Variant
Dim resSQL As Variant
resSQL = "SELECT"
' Indice pour les boucles
Dim i As Integer
Dim valeurs As Variant
Dim valeur As Variant
'Pour tous les champs de la liste
For i = 0 To (Lstchamprecep.ListCount - 1)
' si ce n'est pas le dernier element
If i <> (Lstchamprecep.ListCount - 1) Then
' rqSQL recoi le format SQL
rqSQL = rqSQL + " " + Lstchamprecep.List(i) + ","
Else
'si c'est le dernier
rqSQL = rqSQL + " " + Lstchamprecep.List(i)
End If
Next i
'creation de la requete SQL d'affichage des champs selectionné
rqSQL = resSQL + rqSQL + " FROM " + nom_table + ";"
' affichage du SQL dans un Label
LbresSQL.Caption = rqSQL
End Sub
Private Sub Cmdtransfert_Click()
Dim i As Integer
i = 0
' Transfert des noms de champs que l'on désire
While i <= lstnomchamp.ListCount - 1
If lstnomchamp.Selected(i) = True Then
'Transfert du champs vers la 2eme listbox
Lstchamprecep.AddItem (lstnomchamp.Text)
' Suppression du champs selectionné
lstnomchamp.RemoveItem i
Else
i = i + 1
End If
Wend
End Sub
Private Sub Form_Load()
Dim i As Integer
' Creation d'une chaine de caractere pour la connection
Dim strCnn As String
' Ouverture de la connexion et du RecordSet
' Connexion OBDC
strCnn = "Provider=MSDASQL.1;Persist Security Info=False;DSN=MS Access Database;DBQ=C:\base\biblio.mdb;DefaultDir=C:\base;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;SystemDB=C:\Documents and Settings\ripcurlpro\Bureau\projet d'enteprise\SYSTEM.MDW;UID=ade;"
Adoconnex.Open strCnn
End Sub
j'espere qu'avec tous les commentaires vous comprendrez ce que j'ai programmer merci a vous!
Configuration: WINDOWS XP
VB 6