ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1911|回复: 11

[求助] 又蒙圈了,请老师们指点一下!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-5-29 11:37 | 显示全部楼层 |阅读模式
本帖最后由 danhanqing 于 2018-5-29 13:23 编辑

Private Sub 批量销单作业_Click()
   lvname = "ListView6"
   Dim Conn As adodb.Connection
   Set Conn = LinkDB
   Dim Rs As New adodb.Recordset
   For i = 1 To Me.Controls(lvname).ListItems.Count
   已付 = Me.Controls(lvname).ListItems(i).SubItems(9)
   单据编号 = Me.Controls(lvname).ListItems(i).SubItems(1)
   sql = "Update 财务结算总表 set 已付=已付 ,尚欠=0  where 单位名称='" & Me.Controls(页面名称 & "_" & "单位名称") & "' and 单据编号='" & 单据编号 & "'"
    Conn.Execute sql
    Next i
   Conn.Close
   Set Rs = Nothing: Set Conn = Nothing
   MsgBox "销单成功!"
End Sub
错误提示是:标准表达式中数据类型不匹配。
可我检查数据库中,已付、尚欠、单据编号 字段均为数值类型……
谢谢老师们点拨!


TA的精华主题

TA的得分主题

 楼主| 发表于 2018-5-29 13:24 | 显示全部楼层
本帖最后由 danhanqing 于 2018-5-29 13:25 编辑

刚测试,如果后面单据编号条件不加的话,执行是正常的。但我只想更新listview6中对应单据编号的记录

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-5-29 13:25 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-5-29 13:33 | 显示全部楼层
set 已付=已付 文本字段需要加单引号

比如 set 已付='已付'

TA的精华主题

TA的得分主题

发表于 2018-5-29 13:34 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
另: for 循环的时候,最好是开启事务。

循环结束后再提交。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-5-29 13:49 | 显示全部楼层
魂断蓝桥 发表于 2018-5-29 13:33
set 已付=已付 文本字段需要加单引号

比如 set 已付='已付'

已付不是文本字段,也是数字

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-5-29 13:54 | 显示全部楼层
Private Sub 批量销单作业_Click()
   lvname = "ListView6"
   Dim Conn As adodb.Connection
   Set Conn = LinkDB
   Dim Rs As New adodb.Recordset
   For i = 1 To Me.Controls(lvname).ListItems.Count
   已付 = Val(Me.Controls(lvname).ListItems(i).SubItems(9))
   单据编号 = Val(Me.Controls(lvname).ListItems(i).SubItems(1))
   sql = "Update 财务结算总表 set 已付=已付,尚欠=0  where 单位名称='" & Me.Controls(页面名称 & "_" & "单位名称") & "' and 单据编号=单据编号"
   Next i
   Conn.Execute sql
   Conn.Close
   Set Rs = Nothing: Set Conn = Nothing
   MsgBox "销单成功!"
End Sub
改成这样后,尚欠倒是更新成功了,但已付却更新结果不对,比如说listview6中有三条记录,最后一条的金额是10,另两条一个是20,一个是30,更新后,是要将数据库中已付更新为对应的金额值,结果数据库中的已付全都更新成10了!

TA的精华主题

TA的得分主题

发表于 2018-5-29 14:08 | 显示全部楼层
danhanqing 发表于 2018-5-29 13:54
Private Sub 批量销单作业_Click()
   lvname = "ListView6"
   Dim Conn As adodb.Connection

Conn.Execute sql
这句要在next里面,要不然就只会执行最后一次的语句。可以F8调试看看sql语句赋值有没有问题。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-5-30 11:13 | 显示全部楼层
melville 发表于 2018-5-29 14:08
Conn.Execute sql
这句要在next里面,要不然就只会执行最后一次的语句。可以F8调试看看sql语句赋值有没 ...

还是一样。“尚欠”写“0”成功,但“已付”写的值不对,都是“0”,我用msgbox 显示"已付"的取值都是正确的!

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-5-30 11:37 | 显示全部楼层
本帖最后由 danhanqing 于 2018-5-30 11:40 编辑

   lvname = "ListView6"
   Dim Conn As adodb.Connection, 已付金额
   Set Conn = LinkDB
   Dim Rs As New adodb.Recordset
   For i = 1 To Me.Controls(lvname).ListItems.Count
   sql = "Update 财务结算总表 set 已付='" & Val(Me.Controls(lvname).ListItems(i).SubItems(9)) & "',尚欠=0 where 单据编号='" & Me.Controls(lvname).ListItems(i).SubItems(1) & "'"
   Conn.Execute sql
   Next i
   Conn.Close
   Set Rs = Nothing: Set Conn = Nothing
   MsgBox "销单成功!"

改成这样后,提示数据类型不匹配……
QQ截图20180530113549.png


而数据库中单据编号、已付、尚欠都是数字类型。
QQ截图20180530113824.png



您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-20 21:43 , Processed in 0.045468 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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