我把代码发出来吧Private Sub Command1_Click() Dim t As tt1.cc1 '''测试的一个ACTIVEX.EXE Set t = New tt1.cc1 'MsgBox t.isOK t.setConnString ("Driver={SQL Server};Server=数据库服务器;Database=数据库名;UID=用户名;PWD=密码") t.EXERS ("SQL语句") '''就是这一句的时候GIF开始不动了 End SubPrivate Sub Form_Load() Me.GifPlay1.GifPlay ("D:\t.gif")''用来播放GIF的OCX End Sub
我把代码发出来吧Private Sub Command1_Click() Dim t As tt1.cc1 '''测试的一个ACTIVEX.EXE Set t = New tt1.cc1 'MsgBox t.isOK t.setConnString ("Driver={SQL Server};Server=数据库服务器;Database=数据库名;UID=用户名;PWD=密码") t.EXERS ("SQL语句") '''就是这一句的时候GIF开始不动了 End SubPrivate Sub Form_Load() Me.GifPlay1.GifPlay ("D:\t.gif")''用来播放GIF的OCX End Sub
这是ActiveX.EXE的代码Private conn Private rs Public isOK '''我想通过这个来判断数据库是否执行完毕 Public Sub EXERS(s As String) isOK = False Set rs = conn.execute(s) isOK = TrueEnd SubPublic Function getRS() getRS = rs End FunctionPublic Sub setConnString(s As String) conn.open s conn.commandtimeout = 0 End Sub Public Sub closeDB() conn.Close Set conn = Nothing End SubPrivate Sub Class_Initialize() isOK = False Set conn = CreateObject("adodb.connection") End Sub
实际上,数据库对象,例如记录集是可以带有事件触发的。Dim WithEvents rs As ADODB.Recordset这样的话,可以在下列进度事件中做进度条或其他显示处理:Private Sub rs_FetchProgress(ByVal Progress As Long, ByVal MaxProgress As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)End Sub
楼上的方法也见过,不过没试过,应该是个不错的选择: 1 首先要引用 MDAC 2.5 以上版本。使用 VB 6.0 以上平台。 2 声明变量如 Dim WithEvents rs As ADODB.Recordset 3 必须使用客户游标。 4 打开记录集时必须指定 adAsyncFetch Dim WithEvents rs As ADODB.RecordsetSet rs = New ADODB.Recordset With rs .CursorLocation = adUseClient
.Properties("Initial Fetch Size") = 2 .Properties("Background Fetch Size") = 4 .Open strSQL, cn, , , adAsyncFetch End With事件:(当然你可以使用进度条) Private Sub rs_FetchProgress(ByVal Progress As Long, ByVal MaxProgress As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset) Debug.Print "Fetch: " & Progress & _ " Max: " & MaxProgress End SubPrivate Sub rs_FetchComplete(ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset) If adStatus <> adStatusOK Then Debug.Print "Failed" Debug.Print "Error: " & pError.Number & " - " & pError.Description Else Set DataGrid1.DataSource = pRecordset Debug.Print "Done" End If End Sub另外,楼主的ActiveX.exe写的不对,引用没有事件触发...
运行一个DTS涉及到相当多的操作包括数据的导入和导出,数据库方面的优化不用了我现在想知道VB怎么处理这个等待
DLL,用主程序来调用试试
DoEvnts对循环产生的假死有用,但是等待没有任何作用
数据代码不好贴,都说了是DTS有数据的导入和导出比如对到EXCEL中,或导到TXT文本中,也有从文件里导出来的,DTS的脚本太多
我把代码发出来吧Private Sub Command1_Click()
Dim t As tt1.cc1 '''测试的一个ACTIVEX.EXE
Set t = New tt1.cc1
'MsgBox t.isOK
t.setConnString ("Driver={SQL Server};Server=数据库服务器;Database=数据库名;UID=用户名;PWD=密码")
t.EXERS ("SQL语句") '''就是这一句的时候GIF开始不动了
End SubPrivate Sub Form_Load()
Me.GifPlay1.GifPlay ("D:\t.gif")''用来播放GIF的OCX
End Sub
我把代码发出来吧Private Sub Command1_Click()
Dim t As tt1.cc1 '''测试的一个ACTIVEX.EXE
Set t = New tt1.cc1
'MsgBox t.isOK
t.setConnString ("Driver={SQL Server};Server=数据库服务器;Database=数据库名;UID=用户名;PWD=密码")
t.EXERS ("SQL语句") '''就是这一句的时候GIF开始不动了
End SubPrivate Sub Form_Load()
Me.GifPlay1.GifPlay ("D:\t.gif")''用来播放GIF的OCX
End Sub
Private rs
Public isOK '''我想通过这个来判断数据库是否执行完毕
Public Sub EXERS(s As String)
isOK = False
Set rs = conn.execute(s)
isOK = TrueEnd SubPublic Function getRS()
getRS = rs
End FunctionPublic Sub setConnString(s As String)
conn.open s
conn.commandtimeout = 0
End Sub
Public Sub closeDB()
conn.Close
Set conn = Nothing
End SubPrivate Sub Class_Initialize()
isOK = False
Set conn = CreateObject("adodb.connection")
End Sub
实际上,数据库对象,例如记录集是可以带有事件触发的。Dim WithEvents rs As ADODB.Recordset这样的话,可以在下列进度事件中做进度条或其他显示处理:Private Sub rs_FetchProgress(ByVal Progress As Long, ByVal MaxProgress As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)End Sub
1 首先要引用 MDAC 2.5 以上版本。使用 VB 6.0 以上平台。
2 声明变量如 Dim WithEvents rs As ADODB.Recordset
3 必须使用客户游标。
4 打开记录集时必须指定 adAsyncFetch Dim WithEvents rs As ADODB.RecordsetSet rs = New ADODB.Recordset
With rs
.CursorLocation = adUseClient
.Properties("Initial Fetch Size") = 2
.Properties("Background Fetch Size") = 4
.Open strSQL, cn, , , adAsyncFetch
End With事件:(当然你可以使用进度条)
Private Sub rs_FetchProgress(ByVal Progress As Long, ByVal MaxProgress As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
Debug.Print "Fetch: " & Progress & _
" Max: " & MaxProgress
End SubPrivate Sub rs_FetchComplete(ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
If adStatus <> adStatusOK Then
Debug.Print "Failed"
Debug.Print "Error: " & pError.Number & " - " & pError.Description
Else
Set DataGrid1.DataSource = pRecordset
Debug.Print "Done"
End If
End Sub另外,楼主的ActiveX.exe写的不对,引用没有事件触发...
我的解决方法是,写一个专门用来显是信息等待界面的ActiveX.EXE,当程序进入等待数据库操作
之前加载然后主程序隐身,等数据库操作完成后,关闭ActiveX.EXE主程序显示
虽然不是好的方法,不过还是解决了让客户看到假死的界面了