关于VB对SQL的一对多查询

表:作品信息表(作品名称,作者,……)在VB中建立查询所有作者为LoginUserName的作品(LoginUserName为前面输入用户名)模块中连接数据库以及函数Pu... 表:作品信息表(作品名称,作者,……)
在VB中建立查询 所有作者为LoginUserName的作品(LoginUserName为前面输入用户名)
模块中连接数据库 以及函数
Public txtSQL As String 'SQL查询语句
Public msg_Sql As String 'SQL查询返回信息,返回结果:记录集(Recordset)
Public Function ExecuteSQL(ByVal SQL As String, MsgString As String) As ADODB.Recordset
'传递参数:SQL 传递查询语句,MsgString传递查询信息,返回执行结果记录集 Recordset
Dim cnn As ADODB.Connection '定义连接
Dim rst As ADODB.Recordset '定义返回结果:记录集
Dim sTokens() As String '定义字符串

On Error GoTo ExecuteSQL_Error
'
'split函数分段,以指定字符为分隔符,分离出若干个子字符串,并保存在一个下标从0开始的一维数组中
'其格式为:split (字符串,分隔符)
'dim a="1,2,3,4,5,6,45,656465,564,45"
'Dim b() As Integer
'b = Split(a, ",")
'那么b(0) = 1
' b(1) = 2
sTokens = Split(SQL) '作用:去掉空格

Set cnn = New ADODB.Connection
cnn.Open ConnectString
If InStr("INSERT,DELETE,UPDATE", UCase$(sTokens(0))) Then
cnn.BeginTrans
cnn.Execute SQL
cnn.CommitTrans
MsgString = sTokens(0) & " 查询成功 "
Else
Set rst = New ADODB.Recordset
rst.Open Trim$(SQL), cnn, adOpenKeyset, adLockOptimistic
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

下面是查询
txtSQL = "SELECT * From 作品信息表 WHERE 作者 = '" & LoginUserName & "'"
Set objRs = ExecuteSQL(txtSQL, msg_Sql )
Txt代表作品.Text = objRs("代表作品")

问题来了:
我查询出来的结果只有1个,单实际上SQL里面有5条信息
打个比方 作者为 唐家三少 的作品 只能查出一个 “冰火魔厨” 但实际上还有4部小说没在Txt代表作品.Text 中显示

求问题原因以及解决方法~
展开
 我来答
老魇
2011-11-30 · TA获得超过2139个赞
知道小有建树答主
回答量:768
采纳率:0%
帮助的人:341万
展开全部
你真行,一个一对多查询搞出那么一大堆东西。查询语句的结果是一个记录集合,直接读取objRs(“代表作品”)仅仅是一个记录(第一个)中的一个“字段”,要想获取其它的需要移动记录指针,也就是要执行记录对象中的next方法。
你可以将记录集(对象)看成是一个(二维)数组,只不过对象中有一个默认下标变量,相当于第一维下标,字段名则是第二维下标。引用记录集中一个具体值时,不需要指明第一下标,由记录指针自动定位。
追问
方法我知道,但是一直没实现,运行总是出错,能不能给段代码?万分感谢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
damyzl
2011-11-30 · TA获得超过1586个赞
知道大有可为答主
回答量:1475
采纳率:74%
帮助的人:906万
展开全部
单个文本框无法显示多条记录(当然你把多条信息写成一行的话也可以),要显示数目不定的记录,用网格控件比较完美(DataGrid、MSFlexGrid),当然也可以显示在多行文本框(MultiLine=True)或者列表框里。
获取记录集所有数据需要一个循环:
...
Set objRs = ExecuteSQL(txtSQL, msg_Sql )
do until objRs.eof
str1=str1 & vbcrlf & objRs("代表作品")
objRs.MoveNext
loop
Text1.Text=str1'这里Text1.MultiLine=True
追问
解决了 万分感谢
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式