注册 登录
编程论坛 VB6论坛

Do While Not mrc.EO语句F错误不知如何修改?????????

j11b 发布于 2007-09-16 14:33, 2468 次点击

程序段如下:本人菜鸟程序调了好长时间了,现在急用啊!!在线等啊
Private Sub cmdexit_Click()
Unload Me
End Sub

Private Sub cmdinquire_Click()
Dim txtsql As String
Dim msgtext As String
Dim dd(4) As Boolean
Dim mrc As ADODB.Recordset
'组合sql语句
txtsql = "select * from worker_info where"

'判断是否选择胸卡号查询方式
If Check1(0).Value Then
If Trim(txtid.Text) = "" Then
smeg = "胸卡号不能为空!"
MsgBox smeg, vbOKOnly + vbExclamation, "警告"
txtid.SetFocus
Exit Sub
Else

'判断输入胸卡号是否为数字
If Not IsNumeric(Trim(txtid.Text)) Then
MsgBox "胸卡号请输入数字!", vbOKOnly + vbExclamation, "警告"
Exit Sub
txtid.SetFocus
End If

dd(0) = True
'组合查询语句
txtsql = txtsql & "id='" & Trim(txtid.Text) & "'"
End If
End If

'判断是否选择姓名查询方式
If Check1(1).Value Then
If Trim(txtname.Text) = "" Then
smeg = "姓名不能为空!"
MsgBox smeg, vbOKOnly + vbExclamation, "警告"
txtname.SetFocus
Exit Sub
Else

dd(1) = True
If dd(0) Then
'组合查询语句
txtsql = txtsql & "and name='" & txtname.Text & "'"
Else
txtsql = txtsql & "name='" & txtname.Text & "'"
End If
End If
End If

'判断是否选择工段查询方式
If Check1(2).Value Then
If Trim(txtgongduan.Text) = "" Then
smeg = "工段不能为空!"
MsgBox smeg, vbOKOnly + vbExclamation, "警告"
txtgongduan.SetFocus
Exit Sub
Else
dd(2) = True
If dd(0) Or dd(1) Then
txtsql = txtsql & "and gongduan='" & txtgongduan.Text & "'"
Else
txtsql = txtsql & "gongduan='" & txtgongduan.Text & "'"
End If
End If
End If

'判断是否设置查询方式
If Not (dd(0) Or dd(1) Or dd(2) Or dd(3)) Then
MsgBox "请选择查询方式!", vbOKOnly + vbExclamation, "警告"
Exit Sub
End If
'查询所有满足条件的内容
txtsql = txtsql & "order by id'"
Set mrc = executesql(txtsql, msgtext)
With myflexgrid1
.Rows = 2
.CellAlignment = 4
.TextMatrix(1, 0) = "姓名"
.TextMatrix(1, 1) = "胸卡号"
.TextMatrix(1, 2) = "性别"
.TextMatrix(1, 3) = "出生日期"
.TextMatrix(1, 4) = "工段"
.TextMatrix(1, 5) = "职务"
.TextMatrix(1, 6) = "政治面貌"
.TextMatrix(1, 7) = "文化程度"

Do While Not mrc.EOF 报错'91'对象变量或with块变量未设置
.Rows = Rows + 1
.CellAlignment = 4
.TextMatrix(.Rows - 1, 0) = mrc.Fields(0)
.TextMatrix(.Rows - 1, 1) = mrc.Fields(1)
.TextMatrix(.Rows - 1, 2) = mrc.Fields(2)
.TextMatrix(.Rows - 1, 3) = Format(mrc.Fields(3), "yyyy-mm-dd")
.TextMatrix(.Rows - 1, 4) = mrc.Fields(4)
.TextMatrix(.Rows - 1, 5) = mrc.Fields(5)
.TextMatrix(.Rows - 1, 6) = mrc.Fields(6)
.TextMatrix(.Rows - 1, 7) = mrc.Fields(7)

mrc.MoveNext
Loop
End With

mrc.Close

End Sub

21 回复
#2
multiple19022007-09-16 16:02
能否给我一个可以在我这里执行的代码?
#3
j11b2007-09-16 16:12
执行的代码???
我是自学的,不是太懂.
#4
multiple19022007-09-16 16:14
以下是引用j11b在2007-9-16 16:12:27的发言:
执行的代码???
我是自学的,不是太懂.

自学最好也要系统地学习,起码你要能看懂代码。

就用你给的一大段代码来说,你应当发现问题出在mrc上。从出错的地方向上看,Set mrc=executesql(.....),mrc即使之前有值也在这里被executesql的结果所替换了,所以之前的代码一概无用,而最重要的代码就是executesql的函数体。executesql的函数体你也不给出,你让我怎么下结论呢?

#5
multiple19022007-09-16 16:15
请你在执行sql之前打出sql语句的内容,我看着貌似有点问题的样子

[CODE]txtsql = txtsql & "order by id'"[/CODE]
id后面的单引号起什么作用呢?
#6
j11b2007-09-16 16:19
我看了程序里面没有"'",为什么会显示出来,我也不是很清楚??
#7
multiple19022007-09-16 16:21
废话少说,问题解决了没有?
#8
j11b2007-09-16 16:22
txtsql = "select * from worker_info where"

这句不是查询语句吗?
我现在有点蒙了!
#9
j11b2007-09-16 16:23
没有
#10
multiple19022007-09-16 16:25
以下是引用j11b在2007-9-16 16:22:14的发言:
txtsql = "select * from worker_info where"

这句不是查询语句吗?
我现在有点蒙了!

1 把executesql函数的代码放上来。低级错误就不帮你检查了。
2 叫你在执行sql语句之前把生成的sql语句打出来,检查sql语句是否正确

#11
j11b2007-09-16 16:28

是不是没连上数据库啊?
我看有的说增加:  set mrc = new adodb.recordset
mrc.open
这个我试过了,不好用,还是报同样的错误. 

#12
multiple19022007-09-16 16:34
[QUOTE]1 把executesql函数的代码放上来。低级错误就不帮你检查了。
2 叫你在执行sql语句之前把生成的sql语句打出来,检查sql语句是否正确[/QUOTE]
假使你坚决不信,那也就算了。
这个帖子你看一下
https://bbs.bc-cn.net/viewthread.php?tid=170379
#13
j11b2007-09-16 16:49
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

这是模块里的一段代码,麻烦你帮我看看,
至于你让我看的那个帖子,我看过了,我并不是等现成的,我没有那个意思.
#14
multiple19022007-09-16 16:54
这也就是说,如果查询出错,就会跳转到ExecuteSQL_Error处,设置MsgString为出错信息,然后跳转到ExecuteSQL_Exit处,返回一个空的引用

SQL语句呢?

新手少用容错,关键是你设置了错误信息之后自己又不看,所以出了错你也不知道,纯属自找麻烦。
#15
j11b2007-09-16 17:02
Public Function ConnectString() _
As String

ConnectString = "FileDSN=studentinfo.dsn;UID=sa;PWD="
End Function

理论知识不是很扎实,你就告诉我得了,我现在看书来不及了.
我破坏了论坛的创建初衷了吧!
#16
multiple19022007-09-16 17:04
以下是引用j11b在2007-9-16 17:02:35的发言:
Public Function ConnectString() _
As String

ConnectString = "FileDSN=studentinfo.dsn;UID=sa;PWD="
End Function

理论知识不是很扎实,你就告诉我得了,我现在看书来不及了.
我破坏了论坛的创建初衷了吧!

没有。
但你在没有理解代码的时候把一大段代码发上来让帮你解决问题的人很郁闷。

没想到你ConnectString这么难看……用常量代替算了……建议你好好看书。不愿意看书还有条路,花钱让别人帮你干,这样大家都开心。

有些人就是懒得看书,我很鄙视。

要你发的是SQL语句,而且是运行时的SQL语句,就是最终进入数据库查找数据的那个Sql语句,你发的是个连接字符串……

#17
j11b2007-09-16 17:09

我自己看书吧,我是不会,你说的那些问题我现在理解不了.谢谢你!!!

#18
缘吇弹2007-09-16 17:32
以下是引用multiple1902在2007-9-16 16:21:06的发言:
废话少说,问题解决了没有?

哈哈,有个性,我喜欢

#19
缘吇弹2007-09-16 17:33
以下是引用multiple1902在2007-9-16 16:34:58的发言:
1 把executesql函数的代码放上来。低级错误就不帮你检查了。
2 叫你在执行sql语句之前把生成的sql语句打出来,检查sql语句是否正确

假使你坚决不信,那也就算了。
这个帖子你看一下
https://bbs.bc-cn.net/viewthread.php?tid=170379

那贴归纳得很不错!

#20
multiple19022007-09-16 17:34
谢谢夸奖……
#21
a2733694572007-09-16 22:05
txtsql = "select * from worker_info"
#22
奈何naihe2013-07-01 00:12
到现在我也没有解决这个问题,
请问作者当年事如何做出来了?
1