Ejemplo real en ActiveX (bastante parecido al VB6)...
Private Function carga_Total()
Dim rs As New ADODB.Recordset
Dim cnx As New ADODB.Connection
Dim xmlRet As New MSXML2.DOMDocument
Dim IMatriz(0 To 9) As Long
Dim contar As Long
Dim TablaOrigen As String
Dim TablaDestino As String
Dim idDirecc As Long
Dim ltotReg As Long
bcancel = False ' inicialización para el proceso de cancel
cnx.ConnectionString = "UID=sa;PWD=sa;DATABASE=X_BORRADOR;SERVER=SDHERPRESQL03;DRIVER=SQL SERVER;DSN='';APP=NORMA;TIMEOUT=60"
cnx.Open
Text1.Text = cnx.ConnectionString
TablaOrigen = "datos_originales"
TablaDestino = "salida_norma"
Set rs.ActiveConnection = cnx
rs.CursorLocation = adUseServer
rs.CursorType = adOpenForwardOnly
' calculo del nº de registros en el sistema
rs.Open "Select count(*) from " & TablaOrigen
ltotReg = rs.fields(0).Value
rs.Close
Label3.Caption = CStr(ltotReg)
' recuperación de datos de entrada
rs.Open "SELECT * FROM " & TablaOrigen
xmlRet.async = False
contar = 1
cnx.Execute "DELETE FROM " & TablaDestino
Do While rs.EOF = False And Not bcancel
idDirecc = rs.fields(0).Value
strsource = "http://sdhernorma01v/normalizador/normaliza.asp?data=<norma><item%20guid='1'%20pais='ESP'%20tipo='DIR'>" + rs.fields(1).Value + " </item></norma>"
xmlRet.Load strsource
List1.AddItem rs.fields(0).Value & " -- " & rs.fields(1).Value
List1.Refresh
'Debug.Print strsource
If Not (xmlRet.selectSingleNode("//output") Is Nothing) Then
Index = CInt(xmlRet.selectSingleNode("//output").Attributes.getNamedItem("level").Text)
IMatriz(Index) = IMatriz(Index) + 1
cnx.Execute "execute INSERTANORMA " & CStr(idDirecc) & ",'" & Replace(CStr(xmlRet.selectSingleNode("/norma").xml), "'", "''") & "'"
End If
Label1.Caption = CStr(contar)
contar = contar + 1
Label4.Caption = CStr(CInt(10000 * contar / ltotReg) / 100) + " %"
rs.MoveNext
DoEvents
Loop
rs.Close
If bcancel = True Then
MsgBox "Proceso cancelado por el usuario"
Unload Me
Else
MsgBox "Finalizado proceso de datos totales"
End If
End Function