Grand besoin d'une petite explication !

Signaler
Messages postés
20
Date d'inscription
jeudi 6 janvier 2005
Statut
Membre
Dernière intervention
8 mars 2006
-
Messages postés
20
Date d'inscription
jeudi 6 janvier 2005
Statut
Membre
Dernière intervention
8 mars 2006
-
Bonjour à tous !

Je me met tout juste à utiliser une base de données à travers Visual Basic et j'ai beaucoup de mal à comprendre comment faire.

Voilà la situation : j'ai créé une base de données très simple de 4 tables, contenant des citations, leurs auteurs et leur thème, sous easyphp que je lie en odbc.
J'ai lu toute la rubrique d'aide sur ODBCdirect mais j'ai un mal fou à utiliser la base de données.

Bon si j'ai bien compris, pour me connecter à la base je fais ceci :

Dim wks As Workspace
Dim cnn As Connection


Set wks = DBEngine.CreateWorkspace("ODBCWorkspace", "root", "", dbUseODBC)
Set cnn = wks.OpenConnection("DBcitations", dbDriverNoPrompt, False, "ODBC;dsn=DBcitations;uid=root;pwd=")

Ensuite je cherche par exemple le plus grand identifiant de la table Personne. Je crois qu'il faut ajouter ceci :

Dim sqlrec As Recordset
Set sqlrec = cnn.OpenRecordset("select max(idpersonne) from Personne")

Ca s'arrête là... Je n'arrive pas à comprendre comment récupérer le résultat de la requête. Dans l'aide j'ai vu un objet Field, mais je ne sais pas comment l'utiliser.
Est-ce que vous pourriez me faire un topo sur les méthodes à utiliser pour exécuter des requêtes et récupérer les résultats s'il vous plait ?

Merci infiniment ! :)

Titou

8 réponses

Messages postés
1788
Date d'inscription
mardi 7 novembre 2000
Statut
Membre
Dernière intervention
11 mars 2006
26
Bonjour,

Si celà peut t'aider, voici un code qui rempli un combobox avec les nom
contenus dans la table Publishers de la BD Biblio.mdb.

Cocher la référence à Microsoft DAO 3.51 Object Library.



Private Sub Command1_Click()

Dim Db As Database

Dim Req As Recordset

Set Db = OpenDatabase(App.Path & "\Biblio.mdb")

Set Req = Db.OpenRecordset("SELECT * FROM Publishers")

Do Until Req.EOF

Combo1.AddItem Req("Name")

Req.MoveNext

Loop

Combo1.Refresh

Set Req = Nothing

Set Db = Nothing

End Sub



jpleroisse



Si une réponse vous convient, cliquez Réponse Acceptée.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
80
Salut
La syntaxe a utiliser est la suivante :
sqlrec.Open "select max(idpersonne) from Personne", cnn, adOpenStatic, adLockReadOnly

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
Messages postés
20
Date d'inscription
jeudi 6 janvier 2005
Statut
Membre
Dernière intervention
8 mars 2006

Ah d'accord c'est pas la méthode OpenRecordset. Mais comment je récupère le résultat de la requête ensuite ?
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
80
Salut
Bah comme d'habitude ! (comme le font toutes les sources qui parlent de DB donc de RecordSet)
Pour lister toutes les données de ton RecordSet :
With sqlrec
.MoveFirst
Do While Not .Eof
For r = 1 To .Fields.Count
Debug.Print .Fields(r).Value
Next r
Loop
.MoveNext
End With
ou quelquechose comme ça

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

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
++
Un champ du RecordSet peut être lu de deux façons :
- Par son n° de colonne : sqlrec.Fields(r)
- Par son nom : sqlrec![le nom du champ]
Messages postés
20
Date d'inscription
jeudi 6 janvier 2005
Statut
Membre
Dernière intervention
8 mars 2006

Bonjour à tous et encore merci pour ces réponses, j'arrive à récupérer une requête maintenant ! :)

En revanche j'ai un autre petit soucis sur une requête d'insertion. J'ai deux TextBox qui contiennent un nom et un prénom.
Ma requête précédente m'a permis de récupérer le plus grand identifiant de la table personne.

Maintenant je souhaiterais faire ceci :
insert into Personne values(identifiant + 1, TextBoxNom.text, TextBoxPrenom.text);

Pour ça je fais sqlrec.close puis à nouveau un set sqlRec de ma requête.

Mais mon problème est que en marquand :
cnn.OpenRecordset("insert into Personne values(identifiant + 1, TextBoxNom.Text, TextBoxPrenom.Text)") il ne semble pas trouver les références aux variables.

Comment dois-je faire pour passer des variables dans une requête comme celle-ci ?

Très bonne journée à tous !
Messages postés
20
Date d'inscription
jeudi 6 janvier 2005
Statut
Membre
Dernière intervention
8 mars 2006

Heu... ne faîtes pas attention à ce que j'ai dit, c'est une énorme bêtise.... Faut vraiment que je dorme plus longtemps moi... ^^
Messages postés
20
Date d'inscription
jeudi 6 janvier 2005
Statut
Membre
Dernière intervention
8 mars 2006

En fait si j'ai un problème. Décidément je m'en sors pas...

Je disais donc que je faisais un nouveau recordset pour l'insert. Je fais la syntaxe suivante :

sqlinsert = "insert into personne values(" _
& ident + 1 & "," _
& TextBoxNom.Text & "," _
& TextBoxPrenom.Text & ")"
Set sqlRec = cnn.OpenRecordset(sqlinsert)

La compilation passe mais quand je lance le programme il me dit "ODBC -- l'appel a échoué".

J'ai testé en faisant simplement :
Set sqlRec = cnn.OpenRecordset("insert into personne values(3,'Allen','Woody')")
Là ça marche. Le problème doit venir de sqlinsert, seulement je ne comprend vraiment pas ce qui cloche...

Auriez-vous une idée ? Il faut vraiment que j'avance dans ce programme.

A bientôt!