ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] copyfromrecordset和getrows转置输出问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-11-24 14:17 | 显示全部楼层 |阅读模式
vba 连接的mysql 数据库,两种方式发现输出有部分字符不一样,如有条记录的“名称”字段内容为“左下侧板”,其他字段输出都正常
copyfromrecordset 输出其中“名称”这个字段都截取了一部分,只能输出“左下”,超过2个字符的都是一样情况
getrows再转置输出就正常为“左下侧板”。

sql_str = "select content2.auto_bid,content2.zzh,content1.tjh,content1.zjxh,content1.mkxh,content1.mc,content1.des,content2.zs,content2.beizhu from content1,content2 where content2.tjh=content1.auto_bid and content2.zzh='" & zzh & "'"
Set rst = New ADODB.Recordset
With rst
.Open sql_str, conn, 1, 1, adCmdText
If Not .BOF And Not .EOF Then
  '[a4].CopyFromRecordset rst'----------------用这句也能输出,只是其中有一个字段(名称都是文字),只输出2个字
  temp = .GetRows()'---------------------------用这句输出就正常,多个字
  Range("a4:i" & UBound(temp, 2) + 4) = Application.Transpose(temp)
  MsgBox "  O K !~", , "提示"
Else
  MsgBox "没有查到对应数据!", , "提示"
End If
End With
conn.Close
Set rst = Nothing
Set conn = Nothing

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-11-28 09:13 | 显示全部楼层
网上查了有同样情况,解决方法添加CursorLocation值设置为adUseClient,重新刷新就显示正常字符了。
sql_str = "select content2.auto_bid,content2.zzh,content1.tjh,content1.zjxh,content1.mkxh,content1.mc,content1.des,content2.zs,content2.beizhu from content1,content2 where content2.tjh=content1.auto_bid and content2.zzh='" & zzh & "'"
Set rst = New ADODB.Recordset
With rst
.CursorLocation = adUseClient '----------------添加这一句
.Open sql_str, conn, 1, 1, adCmdText
If Not .BOF And Not .EOF Then
  [a4].CopyFromRecordset rst '----------------用这句也能输出,只是其中有一个字段(名称都是文字),只输出2个字
  'temp = .GetRows() '---------------------------用这句输出就正常,多个字
  'Range("a4:i" & UBound(temp, 2) + 4) = Application.Transpose(temp)
  MsgBox "  O K !~", , "提示"
Else
  MsgBox "没有查到对应数据!", , "提示"
End If
End With
conn.Close
Set rst = Nothing
Set conn = Nothing

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-5 10:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
再次补充
近两天又碰到类似情况,VBA连接mysql输出中文字符缺失,使用上面的方法都不可行了。上面的方法之前是在EXCEL2007可行。这次区别在于OFFICE版本高了,用的EXCEL2016,office365等
最后是修改mysql字段的varchar长度,原来长度为4,所以显示最多2个汉字,修改后可以正常输出了。不同office版本对于字符长度的区别,不知道什么原因
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 06:56 , Processed in 0.041631 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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