我有这段代码
Public Sub CommandButton1_Click()
Cells.Clear
Dim oConn1 As ADODB.Connection
Dim rs1 As ADODB.Recordset
Dim rs2 As ADODB.Recordset
Set oConn1 = New ADODB.Connection
oConn1.ConnectionString = "Provider=SQLOLEDB.1;Password=" & Contraseña.Text & ";Persist Security Info=True;User ID= " & Usuario.Text & "; Initial Catalog =" & bases.Text & ";Data Source= SERVER\BD;"
oConn1.ConnectionTimeout = 200
oConn1.Open
Set rs1 = New ADODB.Recordset
rs1.ActiveConnection = oConn1
rs1.Source = "DECLARE @id INT" & _
"SET @id = @@spid" & _
"INSERT CLIENTES_SALDOS_E (PROCESO_ID, CODIGO_DE_CLIENTE)" & _
"SELECT @id, CODIGO_DE_CLIENTE" & _
"FROM CLIENTES" & _
"WHERE CLIENTES.CODIGO_DE_CLIENTE BETWEEN '" & EXTRA(Ncuenta) & "' AND '" & EXTRA(Ncuenta2) & "'" & _
"EXECUTE sp_Reconstruccion_saldo_doctos "", '" & EXTRA(Fechacorte) & "', @id"
Set rs2 = New ADODB.Recordset
rs2.ActiveConnection = oConn1
rs2.Source = "SELECT P.NOMBRE_DEPARTAMENTO,M.NOMBRE_MUNICIPIO,R.NOMBRE_TERRITORIO,V.NOMBRE_VENDEDOR,C.CODIGO_DE_CONDICION,E.CODIGO_DE_CLIENTE,C.NOMBRE_CLIENTE,D.CODIGO_MOVIMIENTO," & _
"D.SERIE_DEL_DOCUMENTO,D.NUMERO_DOCUMENTO,(ME.MONTO_TOTAL * ME.CAMBIO_MONEDA_LOCAL) AS MONTO_MONEDA_LOCAL,D.SALDO_MONEDA_LOCAL,CONVERT(VARCHAR(10),D.FECHA_DOCUMENTO,103) AS FECHA_DOCUMENTO," & _
"CONVERT(VARCHAR(10),D.FECHA_VENCIMIENTO,103) AS FECHA_VENCIMIENTO,D.DIAS_DE_ANTIGUEDAD," & _
"CASE WHEN D.DIAS_DE_ANTIGUEDAD =0 THEN D.SALDO_MONEDA_LOCAL ELSE 0 END AS 'NO VENCIDO'," & _
"CASE WHEN D.DIAS_DE_ANTIGUEDAD >=1 AND D.DIAS_DE_ANTIGUEDAD <=15 THEN D.SALDO_MONEDA_LOCAL ELSE 0 END AS 'DE 1 A 15 DIAS'," & _
"CASE WHEN D.DIAS_DE_ANTIGUEDAD >=16 AND D.DIAS_DE_ANTIGUEDAD <=30 THEN D.SALDO_MONEDA_LOCAL ELSE 0 END AS 'DE 16 A 30 DIAS'," & _
"CASE WHEN D.DIAS_DE_ANTIGUEDAD >=31 AND D.DIAS_DE_ANTIGUEDAD <=60 THEN D.SALDO_MONEDA_LOCAL ELSE 0 END AS 'DE 31 A 60 DIAS'," & _
"CASE WHEN D.DIAS_DE_ANTIGUEDAD >=61 AND D.DIAS_DE_ANTIGUEDAD <=90 THEN D.SALDO_MONEDA_LOCAL ELSE 0 END AS 'DE 61 A 90 DIAS'," & _
"CASE WHEN D.DIAS_DE_ANTIGUEDAD >=91 AND D.DIAS_DE_ANTIGUEDAD <=9999 THEN D.SALDO_MONEDA_LOCAL ELSE 0 END AS 'DE 91 A 9999 DIAS'" & _
"FROM CLIENTES C" & _
"INNER JOIN CLIENTES_SALDOS_E E ON E.CODIGO_DE_CLIENTE = C.CODIGO_DE_CLIENTE" & _
"INNER JOIN CLIENTES_SALDOS_D D ON D.CODIGO_DE_CLIENTE = E.CODIGO_DE_CLIENTE AND D.PROCESO_ID = E.PROCESO_ID" & _
"INNER JOIN MOVIMIENTOS_TIPO T ON T.CODIGO_MOVIMIENTO = D.CODIGO_MOVIMIENTO" & _
"INNER JOIN DEPARTAMENTOS P ON C.CODIGO_DE_PAIS = P.CODIGO_DE_PAIS AND C.CODIGO_DEPARTAMENTO = P.CODIGO_DEPARTAMENTO" & _
"INNER JOIN MUNICIPIOS M ON C.CODIGO_DE_PAIS = M.CODIGO_DE_PAIS AND C.CODIGO_DEPARTAMENTO = M.CODIGO_DEPARTAMENTO AND C.CODIGO_MUNICIPIO = M.CODIGO_MUNICIPIO" & _
"INNER JOIN TERRITORIOS R ON C.CODIGO_TERRITORIO = R.CODIGO_TERRITORIO" & _
"LEFT JOIN CLIENTE_VENDEDOR CV ON C.CODIGO_DE_CLIENTE = CV.CODIGO_DE_CLIENTE" & _
"LEFT JOIN VENDEDORES V ON CV.CODIGO_VENDEDOR = V.CODIGO_VENDEDOR" & _
"INNER JOIN MOVIMIENTO_ENC ME ON D.SERIE_DEL_DOCUMENTO = ME.SERIE_DEL_DOCUMENTO AND D.NUMERO_DOCUMENTO = ME.NUMERO_DOCUMENTO AND D.CODIGO_MOVIMIENTO = ME.CODIGO_MOVIMIENTO" & _
"WHERE E.PROCESO_ID = @id AND T.TIPO_TRANSACCION = 'S' AND D.ID_EMPRESA = 'GN' AND D.ID_SUCURSAL = '01' AND D.ID_CENTRO_OPERATIVO = '001' AND D.SALDO_MONEDA_LOCAL > 0" & _
"DELETE CLIENTES_SALDOS_E WHERE PROCESO_ID = @id" & _
"DELETE CLIENTES_SALDOS_D WHERE PROCESO_ID = @id"
rs2.Open
encabezados
Range("A2").CopyFromRecordset rs2
'a = rs1.Fields.Count
rs1.Close
rs2.Close
oConn1.Close
MsgBox ("Reporte Generado")
Set rs1 = Nothing
Set rs2 = Nothing
Set oConn1 = Nothing
End If
End Sub
当我运行这段代码时,在'E'错误附近给我一个不正确的语法,我将代码分成两个记录集,因为只有一个给我错误:有很多行的延续,但现在我的语法不正确错误。 我猜错误是因为在记录集2的where子句中,引用了在记录集1上声明的变量,我不知道如何告诉查询到E.PROCESO_ID在记录集1中。
我该如何解决这个问题? 感谢
答案 0 :(得分:0)
我最好的猜测是问题是这里缺少空格。现在你的陈述是
FROM CLIENTES CINNER JOIN CLIENTES_SALDOS
但应该阅读
FROM CLIENTES C INNER JOIN CLIENTES_SALDOS
所以在每个INNER JOIN
前面添加一个空格。