gpt4 book ai didi

VBA 列限制中的 SQL 命令

转载 作者:行者123 更新时间:2023-12-04 21:46:45 25 4
gpt4 key购买 nike

一个可以带多少列是否有限制sqlcommand在 VBA 代码中?我的代码很长,但用于确保我始终从正确的数据库中提取。 m2mdata02将替换为代码 CatalogM2M根据用户在数据库中的选择。要带入的总列数是 7 个表中的 23 列。

Sqlcommand = “select left(m2mdata02.dbo.jomast.fjobno,5) as job, m2mdata02.dbo.jomast.fjobno, m2mdata02.dbo.jomast.fpartno, m2mdata02.dbo.jomast.fstatus, m2mdata02.dbo.jomast.fact_rel, m2mdata02.dbo.jomast.fddue_date, m2mdata02.dbo.jomast.fprodcl, m2mdata02.dbo.jomast.frel_dt, m2mdata02.dbo.jomast.frouting, m2mdata02.dbo.inmastx.fpartno, m2mdata02.dbo.inmastx.fdescript, m2mdata02.dbo.inmastx.fprice, m2mdata02.dbo.somast.fsono, m2mdata02.dbo.somast.fcompany, m2mdata02.dbo.somast.fcustpono, m2mdata02.dbo.aritem.fcinvoice, m2mdata02.dbo.aritem.fprice, m2mdata02.dbo.aritem.fcsono, m2mdata02.dbo.armast.fcinvoice, m2mdata02.dbo.armast.finvdate, m2mdata02.dbo.shmast.fshipdate, m2mdata02.dbo.shmast.fshipno, m2mdata02.dbo.shmast.fcsono
from m2mdata02.dbo.jomast
left join m2mdata02.dbo.inmastx on m2mdata02.dbo.inmastx.fpartno = m2mdata02.dbo.jomast.fpartno
left join m2mdata02.dbo.somast on m2mdata02.dbo.somast.fsono = m2mdata02.dbo.jomast.fsono
left join m2mdata02.dbo.aritem on m2mdata02.dbo.aritem.FCSONO = m2mdata02.dbo.jomast.fsono
left join m2mdata02.dbo.armast on m2mdata02.dbo.armast.fcinvoice = m2mdata02.dbo.aritem.fcinvoice
left join m2mdata02.dbo.shmast on m2mdata02.dbo.shmast.fcsono = m2mdata02.dbo.somast.fsono
where m2mdata02.dbo.jomast.fprodcl = 'FG11' order by m2mdata02.dbo.jomast.fjobno”

最佳答案

根据MSDN docs ,String的字数限制VBA 中的类型大约是 20 亿 (2^31) 个 Unicode 字符。您的 SQL 查询远不及该限制。如果使用 ADO 将 Excel VBA 连接到数据库,这里的服务器引擎是 SQL Server 决定列限制,23 又是不接近 maximum capacity .
但是,请考虑使用表别名来减少字符,避免重复三个句点标识符,并整体提高可读性甚至可维护性,因为您可以更轻松地为每个用户选择调整表引用。

select left(j.fjobno,5) as job
, j.fjobno
, j.fpartno
, j.fstatus
, j.fact_rel
, j.fddue_date
, j.fprodcl
, j.frel_dt
, j.frouting
, i.fpartno
, i.fdescript
, i.fprice
, so.fsono
, so.fcompany
, so.fcustpono
, ari.fcinvoice
, ari.fprice
, ari.fcsono
, arm..fcinvoice
, arm..finvdate
, sh.fshipdate
, sh.fshipno
, sh.fcsono

from m2mdata02.dbo.jomast j
left join m2mdata02.dbo.inmastx i on i.fpartno = j.fpartno
left join m2mdata02.dbo.somast so on so.fsono = j.fsono
left join m2mdata02.dbo.aritem ari on ari.FCSONO = j.fsono
left join m2mdata02.dbo.armast arm on arm..fcinvoice = ari.fcinvoice
left join m2mdata02.dbo.shmast sh on sh.fcsono = so.fsono
where j.fprodcl = 'FG11'
order by j.fjobno

顺便说一句,对于非常长的查询,避免在 VBA 中使用行连接和双引号构建字符串,并直接从格式化的 SQL 文本文件中读取:
Dim strSQL As String

' READ SQL QUERY FROM FILE
With CreateObject("Scripting.FileSystemObject")
strSQL = .OpenTextFile("C:\path\to\my\SQL\Query.sql", 1).readall
End With

' REPLACE DB IN STRING
strSQL = Replace(strSQL, "m2mdata02", "someotherdb")

关于VBA 列限制中的 SQL 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63443565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com