Office中国论坛/Access中国论坛

标题: 求教:sql查询的数据源怎样显示到子窗体? [打印本页]

作者: 8521976    时间: 2011-8-20 21:12
标题: 求教:sql查询的数据源怎样显示到子窗体?
我用下面这句怎么处理不了啊!
Dim rs As New ADODB.Recordset
Dim ssSql As String
ssSql = "Select id,货品名称,货品代号,货品颜色,货品尺码,进货数量,进货价格,进货日期,备注 from 进货明细 where 货品名称='裤子'"
Set rs = conn.Execute(ssSql)
Me.进货数据.Form.RecordSource = rs

总提示类型不匹配。哪位大哥指导一下啊!
作者: roych    时间: 2011-8-21 00:15
数据源是字符串,而不是记录集(这个可以参考窗体设计模式下的数据源)。简化后的代码如下:
  1. Dim ssSql As String
  2. ssSql = "Select id,货品名称,货品代号,货品颜色,货品尺码,进货数量,进货价格,进货日期,备注 from 进货明细 where 货品名称='裤子'"
  3. Me.进货数据.Form.RecordSource = ssSql
复制代码

作者: 鱼儿游游    时间: 2011-8-21 00:22
Dim rs As New ADODB.Recordset
Dim ssSql As String
ssSql = "Select id,货品名称,货品代号,货品颜色,货品尺码,进货数量,进货价格,进货日期,备注 from 进货明细 where 货品名称='裤子'"
Set rs = conn.Execute(ssSql)
Me.进货数据.Form.Recordset = rs
作者: 鱼儿游游    时间: 2011-8-21 00:23
Dim rs As New ADODB.Recordset
Dim ssSql As String
ssSql = "Select id,货品名称,货品代号,货品颜色,货品尺码,进货数量,进货价格,进货日期,备注 from 进货明细 where 货品名称='裤子'"
Set rs = conn.Execute(ssSql)
Me.进货数据.Form.Recordset = rs
作者: zhuyiwen    时间: 2011-8-21 01:38
我用下面这句怎么处理不了啊!
Dim rs As New ADODB.Recordset
Dim ssSql As String
ssSql = "Select id,货品名称,货品代号,货品颜色,货品尺码,进货数量,进货价格,进货日期,备注 from 进货明细 where 货品名称='裤子'"
Set rs = conn.Execute(ssSql)
Me.进货数据.Form.RecordSource = rs

总提示类型不匹配。哪位大哥指导一下啊!

我估计你是用ADO的记录集作为子窗体的数据源,如果是只读,你应该这样写:
  1. Dim rs As ADODB.Recordset
  2. Dim ssSql As String
  3. ssSql = "Select id,货品名称,货品代号,货品颜色,货品尺码,进货数量,进货价格,进货日期,备注 from 进货明细 where 货品名称='裤子'"
  4. Set rs = conn.Execute(ssSql)
  5. Set Me.进货数据.Form.Recordset = rs
复制代码
如果是要可以修改和删除,你应该这样写:
  1. Dim rs As New ADODB.Recordset
  2. Dim ssSql As String
  3. ssSql = "Select id,货品名称,货品代号,货品颜色,货品尺码,进货数量,进货价格,进货日期,备注 from 进货明细 where 货品名称='裤子'"
  4. rs.Open ssSql, conn, 1, 3
  5. Set Me.进货数据.Form.Recordset = rs
复制代码

作者: 8521976    时间: 2011-8-21 06:54
太好了!谢谢版主和管理员!
作者: 8521976    时间: 2011-8-21 13:47
帮忙看看怎么没法运行啊!
我想达到的目的是点击主窗体中的录入按钮,在进货数据子窗口显示我查询的ado记录值!
作者: roych    时间: 2011-8-21 18:22
你引用了外部链接,不能关闭数据链接。修改后代码如下:
  1. Dim conn As New adodb.Connection  '数据库连接
  2. Dim sSql As String  'sql字符串
  3. conn.ConnectionString = "provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source = " & CurrentProject.Path & "" & "进销货数据库.accdb" & ";Jet OLEDB:Database"
  4. conn.Open
  5. If conn.State = adStateOpen Then
  6. Dim rs As New adodb.Recordset
  7. Dim ssSql As String
  8. ssSql = "Select id,货品名称,货品代号,货品颜色,货品尺码,进货数量,进货价格,进货日期,备注 from 进货明细 where 货品名称='裤子'"
  9. rs.Open ssSql, conn, adOpenStatic, adLockReadOnly
  10. Set Me.进货数据.Form.Recordset = rs
  11. Me.进货数据.Form.Recalc
  12. Else
  13. MsgBox ("no")
  14. End If
复制代码
不过,个人还是觉得复杂了些,以下较简单的代码,供参考比较:
  1. Dim db As dao.Database
  2. Dim rst As dao.Recordset
  3. Set db = dao.OpenDatabase(CurrentProject.Path & "\进销货数据库.accdb")
  4. Set rst = db.OpenRecordset("Select id,货品名称,货品代号,货品颜色,货品尺码,进货数量,进货价格,进货日期,备注 from 进货明细 where 货品名称='裤子'",dbOpenSnapshot)
  5. '其实这个快照打开参数是可以省去的,不过想做得跟你的原件一样,就加上去了。
  6. Set Me.进货数据.Form.Recordset = rst
  7. Me.进货数据.Form.Recalc
复制代码

作者: 8521976    时间: 2011-8-21 19:01
辛苦版主了!!
作者: 8521976    时间: 2011-8-21 19:12
经测试完美可用!!
作者: 8521976    时间: 2011-8-21 19:12
经测试完美可用!!
作者: roych    时间: 2011-8-21 20:27
本帖最后由 roych 于 2011-8-21 20:34 编辑
8521976 发表于 2011-8-21 19:12
经测试完美可用!!

所有贴上去的代码,一般都经过简单测试过的。要是不能用,也太不负责任了吧,咋说俺也是斑竹唦。
其实,用链接表来做会更好些,否则每次都得在窗体加载事件时连接数据源。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3