RecordSet de VB6 à VB2010...Grrrrrrrr [Résolu]

jimy neutron 491 Messages postés mercredi 1 février 2006Date d'inscription 18 novembre 2016 Dernière intervention - 10 févr. 2012 à 14:30 - Dernière réponse : jimy neutron 491 Messages postés mercredi 1 février 2006Date d'inscription 18 novembre 2016 Dernière intervention
- 17 févr. 2012 à 20:21
Bonjour à tous,

Il serait temps me direz vous, mais voila, je passe au .NET..Enfin j'espère!

Voila mon soucis:

Dans un module "Variables"
Public DtBase as ADODB.Connection
Public Rst as ADODB.Recordset


Ensuite:
Public Class P000

    Private Sub Cmd_Actu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cmd_Actu.Click

        Me.Cmb_WO_Inter.Items.Clear()
        Rst = New ADODB.Recordset
        Rst.Open(" select * from TabInter")

        While Not Rst.EOF
            Me.Cmb_WO_Inter.Items.Add(Rst.Fields("Interv").Value)
            Rst.MoveNext()
        End While
        Rst.Close()     'Fermeture

    End Sub

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        DtBase = New ADODB.Connection
        ErreurBDD = False
        Opened = False
        LienBase = "d:\profiles\Moi\My Documents\Visual Studio 2010\Projects\SQL Interv\BDD"
        Lien = LienBase & "\BDD03.mdb"
        Acces = Dir(Lien)

        chaine = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Lien & ";Persist Security Info=False"
        DtBase.Open(chaine)
        Me.Refresh()
        
    End Sub

End Class


Ca coince ici:
Rst.Open(" select * from TabInter")


Code erreur: "L'exeption COMException n'a pas été géré

J'ai essayé aussi:
Rst.Open(" select * from TabInter"), DtBase

Mais pas mieux

Pour tout dire je par de code VB6, mais je pense que je vais reprendre tout à 0. ;)

Si vous avez une idée?!

Merci

Jimy

Pensez: Réponse acceptée
'**********************************************
Afficher la suite 

Votre réponse

15 réponses

cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 13 févr. 2012 à 10:02
+3
Utile
Bonjour

je cherchais comment accéder par le nom du champ
je viens de trouver
Combo.Items.Add(myrecordset.Item("Intervenant"))
Combo.Items.Add(myrecordset.Item("ID"))
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_ShayW
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 15 févr. 2012 à 18:48
+3
Utile
Salut
ici

je suis aussi débutant en vb6 je me servais de
parametres pour les requetes je ferai pareil
en net

Player le nom du tableau
playercode primary key
Name champ
Surname champ


ex pour ajouter une ligne

Public Sub InsertPlayer(ByVal FamillyName As String, ByVal Surname As String)
        Dim strsql As String = String.Empty
   'je supose que la connection a été établie
        Dim command As New OleDbCommand(strsql, Connection)
        command.CommandText = "INSERT INTO Player (Name,Surname) VALUES ([name?],[surname?]);"
        command.Parameters.Add("name?", OleDbType.BSTR).Value = FamillyName
        command.Parameters.Add("surname?", OleDbType.BSTR).Value = Surname
        command.ExecuteNonQuery()

    End Sub


pour suprimer
Public Sub DeleteRecord(ByVal coderesult As Integer)
        Dim strsql As String = String.Empty

 'je supose que la connection a été établie
        Dim command As New OleDbCommand(strsql, Connection)
        command.CommandText "DELETE FROM Results WHERE coderesult [coderesult?];"
        command.Parameters.Add("coderesult?", OleDbType.Integer).Value = coderesult
        command.ExecuteNonQuery()
    End Sub


'update
Public Sub UPdatePlayer(ByVal FamillyName As String, ByVal Surname As String)
        Dim strsql As String = String.Empty

 'je supose que la connection a été établie
        Dim command As New OleDbCommand(strsql, Connection)
        Dim codeplayer As Integer
        codeplayer = GetCodePlayer(FamillyName, Surname)
        command.CommandText "UPDATE Player SET FamillyName ([name?],Surname =[surname?]) WHERE playercode = [playercode?];"
        command.Parameters.Add("name?", OleDbType.BSTR).Value = FamillyName
        command.Parameters.Add("surname?", OleDbType.BSTR).Value = Surname
        command.Parameters.Add("playercode?", OleDbType.Integer).Value = codeplayer
        command.ExecuteNonQuery()

    End Sub


Private Function GetCodePlayer(ByVal FamillyName As String, ByVal Surname As String) As Integer
        Dim sql As String = String.Empty

 'je supose que la connection a été établie
        Dim command As New OleDbCommand(sql, Connection)
        Dim recordset As OleDbDataReader
        recordset = Nothing
        command.CommandText "SELECT Playercode FROM Player WHERE Name [name?] AND Surname = [surname?];"
        command.Parameters.Add("name?", OleDbType.BSTR).Value = FamillyName
        command.Parameters.Add("surname?", OleDbType.BSTR).Value = Surname
        recordset = command.ExecuteReader()
        While recordset.Read
            Return Convert.ToInt32(recordset.GetValue(0))
        End While
    End Function
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_ShayW
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 10 févr. 2012 à 15:38
+1
Utile
Imports System.Data.OleDb
Private Connection As New OleDb.OleDbConnection
Public Sub Init()
'fait la connection
'à modifier selon le chemin  BDD
        Dim base As String = "provider=microsoft.jet.oledb.4.0;data source=" & Application.StartupPath & "\DBSYNATEST.mdb"
        Connection.ConnectionString = base
        Try
            Connection.Open()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub


Public Function GetList() As OleDbDataReader
   Dim sql As String
   Dim recordset As OleDbDataReader
   recordset = Nothing
   sql = "select * from TabInter"
   Dim myquery As New OleDbCommand(sql, Connection)
   Try
      recordset = myquery.ExecuteReader
      Catch ex As Exception
       MessageBox.Show(ex.Message)
    End Try
        Return recordset
       Connection.Close()
    End Function


private sub Displaylist()
Dim myrecordset As OleDbDataReader
myrecordset = Getlist()
while myrecordset.read

 Me.Cmb_WO_Inter.Items.Add = myrecordset.GetString(0) ' pas forcément 0 mais l'index de Interv 
end while
end sub 
Commenter la réponse de cs_ShayW
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 10 févr. 2012 à 14:46
0
Utile
ADODB.Recordset

c'est pas très .Net, ca ...

ton recordset doit il deviner quelle base attaquer ?

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Commenter la réponse de Renfield
jimy neutron 491 Messages postés mercredi 1 février 2006Date d'inscription 18 novembre 2016 Dernière intervention - 12 févr. 2012 à 22:31
0
Utile
Désolé pour le retard, je n'était pas chez moi ce WE.

Merci Renfield de me rappeler que je suis un amateur débutant en NET.
Mais je l'assume très bien!

Merci ShayW, ton code fonctionne à merveille à ce petit détail prés, si je peux me permettre:
Combo.Items.Add(myrecordset.GetString(0))


Sinon super merci!

Ma table est (juste pour essayer) constituée d'une colonne "ID" (Clé primaire) et d'une colonne "Intervenant" et contrairement à ADODB.Recordset, je n'arrive pas à lire la colonne ID.

Combo.Items.Add(myrecordset.GetString(1))


me lit bien les intervenants,

Combo.Items.Add(myrecordset.GetString(0))


me renvoie une erreur "Le cast spécifié n'est pas valide."
Pourtant j'ai bien les ID en 0, non?
Jimy

Pensez: Réponse acceptée
'**********************************************
Commenter la réponse de jimy neutron
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 12 févr. 2012 à 23:37
0
Utile
Salut
essaie
Combo.Items.Add(myrecordset.GetString(0).tostring)

ou
Combo.Items.Add(Convert.ToString(Convert.ToInt32(myrecordset.GetString(0))))


aussi quelle réference as tu coché pour
déclarer ADODB.Connection ?
dans les COM réferences ?
Commenter la réponse de cs_ShayW
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 13 févr. 2012 à 04:30
0
Utile
ne pas te baser sur un Index numérique pour acceder aux champs...

en SQL, c'est a ne jamais faire sauf:
si tu parcoures tous les champs, par exemple
si tu ne ramène qu'un champ via ta query

en fait, dans les specs SQL, RIEN n'oblige le SGBD a renvoyer les champs dans l'ordre déclaré dans la base, ni dans la query.
rien n'oblige de plus a etre constant.

Imagine ce qu'il se passerai si tu ajoutais un champ ?

un renommage serai, il est vrai tout aussi préjudiciable, mais c'est relativement rare, tout de même.

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Commenter la réponse de Renfield
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 13 févr. 2012 à 04:32
0
Utile
Mais je l'assume très bien!


Ma remarque se voulait constructive.

je ne code pas trop avec des BDD, mais je sais que ce n'est plus au travers d'ADODB
quand bien même, cela fonctionne tout de même... Mais a l'ouverture de ton Recordset, il faut bien spécifier la connection a utiliser.

tu es membre depuis suffisamment longtemps je pense pour savoir que je ne me contente rarement d'un "noob !" ou d'un "c'est nul..."

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Commenter la réponse de Renfield
jimy neutron 491 Messages postés mercredi 1 février 2006Date d'inscription 18 novembre 2016 Dernière intervention - 13 févr. 2012 à 10:17
0
Utile
Je l'avais bien compris comme cela Renfield , et c'est justement parce que cela fait un moment que je suis membre, que je me suis permis cette petite "taquinerie"

Merci ShayW, je regarde ça.

Jimy

Pensez: Réponse acceptée
'**********************************************
Commenter la réponse de jimy neutron
jimy neutron 491 Messages postés mercredi 1 février 2006Date d'inscription 18 novembre 2016 Dernière intervention - 13 févr. 2012 à 10:31
0
Utile
aussi quelle réference as tu coché pour
déclarer ADODB.Connection ?
dans les COM réferences ?


Je decouvre la plateforme VB2010, aussi dans les références, je n'ai rien dans "Projets", mais j'ai:

MicroSoft ADO Data control 6.0 (OLEDB)
MicroSoft DAO 3.6 Objet Library
OLE Automation
....


Jimy

Pensez: Réponse acceptée
'**********************************************
Commenter la réponse de jimy neutron
jimy neutron 491 Messages postés mercredi 1 février 2006Date d'inscription 18 novembre 2016 Dernière intervention - 13 févr. 2012 à 10:33
0
Utile
Ces références sont dans "Recents"


Jimy

Pensez: Réponse acceptée
'**********************************************
Commenter la réponse de jimy neutron
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 13 févr. 2012 à 11:08
0
Utile
MicroSoft ADO Data control 6.0 (OLEDB)
MicroSoft DAO 3.6 Objet Library
OLE Automation


je n'ai rien dans "Projets", mais j'ai:

ou
dans le tableau des réferences que ton projet
utilise
tu peux les retirer
Commenter la réponse de cs_ShayW
jimy neutron 491 Messages postés mercredi 1 février 2006Date d'inscription 18 novembre 2016 Dernière intervention - 15 févr. 2012 à 16:34
0
Utile
Salut ShayW

Donc si j'ai bien compris, avec "Imports System.Data.OleDb " le OleRcordSetReader est destiné à lire une base, mais pour ajouter ou modifier une ligne, que deviennent?

Imports System.Data.OleDb
Code Visual Basic :

Private Connection As New OleDb.OleDbConnection
Public Sub Init()
'fait la connection
'à modifier selon le chemin  BDD
        Dim base As String = "provider=microsoft.jet.oledb.4.0;data source=" & Application.StartupPath & "\DBSYNATEST.mdb"
        Connection.ConnectionString = base
        Try
            Connection.Open()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub



Code Visual Basic :

Public Function GetList() As OleDbDataReader
   Dim sql As String
   Dim recordset As OleDbDataReader
   recordset = Nothing
   sql = "select * from TabInter"
   Dim myquery As New OleDbCommand(sql, Connection)
   Try
      recordset = myquery.ExecuteReader
      Catch ex As Exception
       MessageBox.Show(ex.Message)
    End Try
        Return recordset
       Connection.Close()
    End Function



Code Visual Basic :

private sub Displaylist()
Dim myrecordset As OleDbDataReader
myrecordset = Getlist()
while myrecordset.read

 Me.Cmb_WO_Inter.Items.Add = myrecordset.GetString(0) ' pas forcément 0 mais l'index de Interv 
end while
end sub 


Jimy

Pensez: Réponse acceptée
'**********************************************
Commenter la réponse de jimy neutron
jimy neutron 491 Messages postés mercredi 1 février 2006Date d'inscription 18 novembre 2016 Dernière intervention - 17 févr. 2012 à 18:09
0
Utile
Une dernière question, saurais-tu comment extraire le nom d'un champ de la base?



Jimy

Pensez: Réponse acceptée
'**********************************************
Commenter la réponse de jimy neutron
jimy neutron 491 Messages postés mercredi 1 février 2006Date d'inscription 18 novembre 2016 Dernière intervention - 17 févr. 2012 à 20:21
0
Utile
Agr, j'ai trouvé, myrecordset.GetName(I)

Encore merci pour tout


Jimy

Pensez: Réponse acceptée
'**********************************************
Commenter la réponse de jimy neutron

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.