Problème d'affichage de données SQL server

lolorenzeb Messages postés 71 Date d'inscription lundi 24 mai 2004 Statut Membre Dernière intervention 13 septembre 2006 - 29 juin 2006 à 12:29
screquer Messages postés 9 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 30 juin 2006 - 30 juin 2006 à 21:11
Bonjour à tous,

Voila j'ai un petit problème avec le code ci-dessous. J'ai créer un bouton qui se connecte a une base de données géré par sql server et qui affiche une données. La connexion fonctionne correctement mais il y a un problème lors de l'affichage (en rouge).

Voici mon code :

Les varaiables NomUtilisateur et  MotDePasse sont saisies a partir de l'interface.

   'bouton de connexion
    Private Sub BtnConnexion_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnConnexion.Click

        'Déclaration de la variable
        Dim cnx As ADODB.Connection
        Dim rst As ADODB.Recordset

        Dim NomServeur = "CCOMMEC"
        Dim NomBaseDeDonnées = "arlette"

        'Instanciation des variables
        cnx = New ADODB.Connection
        rst = New ADODB.Recordset

        'Définition de la chaîne de connexion
        cnx.ConnectionString = "UID=" & NomUtilisateur.Text & ";PWD=" & MotDePasse.Text & ";" & "DRIVER={SQL Server};Server=" & NomServeur & ";Database=" & NomBaseDeDonnées & ";"
        'Ouverture de la base de données
        cnx.Open()

        'affichage d'un enregistrement
        'Exécution de la requête
        rst.Open("SELECT * FROM Arl_Utilisateurs", cnx)
        MsgBox(rst.Fields(0))
        'fermeture du recordset
        rst.Close()

        'fermeture de la base de données
        cnx.Close()

    End Sub

Voila le message d'erreur :

Quelqu'un aurait-il une petite idée du problème ? Merki d'avance.

13 réponses

screquer Messages postés 9 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 30 juin 2006
29 juin 2006 à 12:50
Bonjour lolorenzeb,

Ton Msgbox(rst.fields(0)) fonctionne correctement dans mon test ...
C'est équivalent à Msgbox(rst(0))

Et si ton rst ne renvoie aucune information ?
Si aucun, quelle donnée est transmise ?

>   rst.Open("SELECT * FROM Arl_Utilisateurs", cnx)
>   Msgbox rst.recordcount ' Pour tester ton Nb d'enregistrements transmis ?
>   MsgBox(rst.Fields(0))

Stéph
0
screquer Messages postés 9 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 30 juin 2006
29 juin 2006 à 12:57
lolorenzeb,

Pour info...
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
   Dim cnx As New ADODB.Connection
   Dim rst As New ADODB.Recordset

   cnx.ConnectionString  = ...
   rst.Open(...
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
est équivalent à
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
   Dim cnx As ADODB.Connection
   Dim rst As ADODB.Recordset

   cnx = New ADODB.Connection
   rst = New ADODB.Recordset

   cnx.ConnectionString  = ...
   rst.Open(...
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Stéph
0
lolorenzeb Messages postés 71 Date d'inscription lundi 24 mai 2004 Statut Membre Dernière intervention 13 septembre 2006 2
29 juin 2006 à 14:08
Ok screquer le msgbox me revoie -1 donc j'imagine que cela signifie que la requete ne me renvoie rien. Pourtant ma requete est correct. Il n'y a rien de spécial du coté de sql server ? ma base et ma table est bien crée et la table contient deux enregistrements..
0
adil_ista Messages postés 30 Date d'inscription mardi 7 mars 2006 Statut Membre Dernière intervention 25 octobre 2006
29 juin 2006 à 14:26
est ce que la  table contient un clé primaire?
vérifie la ,et essayé d'afficher les rst(1),et rst(2) pour tester
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lolorenzeb Messages postés 71 Date d'inscription lundi 24 mai 2004 Statut Membre Dernière intervention 13 septembre 2006 2
29 juin 2006 à 14:30
oui elle contient bien une clé primaire. mais  rst.recordcount me  renvoi -1 donc pas d'enregistrement

meme erreur avec rst(1) et aussi avec rst(2) normal
0
adil_ista Messages postés 30 Date d'inscription mardi 7 mars 2006 Statut Membre Dernière intervention 25 octobre 2006
29 juin 2006 à 14:34
si rst.recordcount = -1 ca veux dire pas d'eb registrement, c'est vari!
alors vérifie que toutes les colonnes sont remplies ,et aussi de femer la table au moment de l'éxecution !
0
lolorenzeb Messages postés 71 Date d'inscription lundi 24 mai 2004 Statut Membre Dernière intervention 13 septembre 2006 2
29 juin 2006 à 14:37
j'ai déja fait tous ses tests. merci quand meme
0
screquer Messages postés 9 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 30 juin 2006
29 juin 2006 à 16:21
Rebonjour lolorenzeb,

Ta variable cnx comporte la propriété state...
State=0 => connexion refusée
State=1 => connexion effective

Essaie le test pour vérifier...
Msgbox cnx.state

Sinon, dans le libellé de ta chaîne de connexion cnx.ConnectionString, remplace temporairement les variables NomUtilisateur.Text, MotDePasse.Text, NomServeur et NomBaseDeDonnées par les valeurs réelles (case y compris) pour vérifier tes données ...

Autre point, dans Access, les anciennes versions demandaient le déplacement à la fin du recordset (rst.movelast) pour obtenir le Nb réel d'enregistrements ? avant de revenir au début (rst.movefirst)...
Je ne pense pas que ce soit cela... Mais...

Autre point, rst comporte aussi la propriété state ???
Teste-le si oui...

Steph
0
screquer Messages postés 9 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 30 juin 2006
29 juin 2006 à 16:48
lolorenzeb

Pour info, voilà mon Open sur le recordset de ma base Access 2003... en VB6...

sSQL = "SELECT * FROM films"

rst.Open sSQL, Cnx, adOpenStatic, adLockReadOnly, adCmdTableDirect
Msgbox rst.state
iNb = rst.RecordCount

l'Open ne comporte pas de parenthèses, mais comporte des infos supplèmentaires sur la façon de lire les données de la base ...

Si ça peut t'aider...

Stéph
0
lolorenzeb Messages postés 71 Date d'inscription lundi 24 mai 2004 Statut Membre Dernière intervention 13 septembre 2006 2
29 juin 2006 à 17:45
Screquer,

Tout d'abord pour toute ces informations c'est super sympa de ta part.

J'ai donc tester les valeurs de cnx.state et rst.state et toutes les deux sont à 1 donc effectives si j'ai bien compris. Par contre dès que j'essai de faire un rst.movelast j'ai la meme erreur qui revient. Je voulais te dire également que je travaille avec une base sql server et  non access. Sinon j'ai essayé d'utiliser ton open mais ca ne passe pas sous VB.NET. Donc la pour le moment je suis un peu dans l'impasse.
0
screquer Messages postés 9 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 30 juin 2006
29 juin 2006 à 18:35
lolorenzeb

Tiens, j'ai trouvé ceci, essaie de l'adapter à ton projet !!!

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Voici un exemple de code qui permet de se connecter à n'importe qu'elle type
de base de données ( ce code fonctionne sous XP avec VB 5.0 ) :

S'assurer au préalable que vous utiliser la référence suivante ( Menu Projet/ Référence ) :
Microsoft ActiveX Data Objet 2.7 Libray
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

 Source

<ol class="csCode"><li>
Public
sub
Connection()
</li><li></li><li>
Dim
CoLilas As New ADODB.Connection
</li><li>
Dim
Rec_Mod As New ADODB.Recordset
</li><li>
Dim
Rec_Estamp As New ADODB.Recordset
</li><li></li><li>
Dim
Ident as
string
</li><li>
Dim
Provider as
string
</li><li>
Dim
Connexion as
string
</li><li>
Dim
Connectdb as Boolean
</li><li></li><li></li><li><samp>'**** C'est à vous de choisir le type de base auquel vous voulez accèder.</samp></li><li></li><li><samp>'*** Connexion Sql Serveur.</samp></li><li>Provider <var>"SQLOLEDB.1"</var></li><li>Connexion <var>"Persist Security Info=False;"</var> & _
</li><li>            <var>"User ID=admin; Password=admin;Initial Catalog=BASE-TEST;"</var> & _
</li><li>            <var>"Data Source=SERVEURSQL"</var></li><li>    
</li><li><samp>'*** connexion Fichier Base Access 95,97</samp></li><li><samp>'Provider "Microsoft.JET.OLEDB.3.51" </samp></li><li><samp>'Connexion "C:\Base\ma_db.mdb"</samp></li><li></li><li><samp>'*** connexion Fichier Base Access 2000,XP</samp></li><li><samp>'Provider = "Microsoft.JET.OLEDB.4.0" </samp></li><li><samp>'Connexion = "C:\Base\ma_db.mdb"</samp></li><li></li><li><samp>'*** connexion via un base déclaré dans ODBC</samp></li><li><samp>'Provider = "MSDASQL.1" </samp></li><li><samp>'Connexion = "Data Source=BASE-TEST"</samp></li><li></li><li><samp>'*** connexion à une base Oracle</samp></li><li><samp>'Provider = "MSDAORA" </samp></li><li><samp>'Connexion = "Data Source=BASE-TEST;User ID=admin;" & _</samp></li><li><samp>' "Password=admin"</samp></li><li></li><li>         
</li><li><samp>'**** Connexion à la Base de données</samp></li><li>ConnectBd = True
</li><li>
With
CoLilas
</li><li>  .Provider = Provider
</li><li>  .ConnectionString = Connexion
</li><li>  .ConnectionTimeout = 6
</li><li>  .CommandTimeout = 60
</li><li>  .
Open
</li><li>
End
With
</li><li>ConnectBd = False
</li><li></li><li></li><li><samp>'**** Lecture d'un enregistrement</samp></li><li>ident <var>"123"</var></li><li>Rec_Estamp.
Open
<var>"select DADMAJ, HEUMAJ from TAB1 where CDVERS
'1'"</var> & _
</li><li>                <var>" and CDPRG = '"</var> & Ident & <var>"';"</var>, CoLilas, adOpenForwardOnly, adLockReadOnly
</li><li>                
</li><li>
If
Rec_Estamp.
EOF
Then
</li><li>   ok =
MsgBox
(<var>"Erreur lors de la lecture de la date de mise à jour !"</var>, vbExclamation + vbSystemModal, <var>"LilasExplor"</var>)
</li><li>
Else
</li><li>   
msgbox
Rec_Estamp!DADMAJ & Rec_Estamp!HEUMAJ
</li><li>
End
If
</li><li>Rec_Estamp.
Close
</li><li></li><li></li><li></li><li><samp>'**** Mise à jour</samp></li><li>Ident <var>"153243"</var></li><li>Rec_Mod.
Open
<var>"select DADMAJ, HEUMAJ from TAB2 where CDVERS
'1'"</var> & _
</li><li>             <var>" and CDFOAP = '"</var> &
Mid
(Ident, 1, 2) & _
</li><li>             <var>"' and CDARL = '"</var> &
Mid
(Ident, 3) & <var>"';"</var>, CoLilas, adOpenDynamic, adLockPessimistic
</li><li>                  
</li><li>
If
Rec_Mod.
EOF
Then
</li><li>   ok =
MsgBox
(<var>"Erreur lors de la mise à jour !"</var> & vbCrLf & <var>"Enregistrement non trouvé !"</var>, vbExclamation + vbSystemModal, <var>"LilasExplor"</var>)
</li><li>
Else
</li><li>   Rec_Mod!DADMAJ =
Format
(
Date
, <var>"YYYYMMDD"</var>)
</li><li>   Rec_Mod!HEUMAJ =
Format
(
Time
, <var>"HHMMSS"</var>)
</li><li>   Rec_Mod.
Update
</li><li>
End
If
</li><li>Rec_Mod.
Close
</li><li></li><li></li><li></li><li>
Exit
Sub
</li><li>gestion_erreur:
</li><li>   
If
ConnectBd True
Then
</li><li></li><li>       <samp>'**** Gestion des erreurs de connexion à la base de données.</samp></li><li>       Err_debut
True
</li><li>       ok =
MsgBox
(<var>"Erreur de connexion à la base de données."</var>, vbExclamation + vbSystemModal, <var>"LilasExplor"</var>)
</li><li>   
</li><li>       <samp>'Call Info_Err("Module1", "Sub_Connection")</samp></li><li>   
Else
</li><li>     <samp>'Call Info_Err("Module1", "Sub_Connection")</samp></li><li>   
End
If
</li><li>
End
Sub
</li></ol>
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Steph
0
lolorenzeb Messages postés 71 Date d'inscription lundi 24 mai 2004 Statut Membre Dernière intervention 13 septembre 2006 2
30 juin 2006 à 11:14
C'est bon je viens de trouver d'ou vient mon problème.

Il fallait ajouter cette ligne avant l'ouverture de mon recordset :

rst.CursorLocation = ADODB.CursorLocationEnum.adUseClient

Cela annonce au serveur que le curseur est exécuté côté client et non coté serveur si j'ai bien compris. Du coup rst.recordcount me renvoi bien le bon nombre d'enregistrement mais je n'arrive pas a afficher mes données. Le msgbox me renvoi toujours une erreur.
0
screquer Messages postés 9 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 30 juin 2006
30 juin 2006 à 21:11
Si SqlServer est si susceptible, essaie d'indiquer le maximum d'informations pour le champ à afficher ...
Msgbox  rst.fields.item("Field_Name").value

Stéph
0
Rejoignez-nous