belette321
Messages postés100Date d'inscriptionsamedi 3 mai 2008StatutMembreDernière intervention 9 mars 2011
-
15 févr. 2009 à 01:13
belette321
Messages postés100Date d'inscriptionsamedi 3 mai 2008StatutMembreDernière intervention 9 mars 2011
-
15 févr. 2009 à 15:03
Bonjour,
Je creer acctuelment un programme utilisant une base de donner 'SQL Server' (2005), Mais j'epprouve un problemme je ne comprend pas dutout comment utiliser la gestion de donner et de base de donner sur VB6 .. Pour la partie connection, sa l'air de fonctionnez relativement bien mais je n'ai auqu'une idee comment executer des requete et comment afficher le retour de requete alor voilla ..
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 15 févr. 2009 à 02:45
Salut
Et bien dans cette source, tu as tout :
En fait, pour s'adresser à une DB, tu as besoin de ADODB (conseillé) : Voir menu "Projet" + "Références" + "Microsoft ActiveX Data Objects 2.8 Library"
Cette référence est fournie avec le <SP6 de VB6>
Tu dimensionnes une variable oConn de type ADODB.Connection
Dim oConn As ADODB.Connection
puis tu définies son attribut .ConnectionString pour pointer sur ta DB, puis faire un .Open. Dans la source dont tu parles, tout est concentré dans la commande .Open.
Ensuite, pour questionner ta DB avec une requète SQL, il faut préparer une variable de type ADODB.RecordSet.
Le RecordSet sera une sorte de tableau qui récupèreras les données filtrées demandées.
Préparation :
Dim sSQL As String
Dim rsMonRS As ADODB.RecordSet sSQL "Select monChamp1, monChamp2 From maTable Where monChamp 'toto'"
Pour lancer la requète :
rsMonRS.Open sSQL, oConn
Pour lire le contenu du RecordSet, il te suffit de faire une boucle.
Ce genre de boucle se retrouve dans n'importe quelle source qui traite de DB
If rsMonRS.RecordCount > 0 Then
With rsMonRS
.MoveFirst
Do While Not .EOF
' Pas sur que les Fields commencent à 0 : à vérifier
Debug.Print .Fields(0).Value, .Fields(1).Value
' Autre syntaxe possible :
' Debug.Print rsMonRS!monChamp1, rsMonRS!monChamp2
.MoveNext
Loop
End With
End If
Pour les ordres que tu voudras envoyer à ta DB, comme un Delete, il faudra t'adresser directement à la connexion :
Dim r As Long
oConn.Execute "Delete * From maTable Where monChamp = 'toto'", r
Debug.Print r; " données supprimées"
Je te laisse le soin de te renseigner sur les syntaxes SQL à utiliser + les astuces à savoir pour les champs qui comportent des caractères particuliers, comme ' % "
Le forum regorge de questions à ce sujet
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 15 févr. 2009 à 13:08
Re
Comme je te l'ai dit, seul un RecordSet peut récupérer le résultat d'une requète.
Si ta requète est sensée ne renvoyer qu'une seule valeur, ce n'est pas grave, il n'y aura qu'un seul enregistrement dans le RecordSet et la boucle de lecture ne tournera qu'une seule fois.
Il est donc important de tester si le RecordSet comporte plusieurs enregistrements : monRecordSet.RecordCount
Une requète peut aussi demander l'affichage de plusieurs champs.
Imagine toi qu'un RecordSet est un tableau :
- Les lignes sont les enregistrements
Les lignes se parcourrent avec la boucle
- Les colonnes sont les champs d'un même enregistrement
Les colonnes portent le nom du champ (monRecordSet!LeNomDeMonChamp) ou sont indexables (monRecordSet.Fields(x).Value)
Exemple 1 :
Si tu fais une requète genre : "Select Nom, Prenom From maTable"
Tu récupèreras plusieurs fiches (lignes) et dans chaque fiche, tu pourras lire plusieurs champs (colonnes) : "Nom" et "Prenom" avec monRecordSet!Nom et monRecordSet:Prenom
Exemple 2 :
Si maintenant tu fais "Select Count() From maTable"
Le RecordSet récupèrera une seule donnée, oui, mais la colonne n'aura pas de nom.
Dans ce cas, il faut utiliser la syntaxe monRecordSet.Fields(0).Value pour voir le résultat
(0 ou 1, je ne suis plus sûr)
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
belette321
Messages postés100Date d'inscriptionsamedi 3 mai 2008StatutMembreDernière intervention 9 mars 20111 15 févr. 2009 à 04:34
Merci boucoup,
J'ai compris une bonne partie de se que vous m'avez dit .. Vous m'avez un peut perdu dans l'histoire de la boucle du RecordSet ... Je veut faire afficher le resulta peut importe quel qu'il soit dans une TextBox .. Pourriz-vous me montrez de quoi sa aurrais l'air dans une boucle parceque personnelement j'ai auqu'une idee comment placer les code pour le faire ..
Merci !
P.S: Pour le truc de que j'ai utiliser pour la 1er fois le [../codes/CONNECTION-SQL-SERVER-SIMPLE_3556.aspx CONNECTION À SQL SERVER SIMPLE], Je deconseil son utilisation .. le code n'est pas dutout adapter pour le "MICROSOFT SQL EXPRESS 2005" ... J'utilise plutot :