Bonjour à tous,
J'ai besoin de conseil de gens qui utilisent ADO 2.5 et plus dans VB 6 de façon professionel. Je m'explique: Je suis analyste programmeur depuis plus de 8 ans et j'ai toujours travaillé avec des languages tel que PowerHouse, Progress. En gros ce sont des languages 4GL. Mais je n'ai jamais travaillé de façon professionel avec VB.
A l'occasion je fait de petits contrats de programmation à la pige pour de petites boites et j'utilise VB 6 avec ADO 2.5 comme méthode d'accès aux données. Toutefois, je ne suis pas convaincus que j'utilise ADO de la meilleur façon qui soit. J'ai beau faire des recherches et lire dans mes livres de reférences, je voit des exemples qui illustre comment utiliser les objets RecordSet, Connection, Command et toutes les autres mais jamais en profondeur.
Exemple: Je fait les déclations suivantes dans la section de déclaration:
Dim Cn As New ADODB.Connection
Dim RsGame As New ADODB.Recordset
Dim RsResultatMstr As New ADODB.Recordset
Est-ce qu'il serait préférable de faire les déclarations dans des procédure internes du programme, dans les procédure d'événement, _Click ou _DblClick. Est-ce qu'il est préférable de ne pas déclarer d'objet Connection et d'en fabriquer une en même temps que le RecordSet. Entre chaque événement, est-il préférable de fermer le RecordSet a chaque fois ou de le garder ouvert.
1) Merci d'avoir pris le temps de me lire, c'est un peut long
2) Merci de vos réponse
Je joint le code d'un de mes programme pour vous donner un exemple.
Serge
Dim Cn As New ADODB.Connection
Dim RsGame As New ADODB.Recordset
Dim RsResultatMstr As New ADODB.Recordset
Private Sub CmdCancel_Click()
Unload Resultat
End Sub
Private Sub CmdSave_Click()
If RsResultatMstr.State = adStateOpen Then
RsResultatMstr.Close
End If
RsResultatMstr.Open "Select * " & _
"From ResultatMstr " & _
"Where ResultatMstr.NoJoute = " & RsGame!nojoute & " and " & _
" ResultatMstr.Annee = " & Year(RsGame!Date), Cn, adOpenDynamic, adLockOptimistic
If RsResultatMstr.EOF And RsResultatMstr.BOF Then
RsResultatMstr.AddNew
End If
RsResultatMstr!annee = Year(RsGame!Date)
RsResultatMstr!nojoute = RsGame!nojoute
RsResultatMstr!ScoreLoc = ScoreLoc.Text
RsResultatMstr!ScoreVis = ScoreVis.Text
RsResultatMstr.Update
RsResultatMstr.Close
End Sub
Private Sub Form_Load()
Call SetGameScore("Init" )
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set Cn = Nothing
Set RsGame = Nothing
End Sub
Private Sub ListGames_Click()
Call GetGame
Call ShowData(RsGame)
End Sub
Private Sub ListGames_DblClick()
Call GetGame
Call ShowData(RsGame)
End Sub
Private Sub SetGameScore(ByVal pType As String)
Cn.ConnectionString = "driver=SQL server;" & _
"server=sergeserver;" & _
"uid=BASMMaster;pwd=BASMMaster;database=BasmTEST"
Cn.Open
RsGame.Open ("Select cal.noJoute, " & _
" cal.date, " & _
" cal.heure, " & _
" cal.statut, " & _
" EmL.shortname, " & _
" EmV.shortname " & _
"from calendrier as cal, " & _
" EquipeMstr as EmL, " & _
" EquipeMStr as EmV " & _
"Where Cal.EquipeLoc = EmL.NoEquipe and " & _
" Cal.EquipeVis = EmV.NoEquipe " ) _
, Cn, adOpenForwardOnly
Do While Not RsGame.EOF
ListGames.AddItem (Format(RsGame("NoJOute" ), "#00" ) & " - " & RsGame!statut & " - " & RsGame("date" ) & " " & RsGame(5) & " Vs " & _
RsGame(4) & " à " & RsGame("heure" ))
ListGames.ItemData(ListGames.NewIndex) = RsGame("NoJoute" )
RsGame.MoveNext
Loop
If pType = "Init" Then
ListGames.ListIndex = 0
RsGame.MoveFirst
Call ShowData(RsGame)
End If
RsGame.Close
Call GetGame
End Sub
Private Sub ShowData(ByRef pRsGame As ADODB.Recordset)
TextNoJoute.Text = pRsGame!nojoute
TextDate.Text = pRsGame!Date
TextHeure.Text = pRsGame!heure
TextEquipeVis.Text = pRsGame(5)
TextEquipeLoc.Text = pRsGame(4)
End Sub
Private Sub ResetScore()
ScoreLoc.Text = ""
ScoreVis.Text = ""
End Sub
Private Sub ScoreLoc_GotFocus()
ScoreLoc.Text = ""
End Sub
Private Sub ScoreVis_GotFocus()
ScoreVis.Text = ""
End Sub
Private Sub SetScore(ByRef pRsResultatMstr As ADODB.Recordset)
ScoreLoc.Text = pRsResultatMstr!ScoreLoc
ScoreVis.Text = pRsResultatMstr!ScoreVis
End Sub
Private Sub GetGame()
Call ResetScore
If RsGame.State = adStateOpen Then
RsGame.Close
End If
RsGame.Open "select cal.NoJoute, " & _
" cal.date, " & _
" cal.heure, " & _
" cal.statut, " & _
" EmL.NomEquipe, " & _
" EmV.NomEquipe " & _
"from calendrier as cal, " & _
" EquipeMstr as EmL, " & _
" EquipeMStr as EmV " & _
"Where cal.NoJOute = " & ListGames.ItemData(ListGames.ListIndex) & " and " & _
" Cal.EquipeLoc = EmL.NoEquipe and " & _
" Cal.EquipeVis = EmV.NoEquipe ", _
Cn, adOpenDynamic
If RsGame.State = adStateOpen Then
If RsResultatMstr.State = adStateOpen Then
RsResultatMstr.Close
End If
RsResultatMstr.Open "Select * " & _
"From ResultatMstr " & _
"Where ResultatMstr.NoJoute = " & RsGame!nojoute & " and " & _
" ResultatMstr.Annee = " & Year(RsGame!Date), Cn, adOpenForwardOnly
If Not RsResultatMstr.EOF And Not RsResultatMstr.BOF Then
Call SetScore(RsResultatMstr)
End If
End If
End Sub