对象变量或with块变量未设置????

qiucheng 2004-01-02 02:51:08
做数据库时有以下一部分login代码:
Option Explicit
Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpbuffer As String, nSize As Long) As Long


Public OK As Boolean
'记录确定次数
Dim miCount As Integer
Private Sub Form_Load()
Dim sBuffer As String
Dim lSize As Long


sBuffer = Space$(255)
lSize = Len(sBuffer)
Call GetUserName(sBuffer, lSize)
If lSize > 0 Then
txtUserName.Text = ""

Else
txtUserName.Text = vbNullString
End If


OK = False
miCount = 0
End Sub



Private Sub cmdCancel_Click()
OK = False
Me.Hide
End Sub


Private Sub cmdOK_Click()
Dim txtSQL As String
Dim mrc As ADODB.Recordset
Dim MsgText As String
'ToDo: create test for correct password
'check for correct password

UserName = ""
If Trim(txtUserName.Text = "") Then
MsgBox "没有这个用户,请重新输入用户名!", vbOKOnly + vbExclamation, "警告"
txtUserName.SetFocus
Else
txtSQL = "select * from user_Info where user_ID = '" & txtUserName.Text & "'"
Set mrc = ExecuteSQL(txtSQL, MsgText)
If mrc.EOF = True Then
MsgBox "没有这个用户,请重新输入用户名!", vbOKOnly + vbExclamation, "警告"
txtUserName.SetFocus
Else
If Trim(mrc.Fields(1)) = Trim(txtPassword.Text) Then
OK = True
mrc.Close
Me.Hide
UserName = Trim(txtUserName.Text)
Else
MsgBox "输入密码不正确,请重新输入!", vbOKOnly + vbExclamation, "警告"
txtPassword.SetFocus
txtPassword.Text = ""
End If
End If
End If

错误提示:
对象变量或with块变量未设置
If mrc.EOF = True Then
行出错
如何解决,谢谢!!!~~~
...全文
304 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
SoHo_Andy 2004-01-02
  • 打赏
  • 举报
回复
'几种数据库连接方式
Public Sub ConnectionStringX()

Dim cnn1 As ADODB.Connection
Dim cnn2 As ADODB.Connection
Dim cnn3 As ADODB.Connection
Dim cnn4 As ADODB.Connection

' 不使用数据源名 (DSN) 打开连接。
Set cnn1 = New ADODB.Connection
cnn1.ConnectionString = "driver={SQL Server};" & _
"server=bigsmile;uid=sa;pwd=pwd;database=pubs"
cnn1.ConnectionTimeout = 30
cnn1.Open

' 使用 DSN 和 ODBC 标记打开连接。
Set cnn2 = New ADODB.Connection
cnn2.ConnectionString = "DSN=Pubs;UID=sa;PWD=pwd;"
cnn2.Open

' 使用 DSN 和 OLE DB 标记打开连接。
Set cnn3 = New ADODB.Connection
cnn3.ConnectionString = "Data Source=Pubs;User ID=sa;Password=pwd;"
cnn3.Open

' 使用 DSN 和单个参数而非连接字符串打开连接。
Set cnn4 = New ADODB.Connection
cnn4.Open "Pubs", "sa", "pwd"

' 显示连接的状态。
MsgBox "cnn1 state: " & GetState(cnn1.State) & vbCr & _
"cnn2 state: " & GetState(cnn2.State) & vbCr & _
"cnn3 state: " & GetState(cnn3.State) & vbCr & _
"cnn4 state: " & GetState(cnn4.State)

cnn4.Close
cnn3.Close
cnn2.Close
cnn1.Close

End Sub
Public Function GetState(intState As Integer) As String

Select Case intState
Case adStateClosed
GetState = "adStateClosed"
Case adStateOpen
GetState = "adStateOpen"
End Select

End Function
qiucheng 2004-01-02
  • 打赏
  • 举报
回复
是sql server不是 access的 如果是access我就知道 使用 相对路径设置数据库了但是没办法
leemeimei1980 2004-01-02
  • 打赏
  • 举报
回复
要加一句关键的:rst.CursorLocation = adUseClient
SoHo_Andy 2004-01-02
  • 打赏
  • 举报
回复
不用dsn吧,你的dsn连的是什么数据库啊
mdb么

如果是mdb就直接即可
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source= C:\db2.mdb"
qiucheng 2004-01-02
  • 打赏
  • 举报
回复
studentinfo.dsn是建的文件dsn,没问题,
那么怎么改呢???
Ejnstein 2004-01-02
  • 打赏
  • 举报
回复
if not cnn is nothing then
.
.
.
end if
SoHo_Andy 2004-01-02
  • 打赏
  • 举报
回复
你这问题以前回答过吧
ConnectString = "FileDSN=studentinfo.dsn;UID=sa;PWD="
你的机子上建了这个dsn么

如果你不用错误捕捉,你就知道错误不在你说的
对象变量或with块变量未设置???? 的位置了

Set cnn = New ADODB.Connection
cnn.Open ConnectString

这里程序就出错了
qiucheng 2004-01-02
  • 打赏
  • 举报
回复
这是在模板里定义的,刚才太急了:
Public fMainForm As frmMain
Public UserName As String


Sub Main()
Dim fLogin As New frmLogin
fLogin.Show vbModal
If Not fLogin.OK Then
'Login Failed so exit app
End
End If
Unload fLogin


Set fMainForm = New frmMain
fMainForm.Show
End Sub
Public Function ConnectString() _
As String
'returns a DB ConnectString
ConnectString = "FileDSN=studentinfo.dsn;UID=sa;PWD="
End Function
Public Function ExecuteSQL(ByVal SQL _
As String, MsgString As String) _
As ADODB.Recordset
'executes SQL and returns Recordset
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim sTokens() As String

On Error GoTo ExecuteSQL_Error

sTokens = Split(SQL)
Set cnn = New ADODB.Connection
cnn.Open ConnectString
If InStr("INSERT,DELETE,UPDATE", _
UCase$(sTokens(0))) Then
cnn.Execute SQL
MsgString = sTokens(0) & _
" query successful"
Else
Set rst = New ADODB.Recordset
rst.Open Trim$(SQL), cnn, _
adOpenKeyset, _
adLockOptimistic
'rst.MoveLast 'get RecordCount
Set ExecuteSQL = rst
MsgString = "查询到" & rst.RecordCount & _
" 条记录 "
End If
ExecuteSQL_Exit:
Set rst = Nothing
Set cnn = Nothing
Exit Function

ExecuteSQL_Error:
MsgString = "查询错误: " & _
Err.Description
Resume ExecuteSQL_Exit
End Function

Public Function Testtxt(txt As String) As Boolean
If Trim(txt) = "" Then
Testtxt = False
Else
Testtxt = True
End If
End Function

wsd309 2004-01-02
  • 打赏
  • 举报
回复
ExecuteSQL没有用过
SoHo_Andy 2004-01-02
  • 打赏
  • 举报
回复
ExecuteSQL 函数中的全局连接对象没有初始化

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧