Office中国论坛/Access中国论坛

标题: 请各位看看下述功能应怎么实现(access2010) [打印本页]

作者: pascal331    时间: 2011-12-10 16:21
标题: 请各位看看下述功能应怎么实现(access2010)
本帖最后由 pascal331 于 2011-12-10 21:57 编辑

[attach]47602[/attach][attach]47601[/attach]

我用的是access2010


作者: Henry D. Sy    时间: 2011-12-10 16:38
左面那个空件是列表框吗?
列表框可以多选的。
我是03版本,打不开你的库!
作者: pascal331    时间: 2011-12-10 16:39
Henry D. Sy 发表于 2011-12-10 16:38
左面那个空件是列表框吗?
列表框可以多选的。
我是03版本,打不开你的库!

是列表框,但是不能多选啊
作者: Henry D. Sy    时间: 2011-12-10 16:41
应该可以,在属性里设!
作者: Henry D. Sy    时间: 2011-12-10 16:42
可以使用窗体属性表、宏或 Visual Basic 来设置 MultiSelect 属性。
该属性只能在窗体“设计”视图中进行设计。

使用 ListIndex 属性可以返回所选项目的索引编号。当 MultiSelect 属性设为“展开的”或“简单”时,可以使用列表框的 Selected 属性或 ItemsSelected 集合来确定所选的项目。此外,当 MultiSelect 属性设为“展开的”或“简单”时,列表框控件的值将始终为 Null。

如果 MultiSelect 属性设为“展开的”,重新查询列表框将会清除用户的所有选择。


作者: pascal331    时间: 2011-12-10 16:43
Henry D. Sy 发表于 2011-12-10 16:38
左面那个空件是列表框吗?
列表框可以多选的。
我是03版本,打不开你的库!
  1. Option Compare Database
  2. Option Explicit

  3. Private Sub Form_Load()
  4. Dim strT As String
  5. Dim vItem As Variant
  6. For Each vItem In Me.地区.ItemsSelected
  7. strT = strT & vItem & ","
  8. Next
  9.     Call 地区_AfterUpdate
  10. End Sub

  11. Private Sub 关闭_Click()
  12.     DoCmd.Close
  13. End Sub

  14. Private Sub 地区_AfterUpdate()
  15.     If 地区 = "(全部)" Then
  16.         dzj.Form.Filter = ""
  17.         dzj.Form.FilterOn = False
  18.     Else
  19.         dzj.Form.Filter = "地区='" & 地区 & "'"
  20.         dzj.Form.FilterOn = True
  21.     End If
  22. End Sub
复制代码
会不会是代码有问题?

作者: pascal331    时间: 2011-12-10 16:48
Henry D. Sy 发表于 2011-12-10 16:42
可以使用窗体属性表、宏或 Visual Basic 来设置 MultiSelect 属性。
该属性只能在窗体“设计”视图中进行 ...

谢谢,看到了。现在能多选了,但是子窗体无法显示数据了
作者: Henry D. Sy    时间: 2011-12-10 16:56
试试把加载事件去掉
然后
  1. Private Sub 地区_AfterUpdate()
  2.     Dim strT As String
  3.     Dim vItem As Variant
  4.     Dim sSQL As String
  5.     If 地区 = "(全部)" Then
  6.         sSQL = "select * from 你的表名"
  7.     Else
  8.         For Each vItem In Me.地区.ItemsSelected
  9.             strT = strT & "'" & vItem & "',"
  10.         Next
  11.         sSQL = "select * from 你的表名 where 地区 Not in (" & strT & ")"
  12.     End If
  13.     Me.子窗体名.Form.RecordSource = sSQL
  14. End Sub
复制代码

作者: Henry D. Sy    时间: 2011-12-10 16:57
搞错了我,没有not
作者: Henry D. Sy    时间: 2011-12-10 17:02
其实也不需要"全部",不选就是全部!
作者: Henry D. Sy    时间: 2011-12-10 17:03
还要避免null值错误!
作者: pascal331    时间: 2011-12-10 17:32
  1. Private Sub 地区_AfterUpdate()
  2.     Dim strT As String

  3.     Dim vItem As Variant

  4.     Dim sSQL As String

  5.     If 地区 = "" Then
  6.    
  7.         sSQL = "select * from dzj"

  8.     Else

  9.         For Each vItem In Me.地区.ItemsSelected

  10.             strT = strT & "'" & vItem & "',"

  11.         Next

  12.         sSQL = "select * from dzj where 地区 in (" & strT & ")"
  13.     If strT = "" Then
  14.     sSQL = "select * from dzj"
  15.    
  16.     End If
  17.     End If
  18.     Me.dzj.Form.RecordSource = sSQL

  19. End Sub
复制代码
还是无法筛选啊?
求解

作者: pascal331    时间: 2011-12-10 17:34
本帖最后由 pascal331 于 2011-12-10 17:35 编辑
Henry D. Sy 发表于 2011-12-10 17:03
还要避免null值错误!
  1. Private Sub 地区_AfterUpdate()
  2.     Dim strT As String

  3.     Dim vItem As Variant

  4.     Dim sSQL As String

  5.     If 地区 = "" Then
  6.    
  7.         sSQL = "select * from dzj"

  8.     Else

  9.         For Each vItem In Me.地区.ItemsSelected

  10.             strT = strT & "'" & vItem & "',"

  11.         Next

  12.         sSQL = "select * from dzj where 地区 in (" & strT & ")"
  13.     If strT = "" Then
  14.     sSQL = "select * from dzj"
  15.    
  16.     End If
  17.     End If
  18.     Me.dzj.Form.RecordSource = sSQL

  19. End Sub
复制代码
还是无法筛选啊?只是在不选的时候能全显
求解

作者: Henry D. Sy    时间: 2011-12-10 17:42
strT = strT & "'" & Me.地区ItemData(vItem) & "',"


作者: Henry D. Sy    时间: 2011-12-10 17:52
本帖最后由 Henry D. Sy 于 2011-12-10 18:01 编辑

把全部去掉:
  1. Private Sub 地区_AfterUpdate()
  2.     Dim strT As String
  3.     Dim vItem As Variant
  4.     Dim sSQL As String
  5.     For Each vItem In Me.地区.ItemsSelected
  6.         strT = strT & "'" & Me.地区.ItemData(vItem) & "',"
  7.     Next
  8.     If strT = "" Then
  9.         MsgBox "请选择!"
  10.         Exit Sub
  11.     End If
  12.     sSQL = "select * from dzj where 地区 in (" & strT & ")"
  13.     Me.dzj.Form.RecordSource = sSQL
  14. End Sub
复制代码

作者: pascal331    时间: 2011-12-10 20:10
Henry D. Sy 发表于 2011-12-10 17:52
把全部去掉:

非常感谢,功能已实现。我现在慢慢分析学习下您给的代码
谢谢!!
作者: pascal331    时间: 2011-12-10 23:10
本帖最后由 pascal331 于 2011-12-11 09:44 编辑

[attach]47610[/attach]

Henry D. Sy 发表于 2011-12-10 17:52
把全部去掉:


万分感激您对我的耐心帮助,这使我在access的学习中增加信心
在分析您给的代码后我初步了解了vb sql和recordsource的用法并实际运用到了自制程序的其它窗体中,去除了多余的两个查询与子窗体。[attach]47606[/attach]
作者: bbpst    时间: 2011-12-11 08:53
建议楼主把改好后的文件转换到低版本的,然后下载一下学习学习{:soso_e181:}
作者: bbpst    时间: 2011-12-11 09:51
谢谢楼主分享
作者: Henry D. Sy    时间: 2011-12-11 13:47
pascal331 发表于 2011-12-10 23:10
万分感激您对我的耐心帮助,这使我在access的学习中增加信心
在分析您给的代码后我初步了解了vb s ...

简单的方法就是用分组报表,然后分组统计!
还可以用主子报表,但我打不开你的库,不知道库的具体情况,也就不明白如何连接主子表。
也许需要重新生成连接字段!
作者: pascal331    时间: 2011-12-11 13:49
Henry D. Sy 发表于 2011-12-11 13:47
简单的方法就是用分组报表,然后分组统计!
还可以用主子报表,但我打不开你的库,不知道库的具体情况, ...

17楼有我转成2003版的,劳烦您给看看
作者: Henry D. Sy    时间: 2011-12-11 14:51
  1. Option Compare Database
  2. Option Explicit
  3. Dim strT As String

  4. Private Sub 打印_Click()
  5.     Dim Criteria As String
  6.     If Len(strT) <> 0 Then
  7.         Criteria = "地区 in (" & strT & ")"
  8.     Else
  9.         Criteria = ""
  10.     End If
  11.     DoCmd.OpenReport "jiedai", acViewPreview, , Criteria
  12. End Sub

  13. Private Sub 关闭_Click()
  14.     DoCmd.Close
  15. End Sub

  16. Private Sub 地区_AfterUpdate()

  17.     Dim vItem As Variant
  18.     Dim sSQL As String
  19.     strT = ""
  20.     For Each vItem In Me.地区.ItemsSelected
  21.         strT = strT & "'" & Me.地区.ItemData(vItem) & "',"
  22.     Next
  23.     If strT = "" Then
  24.         sSQL = "select * from dzj where 地区"
  25.     Else
  26.         sSQL = "select * from dzj where 地区 in (" & strT & ")"
  27.     End If
  28.     Me.dzj.Form.RecordSource = sSQL
  29. End Sub
复制代码

作者: Henry D. Sy    时间: 2011-12-11 15:00
[attach]47612[/attach]

附件老是传不上,晕!
作者: pascal331    时间: 2011-12-11 16:05
Henry D. Sy 发表于 2011-12-11 15:00
附件老是传不上,晕!

刚才正在设计报表,没看见您的消息。
话说看了你做的报表,我打算删了我做的
作者: bpchan    时间: 2011-12-12 12:02
学习!
作者: pascal331    时间: 2011-12-13 01:32
Henry D. Sy 发表于 2011-12-11 15:00
附件老是传不上,晕!

请问要怎样设置才能使代码运行到"请输入清账收回金额"时弹出输入该值的对话框?
  1. DoCmd.RunSQL "insert into 清帐记录 ( 姓名, 编号, 凭证编号, 摘要, 收回金额, 清账日期 )" _
  2. & "select jiedai.姓名, jiedai.编号, '该记录为客户结账记录' as 凭证编号," _
  3. & "'如有礼让金则收回金额将≠应收余额' as 摘要, '" & 请输入清账收回金额 & "' as 收回金额, now() as 清账日期 " _
  4. & "from jiedai where 姓名 like'" & Combo0.Value & "'"
复制代码

作者: Henry D. Sy    时间: 2011-12-13 11:12
把例子传上来吧
作者: pascal331    时间: 2011-12-13 12:11
Henry D. Sy 发表于 2011-12-13 11:12
把例子传上来吧

[attach]47622[/attach]
作者: Henry D. Sy    时间: 2011-12-13 12:18
说说,具体要求什么,想得到什么样的结果!
请描述清楚点!
作者: pascal331    时间: 2011-12-13 12:29
Henry D. Sy 发表于 2011-12-13 12:18
说说,具体要求什么,想得到什么样的结果!
请描述清楚点!

如下图
[attach]47624[/attach]
作者: pascal331    时间: 2011-12-13 12:42
为什么将代码改成
  1. DoCmd.RunSQL "insert into 清帐记录 ( 姓名, 编号, 凭证编号, 摘要, 收回金额, 清账日期 )" _

  2. & "select jiedai.姓名, jiedai.编号, '该记录为客户结账记录' as 凭证编号," _

  3. & "'如有礼让金则收回金额将≠应收余额' as 摘要,  value.请输入清账收回金额 as 收回金额, now() as 清账日期 " _

  4. & "from jiedai where 姓名 like'" & Combo0.Value & "'"
复制代码
就可以?和我要的效果一样
作者: pascal331    时间: 2011-12-13 12:45
本帖最后由 pascal331 于 2011-12-13 12:48 编辑
Henry D. Sy 发表于 2011-12-13 12:18
说说,具体要求什么,想得到什么样的结果!
请描述清楚点!


为什么将代码改成
  1. DoCmd.RunSQL "insert into 清帐记录 ( 姓名, 编号, 凭证编号, 摘要, 收回金额, 清账日期 )" _

  2. & "select jiedai.姓名, jiedai.编号, '该记录为客户结账记录' as 凭证编号," _

  3. & "'如有礼让金则收回金额将≠应收余额' as 摘要,  value.请输入清账收回金额 as 收回金额, now() as 清账日期 " _

  4. & "from jiedai where 姓名 like'" & Combo0.Value & "'"
复制代码
就可以?我要的就是类似这种效果
作者: Henry D. Sy    时间: 2011-12-13 13:52
不是太明白你的意思,
"insert into 清帐记录 ( 姓名, 编号, 凭证编号, 摘要, 收回金额, 清账日期 )" _
             & "select jiedai.姓名, jiedai.编号, '该记录为客户结账记录' as 凭证编号," _
             & "'如有礼让金则收回金额将≠应收余额' as 摘要," & CCur(InputBox("请输入收回金额")) & " as 收回金额, #" & Date & "# as 清账日期 " & "from jiedai where 姓名 like '" & Combo0.Value & "'"
作者: pascal331    时间: 2011-12-13 17:16
Henry D. Sy 发表于 2011-12-13 13:52
不是太明白你的意思,
"insert into 清帐记录 ( 姓名, 编号, 凭证编号, 摘要, 收回金额, 清账日期 )" _
  ...

谢谢了,解决了




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