'======================================= '以下为数据库连接代码 '======================================= Public Function Conn() As ADODB.Connection '定义函数 On Error GoTo doerror Set Conn = New ADODB.Connection '返回一个数据库连接 Conn.Open "Driver={SQL Server};Server=" + server_ip + ";Database=po;Uid=sa;Pwd=" doerror: MsgBox Err.Description End End Function这是在模块里的,在VB中运行就没有提示说无效的调用过程或参数但生成EXE后就会提示,点确定后又能显示msgbox这一行
Public Function Conn() As ADODB.Connection On Error GoTo doerror Set Conn = New ADODB.Connection Conn.Open "Driver={SQL Server};Server=" + server_ip + ";Database=po;Uid=sa;Pwd=" Exit Function '<-没有这句,正常执行都会进入错误处理代码,哪来的 Err.Description doerror: MsgBox Err.Description End End Function
Public Function Open_Conn(Conn) As Boolean On Error GoTo doerror Set Conn = New ADODB.Connection Conn.Open "Driver={SQL Server};Server=" + server_ip + ";Database=po;Uid=sa;Pwd=" Open_Conn = True Exit Function doerror: MsgBox Err.Description '->此处应该详细点,比如列举函数名? Open_Conn = False 'End '<-End不要用 这样等于让程序驻留了内存,你的程序许多东西都没有释放.就是程序窗口已经没了,进程却还在 End Function
如果不用 END 话,它加多一个错误提示:对象关闭时无法操作
LZ:8楼9楼的意见正确,你的EXE是否不是在编译此EXE的环境下运行。
'ADO方式连接数据库 Public Function Open_Cn(cn) As Boolean On Error GoTo err 'DbUserName是数据库用户名,DbUserPwd是数据库密码,DbName是数据库名,SvrName是服务器名 Set cn = New ADODB.Connection cn.ConnectionString = "Provider=SQLOLEDB.1;Persist Security info=False;User ID='" & DbUserName & "';Password='" & DbUserPwd & "';Initial Catalog='" & DbName & "';Data Source='" & SvrName & "'" cn.CommandTimeout = 30 cn.CursorLocation = 3 cn.Open Open_Cn = True Exit Function err: msgbox err.description,vbinformation,"" open_cn = false End FunctionPublic Sub Open_Rs(rss, ocn) On Error GoTo err Set cn = New ADODB.RecordSet rss.ActiveConnection = ocn rss.CursorType = 3 Exit Sub err: msgbox err.description,vbinformation,"" End Sub'例如: private sub Test() on error goto err '局部链接 dim cn as object dim rs as object
call open_cn(cn) call open_rs(rs,cn) 'your code..
set cn = nothing set rs = nothing exit sub err: set cn = nothing set rs = nothing 'msgbox ? end sub '数据库连接代码,你可以看下
第一个是能显示msgbox是因为你没有在doerror:前加exit function 第二个是应该没问题才对
Private Sub img_login_Click() Dim admin_user As Variant Dim user As Variant Dim password_user As Variant Dim result As Boolean Static intMyTimes As Integer '定义输入密码的次数 admin_user = Trim(admin.Text) If IsNumeric(admin_user) Then If Not Conn.Execute("select short_name from shop where shop_num='" + admin_user + "'").EOF Then user = Conn.Execute("select short_name from shop where shop_num='" + admin_user + "'")(0) Else user = "" End If Else user = admin_user End IfIf Conn.Execute("select id from admin where admin='" + user + "'").EOF Then l_c.Caption = "[用户名输错]" l_c.ForeColor = &HFF& admin.Text = "" admin.SetFocus Else password_user = md5(Trim(password.Text)) result = login(user, password_user, 1, "admin", "admin", "password", "danji") '与asp里的验证保持一致 If result Then shop_num = user '保存登录名 ' Load main main.Show Unload Me Else MsgBox "密" ‘’这里一加入这个msgbox就提示“无效的调用过程或参数” 'l_p.Caption = "[密码输错了]" 'l_p.ForeColor = vbRed 'password.Text = "" 'password.SetFocus End If End If End Sub
'以下为数据库连接代码
'=======================================
Public Function Conn() As ADODB.Connection '定义函数
On Error GoTo doerror
Set Conn = New ADODB.Connection '返回一个数据库连接
Conn.Open "Driver={SQL Server};Server=" + server_ip + ";Database=po;Uid=sa;Pwd="
doerror:
MsgBox Err.Description
End
End Function这是在模块里的,在VB中运行就没有提示说无效的调用过程或参数但生成EXE后就会提示,点确定后又能显示msgbox这一行
On Error GoTo doerror
Set Conn = New ADODB.Connection
Conn.Open "Driver={SQL Server};Server=" + server_ip + ";Database=po;Uid=sa;Pwd="
Exit Function '<-没有这句,正常执行都会进入错误处理代码,哪来的 Err.Description
doerror:
MsgBox Err.Description
End
End Function
Public Function Open_Conn(Conn) As Boolean
On Error GoTo doerror
Set Conn = New ADODB.Connection
Conn.Open "Driver={SQL Server};Server=" + server_ip + ";Database=po;Uid=sa;Pwd="
Open_Conn = True
Exit Function
doerror:
MsgBox Err.Description '->此处应该详细点,比如列举函数名?
Open_Conn = False
'End '<-End不要用 这样等于让程序驻留了内存,你的程序许多东西都没有释放.就是程序窗口已经没了,进程却还在
End Function
'ADO方式连接数据库
Public Function Open_Cn(cn) As Boolean
On Error GoTo err
'DbUserName是数据库用户名,DbUserPwd是数据库密码,DbName是数据库名,SvrName是服务器名
Set cn = New ADODB.Connection
cn.ConnectionString = "Provider=SQLOLEDB.1;Persist Security info=False;User ID='" & DbUserName & "';Password='" & DbUserPwd & "';Initial Catalog='" & DbName & "';Data Source='" & SvrName & "'"
cn.CommandTimeout = 30
cn.CursorLocation = 3
cn.Open
Open_Cn = True
Exit Function
err:
msgbox err.description,vbinformation,""
open_cn = false
End FunctionPublic Sub Open_Rs(rss, ocn)
On Error GoTo err
Set cn = New ADODB.RecordSet
rss.ActiveConnection = ocn
rss.CursorType = 3
Exit Sub
err:
msgbox err.description,vbinformation,""
End Sub'例如:
private sub Test()
on error goto err
'局部链接
dim cn as object
dim rs as object
call open_cn(cn)
call open_rs(rs,cn)
'your code..
set cn = nothing
set rs = nothing
exit sub
err:
set cn = nothing
set rs = nothing
'msgbox ?
end sub
'数据库连接代码,你可以看下
第二个是应该没问题才对
Dim admin_user As Variant
Dim user As Variant
Dim password_user As Variant
Dim result As Boolean
Static intMyTimes As Integer '定义输入密码的次数
admin_user = Trim(admin.Text)
If IsNumeric(admin_user) Then
If Not Conn.Execute("select short_name from shop where shop_num='" + admin_user + "'").EOF Then
user = Conn.Execute("select short_name from shop where shop_num='" + admin_user + "'")(0)
Else
user = ""
End If
Else
user = admin_user
End IfIf Conn.Execute("select id from admin where admin='" + user + "'").EOF Then
l_c.Caption = "[用户名输错]"
l_c.ForeColor = &HFF&
admin.Text = ""
admin.SetFocus
Else
password_user = md5(Trim(password.Text))
result = login(user, password_user, 1, "admin", "admin", "password", "danji") '与asp里的验证保持一致
If result Then
shop_num = user '保存登录名 '
Load main
main.Show
Unload Me
Else
MsgBox "密" ‘’这里一加入这个msgbox就提示“无效的调用过程或参数”
'l_p.Caption = "[密码输错了]"
'l_p.ForeColor = vbRed
'password.Text = ""
'password.SetFocus
End If
End If
End Sub