OVH Cloud OVH Cloud

r.AbsolutePosition en ODBC ne fonctionne pas

5 réponses
Avatar
Yves
Bonjour à tous,

Voici mon problème

r.AbsolutePosition en ODBC ne fonctionne pas et je voudrais pouvoir afficher
un ProgressBar

Ma solution a été de:

If r.AbsolutePosition <> adPosUnknown Then
ProgressBar.Visible = True
ProgressBar.Max = r.RecordCount
End If

Mais il existe t-il une autre façon???

Merci de vos réponse

J'ouvre ma base en Access ou ODBC et plus tard en SQLServeur

If DB.State = adStateClosed Then

Select Case strBaseDeDonnéeType
Case "ACCESS"
'Access
DB.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " &
strCheminBase & strNomBase
Case "ODBC"
'ODBC
DB.Open "Provider=MSDASQL.1;Persist Security Info=False;Data
Source=surgest;Initial Catalog=" &
strCheminBase & strNomBase
Case "SQLServeur"
'DB.Open "Provider=SQLOLEDB;data Source=<name of your SQL
Server>;"
' DB.Open "Provider=SQLOLEDB;data Source=" & strCheminBase &
strNomBase
End Select

End If

5 réponses

Avatar
Quasimodo
Yves has brought this to us :
Bonjour à tous,

Voici mon problème

r.AbsolutePosition en ODBC ne fonctionne pas et je voudrais pouvoir afficher
un ProgressBar

Ma solution a été de:

If r.AbsolutePosition <> adPosUnknown Then
ProgressBar.Visible = True
ProgressBar.Max = r.RecordCount
End If

Mais il existe t-il une autre façon???

Merci de vos réponse

J'ouvre ma base en Access ou ODBC et plus tard en SQLServeur

If DB.State = adStateClosed Then

Select Case strBaseDeDonnéeType
Case "ACCESS"
'Access
DB.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " &
strCheminBase & strNomBase
Case "ODBC"
'ODBC
DB.Open "Provider=MSDASQL.1;Persist Security Infoúlse;Data
Source=surgest;Initial Catalog=" &
strCheminBase & strNomBase
Case "SQLServeur"
'DB.Open "Provider=SQLOLEDB;data Source=<name of your SQL
Server>;"
' DB.Open "Provider=SQLOLEDB;data Source=" & strCheminBase &
strNomBase
End Select

End If



Bonjour,
oui, fin peut être. Je pense par exemple à initialiser la propriété max
du controle avec le nombre d'enregistrement retourné par le recordset.
Ensuite, sur chaque mouvement du recordset, celui renvoie le type de
mouvement et d'autres info via un évent, il faut juste traper dans
cette évent le type (voir : RecordChangeComplete, MoveComplete, ...) de
déplacement et mettre à jour le controle.

@+ Quaz

--
This is an automatic signature of MesNews.
Site : http://mesnews.no-ip.com
Avatar
Yves
je suis en ODBC
DB.Open "Provider=MSDASQL.1;Persist Security Infoúlse;Data
Source=surgest;Initial Catalog=" & strCheminBase & strNomBase


Je n'ai pas ....

RecordChangeComplete, MoveComplete

r.Open Req, DB, adOpenStatic, adLockOptimistic
sbrAnalyse.PanelText(1) = "Nombre d'enregistrements trouvés :" +
str(Trim( _
r.RecordCount))

If r.RecordCount > 0 Then
If r.AbsolutePosition <> adPosUnknown Then
ProgressBar.Visible = True
ProgressBar.Max = r.RecordCount
End If



"Quasimodo" a écrit dans le message de
news:
Yves has brought this to us :
> Bonjour à tous,
>
> Voici mon problème
>
> r.AbsolutePosition en ODBC ne fonctionne pas et je voudrais pouvoir


afficher
> un ProgressBar
>
> Ma solution a été de:
>
> If r.AbsolutePosition <> adPosUnknown Then
> ProgressBar.Visible = True
> ProgressBar.Max = r.RecordCount
> End If
>
> Mais il existe t-il une autre façon???
>
> Merci de vos réponse
>
> J'ouvre ma base en Access ou ODBC et plus tard en SQLServeur
>
> If DB.State = adStateClosed Then
>
> Select Case strBaseDeDonnéeType
> Case "ACCESS"
> 'Access
> DB.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= "


&
> strCheminBase & strNomBase
> Case "ODBC"
> 'ODBC
> DB.Open "Provider=MSDASQL.1;Persist Security


Infoúlse;Data
> Source=surgest;Initial Catalog=" &
> strCheminBase & strNomBase
> Case "SQLServeur"
> 'DB.Open "Provider=SQLOLEDB;data Source=<name of your


SQL
> Server>;"
> ' DB.Open "Provider=SQLOLEDB;data Source=" &


strCheminBase &
> strNomBase
> End Select
>
> End If

Bonjour,
oui, fin peut être. Je pense par exemple à initialiser la propriété max
du controle avec le nombre d'enregistrement retourné par le recordset.
Ensuite, sur chaque mouvement du recordset, celui renvoie le type de
mouvement et d'autres info via un évent, il faut juste traper dans
cette évent le type (voir : RecordChangeComplete, MoveComplete, ...) de
déplacement et mettre à jour le controle.

@+ Quaz

--
This is an automatic signature of MesNews.
Site : http://mesnews.no-ip.com



Avatar
Quasimodo
Yves formulated on Wednesday :
je suis en ODBC
DB.Open "Provider=MSDASQL.1;Persist Security Infoúlse;Data
Source=surgest;Initial Catalog=" & strCheminBase & strNomBase


Je n'ai pas ....

RecordChangeComplete, MoveComplete

r.Open Req, DB, adOpenStatic, adLockOptimistic
sbrAnalyse.PanelText(1) = "Nombre d'enregistrements trouvés :" +
str(Trim( _
r.RecordCount))

If r.RecordCount > 0 Then
If r.AbsolutePosition <> adPosUnknown Then
ProgressBar.Visible = True
ProgressBar.Max = r.RecordCount
End If



"Quasimodo" a écrit dans le message de
news:
Yves has brought this to us :
Bonjour à tous,

Voici mon problème

r.AbsolutePosition en ODBC ne fonctionne pas et je voudrais pouvoir
afficher un ProgressBar

Ma solution a été de:

If r.AbsolutePosition <> adPosUnknown Then
ProgressBar.Visible = True
ProgressBar.Max = r.RecordCount
End If

Mais il existe t-il une autre façon???

Merci de vos réponse

J'ouvre ma base en Access ou ODBC et plus tard en SQLServeur

If DB.State = adStateClosed Then

Select Case strBaseDeDonnéeType
Case "ACCESS"
'Access
DB.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " &
strCheminBase & strNomBase
Case "ODBC"
'ODBC
DB.Open "Provider=MSDASQL.1;Persist Security
Infoúlse;Data Source=surgest;Initial Catalog=" &
strCheminBase & strNomBase
Case "SQLServeur"
'DB.Open "Provider=SQLOLEDB;data Source=<name of your SQL
Server>;"
' DB.Open "Provider=SQLOLEDB;data Source=" & strCheminBase
& strNomBase
End Select

End If



Bonjour,
oui, fin peut être. Je pense par exemple à initialiser la propriété max
du controle avec le nombre d'enregistrement retourné par le recordset.
Ensuite, sur chaque mouvement du recordset, celui renvoie le type de
mouvement et d'autres info via un évent, il faut juste traper dans
cette évent le type (voir : RecordChangeComplete, MoveComplete, ...) de
déplacement et mettre à jour le controle.

@+ Quaz

--
This is an automatic signature of MesNews.
Site : http://mesnews.no-ip.com





re,
oui c'est normale, il faut déclarer votre recordset dans la partie
global de votre module avec l'option withevents.
Voici un chti exemple, qui fonctionne très bien.

Créer deux textbox : txtDB et txtlog
Créer 9 boutons : cmdOpenConnection, cmdClose, CreateRecord,
cmdCloseRecordset, cmdActualPos, cmdMovePrevious, cmdMoveNext,
cmdMoveFirst, cmdMoveLast
Créer un commondialogue : cmdlgMain
Créer une progresbar : ProgressBar
Ajouter les références : Microsoft ActiveX Data Objects 2.8 Library
Ajouter les controls : Microsoft Windows Common Controls 6.0 (SP6) et
Microsoft Common Dialog Control 6.0 (SP6)

Voici le chti code à mettre dans le form principal :
-----------------------------------------------------------------------------------------------------------------------------------
Option Explicit

Private m_lngNbreRecords As Long
Private WithEvents m_objRs As ADODB.Recordset
Private WithEvents m_objCon As ADODB.Connection
Private const c_strLaStringSQL as string = "Select * from latable"

Private Sub MakeReasonMove(ByVal adReason As ADODB.EventStatusEnum,
ByVal strMethodeCalled As String)

Select Case adReason
Case adRsnMoveFirst
txtlog.Text = txtlog.Text & strMethodeCalled & " [Move reason :
MoveFirst]." & vbCrLf
Case adRsnMoveLast
txtlog.Text = txtlog.Text & strMethodeCalled & " [Move reason :
MoveLast]." & vbCrLf
Case adRsnMoveNext
txtlog.Text = txtlog.Text & strMethodeCalled & " [Move reason :
MoveNext]." & vbCrLf
Case adRsnMovePrevious
txtlog.Text = txtlog.Text & strMethodeCalled & " [Move reason :
MovePrevious]." & vbCrLf
Case adRsnMove
txtlog.Text = txtlog.Text & strMethodeCalled & " [Move reason :
Move]." & vbCrLf
End Select

End Sub

Private Sub cmdMoveFirst_Click()

m_objRs.MoveFirst
ProgressBar.Value = 0

End Sub

Private Sub cmdMoveLast_Click()

m_objRs.MoveLast
ProgressBar.Value = m_objRs.RecordCount

End Sub

Private Sub cmdMoveNext_Click()

If Not m_objRs.EOF Then
m_objRs.MoveNext
If ProgressBar.Value < ProgressBar.Max Then
ProgressBar.Value = ProgressBar.Value + 1
End If
End If

End Sub

Private Sub cmdMovePrevious_Click()

If Not m_objRs.BOF Then
m_objRs.MovePrevious
If ProgressBar.Value > 0 Then
ProgressBar.Value = ProgressBar.Value - 1
End If
End If

End Sub

Private Sub m_objRs_MoveComplete(ByVal adReason As
ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As
ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)

MakeReasonMove adReason, "MoveComplete"

End Sub

Private Sub m_objRs_RecordChangeComplete(ByVal adReason As
ADODB.EventReasonEnum, ByVal cRecords As Long, ByVal pError As
ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As
ADODB.Recordset)

MakeReasonMove adReason, "RecordChangeComplete"

End Sub

Private Sub cmdActualPos_Click()

Select Case m_objRs.AbsolutePosition
Case adPosBOF
txtlog.Text = txtlog.Text & "Position actuel : BOF." & vbCrLf
Case adPosEOF
txtlog.Text = txtlog.Text & "Position actuel : EOF." & vbCrLf
Case adPosUnknown
txtlog.Text = txtlog.Text & "Position actuel : Unknown." &
vbCrLf
End Select

End Sub

Private Sub cmdCloseRecordset_Click()

m_objRs.Close
Set m_objRs = Nothing
txtlog.Text = txtlog.Text & "Recordset fermé." & vbCrLf

End Sub

Private Sub CreateRecord_Click()

Set m_objRs = New ADODB.Recordset
m_objRs.Open c_strLaStringSQL, m_objCon, adOpenStatic,
adLockOptimistic
m_lngNbreRecords = m_objRs.RecordCount
ProgressBar.Max = m_lngNbreRecords
ProgressBar.Min = 0
txtlog.Text = txtlog.Text & "Nombre d'enregistrements trouvés : " &
Trim(CStr(m_objRs.RecordCount)) & vbCrLf

End Sub

Private Sub MakeStatus(ByVal adStatus As ADODB.EventStatusEnum, ByVal
strMethodeCalled As String)

Select Case adStatus
Case adStatusOK
txtlog.Text = txtlog.Text & strMethodeCalled & " : Status Ok."
& vbCrLf
Case adStatusCancel
txtlog.Text = txtlog.Text & strMethodeCalled & " : Status
Cancel." & vbCrLf
Case adStatusCantDeny
txtlog.Text = txtlog.Text & strMethodeCalled & " : Status
CantDeny." & vbCrLf
Case adStatusErrorsOccurred
txtlog.Text = txtlog.Text & strMethodeCalled & " : Status
Errors Occurred." & vbCrLf
Case adStatusUnwantedEvent
txtlog.Text = txtlog.Text & strMethodeCalled & " : Status
Unwanted Event." & vbCrLf
End Select

End Sub

Private Sub cmdClose_Click()

m_objCon.Close
Set m_objCon = Nothing

End Sub

Private Sub cmdOpenConnection_Click()

cmdlgMain.DefaultExt = ".mdb"
cmdlgMain.Filter = "MS Access (*.mdb)|*.mdb"
cmdlgMain.ShowOpen
txtDB.Text = cmdlgMain.FileName
If (Trim(txtDB.Text) = "") Then Exit Sub
If (Dir(txtDB.Text) = "") Then Exit Sub
Set m_objCon = New ADODB.Connection
m_objCon.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" &
txtDB.Text ';uid=nonDusager;pwd=motDePasse;"

End Sub

Private Sub m_objCon_ConnectComplete(ByVal pError As ADODB.Error,
adStatus As ADODB.EventStatusEnum, ByVal pConnection As
ADODB.Connection)

MakeStatus adStatus, "ConnectComplete"

End Sub

Private Sub m_objCon_Disconnect(adStatus As ADODB.EventStatusEnum,
ByVal pConnection As ADODB.Connection)

MakeStatus adStatus, "Disconnect"

End Sub

Private Sub m_objCon_InfoMessage(ByVal pError As ADODB.Error, adStatus
As ADODB.EventStatusEnum, ByVal pConnection As ADODB.Connection)

MakeStatus adStatus, "InfoMessage"

End Sub

Private Sub m_objCon_WillConnect(ConnectionString As String, UserID As
String, Password As String, Options As Long, adStatus As
ADODB.EventStatusEnum, ByVal pConnection As ADODB.Connection)

Dim strData As String

Select Case adStatus
Case adStatusOK
strData = "WillConnect : [Status Ok]"
Case adStatusCancel
strData = "WillConnect : [Status Cancel]"
Case adStatusCantDeny
strData = "WillConnect : [Status CantDeny]"
Case adStatusErrorsOccurred
strData = "WillConnect : [Status Errors Occurred]"
Case adStatusUnwantedEvent
strData = "WillConnect : [Status Unwanted Event]"
End Select
strData = strData & "[Connection string : " & ConnectionString &
"]" & _
"[UserID : " & UserID & "]" & _
"[Password : " & Password & "]" & _
"[Options : " & Options & "]"
txtlog.Text = txtlog.Text & strData & vbCrLf

End Sub
-----------------------------------------------------------------------------------------------------------------------------------

--
This is an automatic signature of MesNews.
Site : http://mesnews.no-ip.com
Avatar
Yves
Bonjour

Je n'ai pas

Microsoft ActiveX Data Objects 2.8 Library

Visual basic 6 que j'ai

Alors une erreur sur cette ligne : WithEvents

Private WithEvents m_objRs As ADODB.Recordset


"Quasimodo" a écrit dans le message de
news:
Yves formulated on Wednesday :
> je suis en ODBC
> DB.Open "Provider=MSDASQL.1;Persist Security


Infoúlse;Data
> Source=surgest;Initial Catalog=" & strCheminBase & strNomBase
>
>
> Je n'ai pas ....
>
> RecordChangeComplete, MoveComplete
>
> r.Open Req, DB, adOpenStatic, adLockOptimistic
> sbrAnalyse.PanelText(1) = "Nombre d'enregistrements trouvés :" +
> str(Trim( _
> r.RecordCount))
>
> If r.RecordCount > 0 Then
> If r.AbsolutePosition <> adPosUnknown Then
> ProgressBar.Visible = True
> ProgressBar.Max = r.RecordCount
> End If
>
>
>
> "Quasimodo" a écrit dans le message de
> news:
>> Yves has brought this to us :
>>> Bonjour à tous,
>>>
>>> Voici mon problème
>>>
>>> r.AbsolutePosition en ODBC ne fonctionne pas et je voudrais pouvoir
>>> afficher un ProgressBar
>>>
>>> Ma solution a été de:
>>>
>>> If r.AbsolutePosition <> adPosUnknown Then
>>> ProgressBar.Visible = True
>>> ProgressBar.Max = r.RecordCount
>>> End If
>>>
>>> Mais il existe t-il une autre façon???
>>>
>>> Merci de vos réponse
>>>
>>> J'ouvre ma base en Access ou ODBC et plus tard en SQLServeur
>>>
>>> If DB.State = adStateClosed Then
>>>
>>> Select Case strBaseDeDonnéeType
>>> Case "ACCESS"
>>> 'Access
>>> DB.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source " &
>>> strCheminBase & strNomBase
>>> Case "ODBC"
>>> 'ODBC
>>> DB.Open "Provider=MSDASQL.1;Persist Security
>>> Infoúlse;Data Source=surgest;Initial Catalog=" &
>>> strCheminBase & strNomBase
>>> Case "SQLServeur"
>>> 'DB.Open "Provider=SQLOLEDB;data Source=<name of your


SQL
>>> Server>;"
>>> ' DB.Open "Provider=SQLOLEDB;data Source=" &


strCheminBase
>>> & strNomBase
>>> End Select
>>>
>>> End If
>>
>> Bonjour,
>> oui, fin peut être. Je pense par exemple à initialiser la propriété max
>> du controle avec le nombre d'enregistrement retourné par le recordset.
>> Ensuite, sur chaque mouvement du recordset, celui renvoie le type de
>> mouvement et d'autres info via un évent, il faut juste traper dans
>> cette évent le type (voir : RecordChangeComplete, MoveComplete, ...) de
>> déplacement et mettre à jour le controle.
>>
>> @+ Quaz
>>
>> --
>> This is an automatic signature of MesNews.
>> Site : http://mesnews.no-ip.com

re,
oui c'est normale, il faut déclarer votre recordset dans la partie
global de votre module avec l'option withevents.
Voici un chti exemple, qui fonctionne très bien.

Créer deux textbox : txtDB et txtlog
Créer 9 boutons : cmdOpenConnection, cmdClose, CreateRecord,
cmdCloseRecordset, cmdActualPos, cmdMovePrevious, cmdMoveNext,
cmdMoveFirst, cmdMoveLast
Créer un commondialogue : cmdlgMain
Créer une progresbar : ProgressBar
Ajouter les références : Microsoft ActiveX Data Objects 2.8 Library
Ajouter les controls : Microsoft Windows Common Controls 6.0 (SP6) et
Microsoft Common Dialog Control 6.0 (SP6)

Voici le chti code à mettre dans le form principal :
--------------------------------------------------------------------------


---------------------------------------------------------
Option Explicit

Private m_lngNbreRecords As Long
Private WithEvents m_objRs As ADODB.Recordset
Private WithEvents m_objCon As ADODB.Connection
Private const c_strLaStringSQL as string = "Select * from latable"

Private Sub MakeReasonMove(ByVal adReason As ADODB.EventStatusEnum,
ByVal strMethodeCalled As String)

Select Case adReason
Case adRsnMoveFirst
txtlog.Text = txtlog.Text & strMethodeCalled & " [Move reason :
MoveFirst]." & vbCrLf
Case adRsnMoveLast
txtlog.Text = txtlog.Text & strMethodeCalled & " [Move reason :
MoveLast]." & vbCrLf
Case adRsnMoveNext
txtlog.Text = txtlog.Text & strMethodeCalled & " [Move reason :
MoveNext]." & vbCrLf
Case adRsnMovePrevious
txtlog.Text = txtlog.Text & strMethodeCalled & " [Move reason :
MovePrevious]." & vbCrLf
Case adRsnMove
txtlog.Text = txtlog.Text & strMethodeCalled & " [Move reason :
Move]." & vbCrLf
End Select

End Sub

Private Sub cmdMoveFirst_Click()

m_objRs.MoveFirst
ProgressBar.Value = 0

End Sub

Private Sub cmdMoveLast_Click()

m_objRs.MoveLast
ProgressBar.Value = m_objRs.RecordCount

End Sub

Private Sub cmdMoveNext_Click()

If Not m_objRs.EOF Then
m_objRs.MoveNext
If ProgressBar.Value < ProgressBar.Max Then
ProgressBar.Value = ProgressBar.Value + 1
End If
End If

End Sub

Private Sub cmdMovePrevious_Click()

If Not m_objRs.BOF Then
m_objRs.MovePrevious
If ProgressBar.Value > 0 Then
ProgressBar.Value = ProgressBar.Value - 1
End If
End If

End Sub

Private Sub m_objRs_MoveComplete(ByVal adReason As
ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As
ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)

MakeReasonMove adReason, "MoveComplete"

End Sub

Private Sub m_objRs_RecordChangeComplete(ByVal adReason As
ADODB.EventReasonEnum, ByVal cRecords As Long, ByVal pError As
ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As
ADODB.Recordset)

MakeReasonMove adReason, "RecordChangeComplete"

End Sub

Private Sub cmdActualPos_Click()

Select Case m_objRs.AbsolutePosition
Case adPosBOF
txtlog.Text = txtlog.Text & "Position actuel : BOF." & vbCrLf
Case adPosEOF
txtlog.Text = txtlog.Text & "Position actuel : EOF." & vbCrLf
Case adPosUnknown
txtlog.Text = txtlog.Text & "Position actuel : Unknown." &
vbCrLf
End Select

End Sub

Private Sub cmdCloseRecordset_Click()

m_objRs.Close
Set m_objRs = Nothing
txtlog.Text = txtlog.Text & "Recordset fermé." & vbCrLf

End Sub

Private Sub CreateRecord_Click()

Set m_objRs = New ADODB.Recordset
m_objRs.Open c_strLaStringSQL, m_objCon, adOpenStatic,
adLockOptimistic
m_lngNbreRecords = m_objRs.RecordCount
ProgressBar.Max = m_lngNbreRecords
ProgressBar.Min = 0
txtlog.Text = txtlog.Text & "Nombre d'enregistrements trouvés : " &
Trim(CStr(m_objRs.RecordCount)) & vbCrLf

End Sub

Private Sub MakeStatus(ByVal adStatus As ADODB.EventStatusEnum, ByVal
strMethodeCalled As String)

Select Case adStatus
Case adStatusOK
txtlog.Text = txtlog.Text & strMethodeCalled & " : Status Ok."
& vbCrLf
Case adStatusCancel
txtlog.Text = txtlog.Text & strMethodeCalled & " : Status
Cancel." & vbCrLf
Case adStatusCantDeny
txtlog.Text = txtlog.Text & strMethodeCalled & " : Status
CantDeny." & vbCrLf
Case adStatusErrorsOccurred
txtlog.Text = txtlog.Text & strMethodeCalled & " : Status
Errors Occurred." & vbCrLf
Case adStatusUnwantedEvent
txtlog.Text = txtlog.Text & strMethodeCalled & " : Status
Unwanted Event." & vbCrLf
End Select

End Sub

Private Sub cmdClose_Click()

m_objCon.Close
Set m_objCon = Nothing

End Sub

Private Sub cmdOpenConnection_Click()

cmdlgMain.DefaultExt = ".mdb"
cmdlgMain.Filter = "MS Access (*.mdb)|*.mdb"
cmdlgMain.ShowOpen
txtDB.Text = cmdlgMain.FileName
If (Trim(txtDB.Text) = "") Then Exit Sub
If (Dir(txtDB.Text) = "") Then Exit Sub
Set m_objCon = New ADODB.Connection
m_objCon.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" &
txtDB.Text ';uid=nonDusager;pwd=motDePasse;"

End Sub

Private Sub m_objCon_ConnectComplete(ByVal pError As ADODB.Error,
adStatus As ADODB.EventStatusEnum, ByVal pConnection As
ADODB.Connection)

MakeStatus adStatus, "ConnectComplete"

End Sub

Private Sub m_objCon_Disconnect(adStatus As ADODB.EventStatusEnum,
ByVal pConnection As ADODB.Connection)

MakeStatus adStatus, "Disconnect"

End Sub

Private Sub m_objCon_InfoMessage(ByVal pError As ADODB.Error, adStatus
As ADODB.EventStatusEnum, ByVal pConnection As ADODB.Connection)

MakeStatus adStatus, "InfoMessage"

End Sub

Private Sub m_objCon_WillConnect(ConnectionString As String, UserID As
String, Password As String, Options As Long, adStatus As
ADODB.EventStatusEnum, ByVal pConnection As ADODB.Connection)

Dim strData As String

Select Case adStatus
Case adStatusOK
strData = "WillConnect : [Status Ok]"
Case adStatusCancel
strData = "WillConnect : [Status Cancel]"
Case adStatusCantDeny
strData = "WillConnect : [Status CantDeny]"
Case adStatusErrorsOccurred
strData = "WillConnect : [Status Errors Occurred]"
Case adStatusUnwantedEvent
strData = "WillConnect : [Status Unwanted Event]"
End Select
strData = strData & "[Connection string : " & ConnectionString &
"]" & _
"[UserID : " & UserID & "]" & _
"[Password : " & Password & "]" & _
"[Options : " & Options & "]"
txtlog.Text = txtlog.Text & strData & vbCrLf

End Sub
--------------------------------------------------------------------------


---------------------------------------------------------

--
This is an automatic signature of MesNews.
Site : http://mesnews.no-ip.com



Avatar
Quasimodo
Yves laid this down on his screen :
Bonjour

Je n'ai pas

Microsoft ActiveX Data Objects 2.8 Library

Visual basic 6 que j'ai

Alors une erreur sur cette ligne : WithEvents

Private WithEvents m_objRs As ADODB.Recordset


"Quasimodo" a écrit dans le message de
news:
Yves formulated on Wednesday :
je suis en ODBC
DB.Open "Provider=MSDASQL.1;Persist Security
Infoúlse;Data Source=surgest;Initial Catalog=" & strCheminBase &
strNomBase


Je n'ai pas ....

RecordChangeComplete, MoveComplete

r.Open Req, DB, adOpenStatic, adLockOptimistic
sbrAnalyse.PanelText(1) = "Nombre d'enregistrements trouvés :" +
str(Trim( _
r.RecordCount))

If r.RecordCount > 0 Then
If r.AbsolutePosition <> adPosUnknown Then
ProgressBar.Visible = True
ProgressBar.Max = r.RecordCount
End If



"Quasimodo" a écrit dans le message de
news:
Yves has brought this to us :
Bonjour à tous,

Voici mon problème

r.AbsolutePosition en ODBC ne fonctionne pas et je voudrais pouvoir
afficher un ProgressBar

Ma solution a été de:

If r.AbsolutePosition <> adPosUnknown Then
ProgressBar.Visible = True
ProgressBar.Max = r.RecordCount
End If

Mais il existe t-il une autre façon???

Merci de vos réponse

J'ouvre ma base en Access ou ODBC et plus tard en SQLServeur

If DB.State = adStateClosed Then

Select Case strBaseDeDonnéeType
Case "ACCESS"
'Access
DB.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= "
& strCheminBase & strNomBase
Case "ODBC"
'ODBC
DB.Open "Provider=MSDASQL.1;Persist Security
Infoúlse;Data Source=surgest;Initial Catalog=" &
strCheminBase & strNomBase
Case "SQLServeur"
'DB.Open "Provider=SQLOLEDB;data Source=<name of your SQL
Server>;"
' DB.Open "Provider=SQLOLEDB;data Source=" &
strCheminBase & strNomBase
End Select

End If



Bonjour,
oui, fin peut être. Je pense par exemple à initialiser la propriété max
du controle avec le nombre d'enregistrement retourné par le recordset.
Ensuite, sur chaque mouvement du recordset, celui renvoie le type de
mouvement et d'autres info via un évent, il faut juste traper dans
cette évent le type (voir : RecordChangeComplete, MoveComplete, ...) de
déplacement et mettre à jour le controle.

@+ Quaz

--
This is an automatic signature of MesNews.
Site : http://mesnews.no-ip.com





re,
oui c'est normale, il faut déclarer votre recordset dans la partie
global de votre module avec l'option withevents.
Voici un chti exemple, qui fonctionne très bien.

Créer deux textbox : txtDB et txtlog
Créer 9 boutons : cmdOpenConnection, cmdClose, CreateRecord,
cmdCloseRecordset, cmdActualPos, cmdMovePrevious, cmdMoveNext,
cmdMoveFirst, cmdMoveLast
Créer un commondialogue : cmdlgMain
Créer une progresbar : ProgressBar
Ajouter les références : Microsoft ActiveX Data Objects 2.8 Library
Ajouter les controls : Microsoft Windows Common Controls 6.0 (SP6) et
Microsoft Common Dialog Control 6.0 (SP6)

Voici le chti code à mettre dans le form principal :
--------------------------------------------------------------------------
--------------------------------------------------------- Option Explicit

Private m_lngNbreRecords As Long
Private WithEvents m_objRs As ADODB.Recordset
Private WithEvents m_objCon As ADODB.Connection
Private const c_strLaStringSQL as string = "Select * from latable"

Private Sub MakeReasonMove(ByVal adReason As ADODB.EventStatusEnum,
ByVal strMethodeCalled As String)

Select Case adReason
Case adRsnMoveFirst
txtlog.Text = txtlog.Text & strMethodeCalled & " [Move reason :
MoveFirst]." & vbCrLf
Case adRsnMoveLast
txtlog.Text = txtlog.Text & strMethodeCalled & " [Move reason :
MoveLast]." & vbCrLf
Case adRsnMoveNext
txtlog.Text = txtlog.Text & strMethodeCalled & " [Move reason :
MoveNext]." & vbCrLf
Case adRsnMovePrevious
txtlog.Text = txtlog.Text & strMethodeCalled & " [Move reason :
MovePrevious]." & vbCrLf
Case adRsnMove
txtlog.Text = txtlog.Text & strMethodeCalled & " [Move reason :
Move]." & vbCrLf
End Select

End Sub

Private Sub cmdMoveFirst_Click()

m_objRs.MoveFirst
ProgressBar.Value = 0

End Sub

Private Sub cmdMoveLast_Click()

m_objRs.MoveLast
ProgressBar.Value = m_objRs.RecordCount

End Sub

Private Sub cmdMoveNext_Click()

If Not m_objRs.EOF Then
m_objRs.MoveNext
If ProgressBar.Value < ProgressBar.Max Then
ProgressBar.Value = ProgressBar.Value + 1
End If
End If

End Sub

Private Sub cmdMovePrevious_Click()

If Not m_objRs.BOF Then
m_objRs.MovePrevious
If ProgressBar.Value > 0 Then
ProgressBar.Value = ProgressBar.Value - 1
End If
End If

End Sub

Private Sub m_objRs_MoveComplete(ByVal adReason As
ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As
ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)

MakeReasonMove adReason, "MoveComplete"

End Sub

Private Sub m_objRs_RecordChangeComplete(ByVal adReason As
ADODB.EventReasonEnum, ByVal cRecords As Long, ByVal pError As
ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As
ADODB.Recordset)

MakeReasonMove adReason, "RecordChangeComplete"

End Sub

Private Sub cmdActualPos_Click()

Select Case m_objRs.AbsolutePosition
Case adPosBOF
txtlog.Text = txtlog.Text & "Position actuel : BOF." & vbCrLf
Case adPosEOF
txtlog.Text = txtlog.Text & "Position actuel : EOF." & vbCrLf
Case adPosUnknown
txtlog.Text = txtlog.Text & "Position actuel : Unknown." &
vbCrLf
End Select

End Sub

Private Sub cmdCloseRecordset_Click()

m_objRs.Close
Set m_objRs = Nothing
txtlog.Text = txtlog.Text & "Recordset fermé." & vbCrLf

End Sub

Private Sub CreateRecord_Click()

Set m_objRs = New ADODB.Recordset
m_objRs.Open c_strLaStringSQL, m_objCon, adOpenStatic,
adLockOptimistic
m_lngNbreRecords = m_objRs.RecordCount
ProgressBar.Max = m_lngNbreRecords
ProgressBar.Min = 0
txtlog.Text = txtlog.Text & "Nombre d'enregistrements trouvés : " &
Trim(CStr(m_objRs.RecordCount)) & vbCrLf

End Sub

Private Sub MakeStatus(ByVal adStatus As ADODB.EventStatusEnum, ByVal
strMethodeCalled As String)

Select Case adStatus
Case adStatusOK
txtlog.Text = txtlog.Text & strMethodeCalled & " : Status Ok."
& vbCrLf
Case adStatusCancel
txtlog.Text = txtlog.Text & strMethodeCalled & " : Status
Cancel." & vbCrLf
Case adStatusCantDeny
txtlog.Text = txtlog.Text & strMethodeCalled & " : Status
CantDeny." & vbCrLf
Case adStatusErrorsOccurred
txtlog.Text = txtlog.Text & strMethodeCalled & " : Status
Errors Occurred." & vbCrLf
Case adStatusUnwantedEvent
txtlog.Text = txtlog.Text & strMethodeCalled & " : Status
Unwanted Event." & vbCrLf
End Select

End Sub

Private Sub cmdClose_Click()

m_objCon.Close
Set m_objCon = Nothing

End Sub

Private Sub cmdOpenConnection_Click()

cmdlgMain.DefaultExt = ".mdb"
cmdlgMain.Filter = "MS Access (*.mdb)|*.mdb"
cmdlgMain.ShowOpen
txtDB.Text = cmdlgMain.FileName
If (Trim(txtDB.Text) = "") Then Exit Sub
If (Dir(txtDB.Text) = "") Then Exit Sub
Set m_objCon = New ADODB.Connection
m_objCon.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" &
txtDB.Text ';uid=nonDusager;pwd=motDePasse;"

End Sub

Private Sub m_objCon_ConnectComplete(ByVal pError As ADODB.Error,
adStatus As ADODB.EventStatusEnum, ByVal pConnection As
ADODB.Connection)

MakeStatus adStatus, "ConnectComplete"

End Sub

Private Sub m_objCon_Disconnect(adStatus As ADODB.EventStatusEnum,
ByVal pConnection As ADODB.Connection)

MakeStatus adStatus, "Disconnect"

End Sub

Private Sub m_objCon_InfoMessage(ByVal pError As ADODB.Error, adStatus
As ADODB.EventStatusEnum, ByVal pConnection As ADODB.Connection)

MakeStatus adStatus, "InfoMessage"

End Sub

Private Sub m_objCon_WillConnect(ConnectionString As String, UserID As
String, Password As String, Options As Long, adStatus As
ADODB.EventStatusEnum, ByVal pConnection As ADODB.Connection)

Dim strData As String

Select Case adStatus
Case adStatusOK
strData = "WillConnect : [Status Ok]"
Case adStatusCancel
strData = "WillConnect : [Status Cancel]"
Case adStatusCantDeny
strData = "WillConnect : [Status CantDeny]"
Case adStatusErrorsOccurred
strData = "WillConnect : [Status Errors Occurred]"
Case adStatusUnwantedEvent
strData = "WillConnect : [Status Unwanted Event]"
End Select
strData = strData & "[Connection string : " & ConnectionString &
"]" & _
"[UserID : " & UserID & "]" & _
"[Password : " & Password & "]" & _
"[Options : " & Options & "]"
txtlog.Text = txtlog.Text & strData & vbCrLf

End Sub
--------------------------------------------------------------------------
---------------------------------------------------------

--
This is an automatic signature of MesNews.
Site : http://mesnews.no-ip.com




soir,
soit vous downloader le nouveau MDAC sur le site de Microsoft, soit
vous utilisez une version antérieur (2.7,2.6,...)

@+Quaz

--
This is an automatic signature of MesNews.
Site : http://mesnews.no-ip.com