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

Signaler
Messages postés
491
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
18 novembre 2016
-
Messages postés
491
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
18 novembre 2016
-
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
'**********************************************

15 réponses

Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
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"))
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
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
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
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 
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
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
Messages postés
491
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
18 novembre 2016
1
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
'**********************************************
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
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 ?
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
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
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
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
Messages postés
491
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
18 novembre 2016
1
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
'**********************************************
Messages postés
491
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
18 novembre 2016
1
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
'**********************************************
Messages postés
491
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
18 novembre 2016
1
Ces références sont dans "Recents"


Jimy

Pensez: Réponse acceptée
'**********************************************
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
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
Messages postés
491
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
18 novembre 2016
1
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
'**********************************************
Messages postés
491
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
18 novembre 2016
1
Une dernière question, saurais-tu comment extraire le nom d'un champ de la base?



Jimy

Pensez: Réponse acceptée
'**********************************************
Messages postés
491
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
18 novembre 2016
1
Agr, j'ai trouvé, myrecordset.GetName(I)

Encore merci pour tout


Jimy

Pensez: Réponse acceptée
'**********************************************