【发布时间】:2017-01-09 22:39:37
【问题描述】:
Excel VBA 记录集有问题,它会运行所有其他查询,但在 SQL Server 中运行的这一特定查询不会随记录集一起打开。 这是代码块:
SQL2 = "DECLARE @val VARCHAR (2000) " & vbCrLf & "DECLARE @cert VARCHAR(2000) " & vbCrLf & _
"DECLARE @inv VARCHAR(2000) " & vbCrLf & "DECLARE @loc INT " & vbCrLf & _
"DECLARE @res TABLE(val VARCHAR(100)) " & vbCrLf & _
"DECLARE @Delimiter VARCHAR(2) " & vbCrLf & "SET @val = '' " & vbCrLf & _
"SET @Delimiter = ',' " & vbCrLf & "SELECT @cert = " & vbCrLf & "CASE WHEN @cert = '' " & vbCrLf & _
"THEN CertInvsRec " & vbCrLf & "ELSE @cert + coalesce(',' + CertInvsRec, '') " & vbCrLf & _
"End " & vbCrLf & "FROM ProjValuations WHERE (Proj = 'TPL-15-020') " & vbCrLf & _
"SELECT @inv = " & vbCrLf & "CASE WHEN @inv = '' " & vbCrLf & "THEN InvsAmountRec " & vbCrLf & _
"ELSE @inv + coalesce(',' + InvsAmountRec, '') " & vbCrLf & "End " & vbCrLf & _
"FROM ProjValuations WHERE (Proj = 'TPL-15-020') " & vbCrLf & "SET @val = CONCAT(@inv, ',', @cert) " & vbCrLf & _
"IF NOT @val = ',' " & vbCrLf & "DECLARE @Index SMALLINT, @Start SMALLINT, @DelSize SMALLINT " & vbCrLf & _
"SET @DelSize = LEN(@Delimiter) " & vbCrLf & "WHILE LEN(@val) > 0 " & vbCrLf & "BEGIN " & vbCrLf & _
"SET @Index = CHARINDEX(@Delimiter, @val) " & vbCrLf & "IF @Index = 0 " & vbCrLf & "BEGIN " & vbCrLf & _
"INSERT INTO @res(val) VALUES(LTRIM(RTRIM(@val))) " & vbCrLf & "BREAK " & vbCrLf & _
"End " & vbCrLf & "Else " & vbCrLf & "BEGIN " & vbCrLf & _
"INSERT INTO @res (val) VALUES (LTRIM(RTRIM(SUBSTRING(@val, 1,@Index - 1)))) " & vbCrLf & _
"SET @Start = @Index + @DelSize " & vbCrLf & _
"SET @val = SUBSTRING(@val, @Start , LEN(@val) - @Start + 1) " & vbCrLf & "End " & vbCrLf & _
"End " & vbCrLf & vbCrLf & "SELECT " & vbCrLf & "( " & vbCrLf & _
"SELECT sum(InvTotExcl) FROM invnum WHERE autoindex in ( " & vbCrLf & _
"SELECT iInvoiceID FROM _bvSalesOrdersFull WHERE (ProjectCode LIKE '%020%') AND " & vbCrLf & _
"(StatusDescription = 'CERTIFICATE') and iInvoiceID not in (SELECT * FROM @res)) " & vbCrLf & _
") " & vbCrLf & " AS certAmnt, " & vbCrLf & "( " & vbCrLf & _
"SELECT SUM(InvTotExcl) FROM _bvSalesOrdersFull WHERE (ProjectCode = 'TPL-15-020') AND " & vbCrLf & _
"(StatusDescription = 'STANDARD') and iInvoiceID not in (SELECT * FROM @res) " & vbCrLf & ") AS invAmnt"
If rsAmnts.State = adStateOpen Then rsAmnts.Close
rsAmnts.Open SQL2, CN, adOpenStatic, adLockReadOnly
任何帮助将不胜感激,在此先感谢。
如果有帮助,如果我使用直接 SELECT 查询,例如SELECT * FROM things 它运行,可能是因为变量声明,所以也许我应该将查询移动到一个过程?
【问题讨论】:
-
sql 服务器?甲骨文?请用您正在使用的数据库风格标记问题。
-
如果您在即时窗口中执行
debug.print SQL2,然后在 SQL 中运行查询,它运行正常吗? -
你的错误号是多少?如果没有运行时错误,则问题出在 SQL 内部,这还不错,但对您的数据库/表无效
-
@shahkalpesh 它的 sql 服务器
-
@GaryEvans 是的,它运行正常,只是在代码中它没有运行
标签: sql-server vba excel