Requetes SQL ... Aidez-moi s.v.p !

Résolu
Signaler
Messages postés
100
Date d'inscription
samedi 3 mai 2008
Statut
Membre
Dernière intervention
9 mars 2011
-
Messages postés
100
Date d'inscription
samedi 3 mai 2008
Statut
Membre
Dernière intervention
9 mars 2011
-
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 ..
 
S.V.P Aidez-moi !
Merci pour votre aide futur :)

P.S: Pour la connection j'utilise les source si-dessous ..
- CONNECTION À SQL SERVER SIMPLE -
 

5 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
80
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)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
80
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)
Messages postés
100
Date d'inscription
samedi 3 mai 2008
Statut
Membre
Dernière intervention
9 mars 2011
1
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 :

-----------
DimdbConn As New Connection

dbConn.ConnectionString = "Provider=SQLNCLI;Server=" & Srv.Text & ";Database=" & DB.Text & ";Uid=" & User.Text & "; Pwd=" & Pass.Text & ";"
dbConn.Open
-----------
Messages postés
100
Date d'inscription
samedi 3 mai 2008
Statut
Membre
Dernière intervention
9 mars 2011
1
**********
Confirmation :
Pour l'execution de query tout marche parfaitement

**********
Messages postés
100
Date d'inscription
samedi 3 mai 2008
Statut
Membre
Dernière intervention
9 mars 2011
1
Merci j'essaye sa