设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 4666|回复: 13
打印 上一主题 下一主题

[窗体] 【求助】请教要如何优化代码:数据表窗体输入产品后 单价自动填充客户最近购买价格

[复制链接]
跳转到指定楼层
1#
发表于 2013-2-22 11:45:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 5574916 于 2013-2-24 15:48 编辑



这个是已经实现效果后的例子,就是如果数据多的话,输入后会有停顿现象,不知道要怎样写代码才能解决这个问题,麻烦哪位大侠有空的话帮忙修改下代码!谢谢!




内有表:[产品表]  [订单]  [订单明细]  [客户表]
查询: [历史价格查询]

【现已实现功能】 例如:新建一张单,主窗体 输入客户名称 小A 》 子窗体 输入产品1 》 单价会从[历史价格查询]中 根据(产品名称=" & "'" & Me.产品名称 & "' And 客户名称=" & "'" & Forms![主窗体]![客户名称] & "'")  自动填充。


【意图】需要再 已有的 客户名称条件,产品名称条件 基础上 再增添一个条件:筛选出订单ID最大的 那条单价记录,并且筛选出来的单价记录不为0

------------------【需要实现的最终效果】 示例:------------------
1、新建一张单
2、主窗体中 客户名称 输入  小A
3、子窗体中 产品名称 输入 产品1
单价 自动填充  111 即为正确
-----------------------------------------------------------------------------

找了很多资料都不知道该如何实现, 源文件已经上传,不知道我这样表述,大家能否明白,可否帮忙修改下代码呢?先谢谢各位了!{:soso_e154:}  




Private Sub 产品名称_AfterUpdate()
Dim StrTemp As String
Dim rs As New ADODB.Recordset
StrTemp = "Select * From 历史价格查询 Where 产品名称=" & "'" & Me.产品名称 & "' And 客户名称=" & "'" & Forms![主窗体]![客户名称] & "'"
rs.Open StrTemp, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
If rs.EOF = False Then
Me.单价 = rs("单价")
End If
End Sub

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2013-2-22 11:52:09 | 只看该作者
另外要如何实现,当自动填充单价后,如果 填充的单价 不等于 产品表中的单价 就更改当前单价字体颜色为 红色 呢
3#
发表于 2013-2-22 13:39:59 | 只看该作者
本帖最后由 roych 于 2013-2-22 14:41 编辑

用DLast试试看(应该不是DMax吧?)或者MoveLast,读取recordset的单价字段,再传给变量。
你的意图我看得不是很懂,所以就不改代码了。
4#
 楼主| 发表于 2013-2-22 17:08:17 | 只看该作者
本帖最后由 5574916 于 2013-2-22 21:47 编辑
roych 发表于 2013-2-22 13:39
用DLast试试看(应该不是DMax吧?)或者MoveLast,读取recordset的单价字段,再传给变量。
你的意图我看得 ...

谢谢版主的回复,我重新整理了下我想实现的意图:

【意图】需要再 已有的 客户名称条件,产品名称条件 基础上 再增添一个条件:筛选出订单ID最大的 那条单价记录,并且筛选出来的单价记录不为0

【需要实现的最终效果】 示例:
1、新建一张单
2、主窗体中 客户名称 输入  小A
3、子窗体中 产品名称 输入 产品1
单价 自动填充  111 即为正确

不知道我这样表述,大家能否明白,请教用DLast要如何实现这个功能呢?可否帮忙修改下代码呢?谢谢
[/table]
[tr][/tr]
[table]

5#
 楼主| 发表于 2013-2-22 23:01:33 | 只看该作者
本帖最后由 5574916 于 2013-2-23 11:48 编辑
roych 发表于 2013-2-22 13:39
用DLast试试看(应该不是DMax吧?)或者MoveLast,读取recordset的单价字段,再传给变量。
你的意图我看得 ...

问题解决了,我在
rs.Open StrTemp, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
If rs.EOF = False Then
的下一行加上 rs.movelast 就得出订单最大的那条记录了。
价格不为零的问题, 直接在查询表中 设置 条件不为0 就可以了。

大家如果有更好的方法还请多多指教 {:soso_e176:}[/table]
[table]

6#
 楼主| 发表于 2013-2-23 11:36:47 | 只看该作者
本帖最后由 5574916 于 2013-2-23 11:46 编辑
5574916 发表于 2013-2-22 23:01
问题解决了,我在
rs.Open StrTemp, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
If r ...

{:soso_e159:}用这种方法虽然可以实现我要的效果,但是输入后有时候会出现卡顿的现象。有大侠知道有什么更好的方法,或是要怎么优化呢!?
7#
 楼主| 发表于 2013-2-23 11:52:18 | 只看该作者
roych 发表于 2013-2-22 13:39
用DLast试试看(应该不是DMax吧?)或者MoveLast,读取recordset的单价字段,再传给变量。
你的意图我看得 ...

我用 MoveLast 这种方法虽然可以实现我要的效果,但是输入后有时候会出现卡顿的现象(数据多时)。请教大侠知道可以用什么方法优化呢?
8#
发表于 2013-2-23 14:36:25 | 只看该作者
创建另一个记录集,MoveLast后读取完相关信息,传递好变量后即关闭。
9#
 楼主| 发表于 2013-2-24 00:14:22 | 只看该作者
roych 发表于 2013-2-23 14:36
创建另一个记录集,MoveLast后读取完相关信息,传递好变量后即关闭。

具体代码要怎么写呢,我对access还不太了解,可否麻烦版主有空的时候帮忙修改下呢?
这个是已经实现效果后的例子,只差优化速度了{:soso_e154:}  

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
10#
发表于 2013-2-25 13:39:42 | 只看该作者
5574916 发表于 2013-2-24 00:14
具体代码要怎么写呢,我对access还不太了解,可否麻烦版主有空的时候帮忙修改下呢?
这个是已经实现效果 ...

速度上并不见得很糟糕啊。这是修改后的代码,供参考:
  1. Private Sub 产品名称_AfterUpdate()
  2. Dim StrTemp As String
  3. Dim rs As New ADODB.Recordset
  4. Dim LngPrice As Long
  5. StrTemp = "Select Last([单价])  From 历史价格查询 Where 产品名称=" & "'" & Me.产品名称 & "' And 客户名称=" & "'" & Forms![主窗体]![客户名称] & "'"
  6. rs.Open StrTemp, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
  7. 'rs.MoveLast
  8. LngPrice = rs(0)
  9. If rs.EOF = False Then

  10. Me.单价 = LngPrice

  11. End If
  12. '这两行用于关闭记录集和清空内存,视具体情况处理。
  13. rs.Close
  14. Set rs = Nothing
  15. End Sub
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-25 08:49 , Processed in 0.108473 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表