Jag hittade här på tips och tricks ett kodexemel för progressbar i en statusbar. Du får hämta datan från databasen async. Tack så mycket för ditt uttömmande svar, men det blir väll lite fel när jag kör SQL Server??Progressbar i statusbar.
Jag är inte säker på att det är just det jag vill ha, men jag tänkte testa.
Vad jag söker efter är, om jag t ex vill hämta info i databasen så tar det trots allt några 10-dels sekund. Då skulle jag vilja ha progressbaren att visa förlopet.
Koden jag hittade ser ut så här:
[kod]
Private Sub ShowProgressInStatusBar(ByVal bShowProgressBar As Boolean)
Dim tRC As RECT
If bShowProgressBar Then
SendMessageAny StatusBar1.hwnd, SB_GETRECT, 1, tRC
With tRC
.Top = (.Top * Screen.TwipsPerPixelY)
.Left = (.Left * Screen.TwipsPerPixelX)
.Bottom = (.Bottom * Screen.TwipsPerPixelY) - .Top
.Right = (.Right * Screen.TwipsPerPixelX) - .Left
End With
With ProgressBar1
SetParent .hwnd, StatusBar1.hwnd
.Move tRC.Left, tRC.Top, tRC.Right, tRC.Bottom
.Visible = True
.Value = 0
End With
Else
SetParent ProgressBar1.hwnd, Me.hwnd
ProgressBar1.Visible = False
End If
End Sub
Modul
Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Public Declare Function SendMessageAny Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
' API
Public Const WM_USER As Long = &H400
Public Const SB_GETRECT As Long = (WM_USER + 10)
[/kod]
Men jag är osäker på hur jag skall koppla det.
Säg att jag kör.
rst=Con.execute(SQL)
då ville jag att när rst körs, så skulle progressbaren vakna till liv, och sommna in så fort som programet har kört färdigt.
Hur gör man detta???
Sv: Progressbar i statusbar.
Tex:
<code>
Private WithEvents conn As ADODB.Connection
Private WithEvents rs As ADODB.Recordset
Private iCount As Integer
Private Sub Command1_Click()
Set conn = New ADODB.Connection
Dim sConn As String
sConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\db1.mdb;Persist Security Info=False"
conn.CursorLocation = adUseClient
conn.ConnectionTimeout = 10
conn.Open sConn, , , adAsyncConnect
End Sub
Private Sub Command2_Click()
Set rs = New ADODB.Recordset
With rs
.CursorLocation = adUseClient
.Properties("Initial Fetch Size") = 2
.Properties("Background Fetch Size") = 4
End With
'Få ut antalet poster vi ska hämta
rs.Open "SELECT COUNT(*) FROM Table", conn
iCount = rs.Fields(0)
rs.Close
ProgressBar1.Max = iCount
rs.Open "SELECT * FROM Table", conn, adOpenKeyset, adLockOptimistic, adAsyncFetch
End Sub
Private Sub conn_ConnectComplete(ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pConnection As ADODB.Connection)
msgbox "We have connection"
End Sub
Private Sub rs_FetchComplete(ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
MsgBox "Done"
End Sub
Private Sub rs_FetchProgress(ByVal Progress As Long, ByVal MaxProgress As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
If adStatus = adStatusOK Then
ProgressBar1.Value = Progress
Else
MsgBox "Some error"
End If
</code>Sv: Progressbar i statusbar.