RecordSet de VB6 à VB2010...Grrrrrrrr

Résolu
jimy neutron Messages postés 491 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 18 novembre 2016 - 10 févr. 2012 à 14:30
jimy neutron Messages postés 491 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 18 novembre 2016 - 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
'**********************************************

15 réponses

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
13 févr. 2012 à 10:02
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"))
3
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
15 févr. 2012 à 18:48
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
3
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
10 févr. 2012 à 15:38
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 
1
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
10 févr. 2012 à 14:46
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
0

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

Posez votre question
jimy neutron Messages postés 491 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 18 novembre 2016 1
12 févr. 2012 à 22:31
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
'**********************************************
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
12 févr. 2012 à 23:37
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 ?
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
13 févr. 2012 à 04:30
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
13 févr. 2012 à 04:32
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
0
jimy neutron Messages postés 491 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 18 novembre 2016 1
13 févr. 2012 à 10:17
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
'**********************************************
0
jimy neutron Messages postés 491 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 18 novembre 2016 1
13 févr. 2012 à 10:31
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
'**********************************************
0
jimy neutron Messages postés 491 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 18 novembre 2016 1
13 févr. 2012 à 10:33
Ces références sont dans "Recents"


Jimy

Pensez: Réponse acceptée
'**********************************************
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
13 févr. 2012 à 11:08
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
0
jimy neutron Messages postés 491 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 18 novembre 2016 1
15 févr. 2012 à 16:34
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
'**********************************************
0
jimy neutron Messages postés 491 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 18 novembre 2016 1
17 févr. 2012 à 18:09
Une dernière question, saurais-tu comment extraire le nom d'un champ de la base?



Jimy

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

Encore merci pour tout


Jimy

Pensez: Réponse acceptée
'**********************************************
0
Rejoignez-nous