Problema con cambio de cadena de conexion y tablas temporales

29/08/2006 - 16:41 por jcac | Informe spam
Hola lista,

Hace algunos días ingrese un mensaje en el grupo de noticias de visual basic
(microsoft.public.es.vb) el cual indica como nombre "Cadena de conexión".

Yo tengo un programa hecho en visual basic 6 con SQL Server 2000. (SQL
Server 2000 SP4, VB 6.0 SP6, WIN2K SP4)

La cadena de conexión que tengo es a través de ODBC y mire los comentarios
que era mucho mejor utilizar el OLEDB nativo para SQL Server, entonces,
decidí cambiar mi conexión de:

lcCadenaConnection = "Server=" & gcServidor &
";Uid=Usuario;Pwd=Contrasena;Database=" & baseDatos & ";driver={SQL Server}"
With Cn
.ConnectionString = lcCadenaConnection
.ConnectionTimeout = 10
.CursorLocation = adUseClient
.Open
End With

a :

lcCadenaConnection="Provider=SQLOLEDB;User ID=Usuario;Initial Catalog=" &
baseDatos & ";Data Source=" & gcServidor & ";Password=Contrasena"
With Cn
.ConnectionString = lcCadenaConnection
.ConnectionTimeout = 10
.CursorLocation = adUseClient
.Open
End With

Pero al realizar este cambio tengo problemas con aquellos sp que contengan
tablas temporales, ya que el RecordSet que me devuelve lo hace cerrado, en
cambio si la conexión la realizo con ODBC no tengo ningún problema, ya que
el RecordSet me lo devuelve abierto.

Saludos y gracias por su tiempo, no espero haberme explayado demasiado

PD. El sp que ejecuto es:

CREATE PROCEDURE CATLSS_AyudaCodxAlmSaldo -- CATLSS_AyudaCodxAlmSaldo
'001','200'
@ALMA_Codigo CHAR(3),
@PROD_CodProd VARCHAR(15)
AS
SELECT ALMA_Codigo, PROD_CODPROD, MAX(SALD_FECSALDO) AS SALD_FECHA
INTO #SALDOS
FROM SALDOS
WHERE ALMA_Codigo = @ALMA_Codigo And PROD_CodProd Like @PROD_CodProd + '%'
GROUP BY ALMA_Codigo, PROD_CODPROD

SELECT C.PROD_CodProd As Código, P.PROD_CodigoAnt As [Cód Antiguo],
CATL_Desc As Producto, T.TIPO_DescC As Unidad,
CONVERT(VARCHAR(20),ISNULL(S.SALD_SaldoF,0.0000)) AS Stock
FROM #Saldos SA
INNER JOIN Saldos S ON SA.ALMA_Codigo = S.ALMA_Codigo AND
SA.PROD_CODPROD = S.PROD_CODPROD AND SA.SALD_FECHA = .SALD_FECSALDO
RIGHT JOIN Catalogos C ON S.SUCR_Codigo = C.SUCR_Codigo AND
S.ALMA_Codigo = C.ALMA_Codigo AND S.PROD_CodProd = C.PROD_CodProd
INNER JOIN Productos P ON C.PROD_CodProd = P.PROD_CodProd
INNER JOIN Tipos T ON T.TIPO_CodTabla = 'UNM' AND C.CATL_UniVenta =
T.TIPO_CodTipo
WHERE
C.ALMA_Codigo = @ALMA_Codigo And
C.PROD_CodProd like @PROD_CodProd + '%' AND
C.CATL_Activo = 'S'
ORDER BY C.PROD_CODPROD ASC

DROP TABLE #SALDOS
 

Leer las respuestas

#1 Maxi
29/08/2006 - 18:40 | Informe spam
Hola, el problema no es de SQL Server sino de como se manejan las cosas
desde afuera, pero sabe que una tabla temporal como la estas creando va a
morir con el Store, si queres usarla fuera del Store la vas a tener que
crear Global y no Local, o sea con ##
Pero realmente cual es el problema que estas teniendo? que error?


Salu2

Microsoft MVP SQL Server
Culminis Speaker
INETA Speaker

"jcac" escribió en el mensaje
news:
Hola lista,

Hace algunos días ingrese un mensaje en el grupo de noticias de visual
basic (microsoft.public.es.vb) el cual indica como nombre "Cadena de
conexión".

Yo tengo un programa hecho en visual basic 6 con SQL Server 2000. (SQL
Server 2000 SP4, VB 6.0 SP6, WIN2K SP4)

La cadena de conexión que tengo es a través de ODBC y mire los comentarios
que era mucho mejor utilizar el OLEDB nativo para SQL Server, entonces,
decidí cambiar mi conexión de:

lcCadenaConnection = "Server=" & gcServidor &
";Uid=Usuario;Pwd=Contrasena;Database=" & baseDatos & ";driver={SQL
Server}"
With Cn
.ConnectionString = lcCadenaConnection
.ConnectionTimeout = 10
.CursorLocation = adUseClient
.Open
End With

a :

lcCadenaConnection="Provider=SQLOLEDB;User ID=Usuario;Initial Catalog=" &
baseDatos & ";Data Source=" & gcServidor & ";Password=Contrasena"
With Cn
.ConnectionString = lcCadenaConnection
.ConnectionTimeout = 10
.CursorLocation = adUseClient
.Open
End With

Pero al realizar este cambio tengo problemas con aquellos sp que contengan
tablas temporales, ya que el RecordSet que me devuelve lo hace cerrado, en
cambio si la conexión la realizo con ODBC no tengo ningún problema, ya que
el RecordSet me lo devuelve abierto.

Saludos y gracias por su tiempo, no espero haberme explayado demasiado

PD. El sp que ejecuto es:

CREATE PROCEDURE CATLSS_AyudaCodxAlmSaldo -- CATLSS_AyudaCodxAlmSaldo
'001','200'
@ALMA_Codigo CHAR(3),
@PROD_CodProd VARCHAR(15)
AS
SELECT ALMA_Codigo, PROD_CODPROD, MAX(SALD_FECSALDO) AS SALD_FECHA
INTO #SALDOS
FROM SALDOS
WHERE ALMA_Codigo = @ALMA_Codigo And PROD_CodProd Like @PROD_CodProd + '%'
GROUP BY ALMA_Codigo, PROD_CODPROD

SELECT C.PROD_CodProd As Código, P.PROD_CodigoAnt As [Cód Antiguo],
CATL_Desc As Producto, T.TIPO_DescC As Unidad,
CONVERT(VARCHAR(20),ISNULL(S.SALD_SaldoF,0.0000)) AS Stock
FROM #Saldos SA
INNER JOIN Saldos S ON SA.ALMA_Codigo = S.ALMA_Codigo AND
SA.PROD_CODPROD = S.PROD_CODPROD AND SA.SALD_FECHA = .SALD_FECSALDO
RIGHT JOIN Catalogos C ON S.SUCR_Codigo = C.SUCR_Codigo AND
S.ALMA_Codigo = C.ALMA_Codigo AND S.PROD_CodProd = C.PROD_CodProd
INNER JOIN Productos P ON C.PROD_CodProd = P.PROD_CodProd
INNER JOIN Tipos T ON T.TIPO_CodTabla = 'UNM' AND C.CATL_UniVenta =
T.TIPO_CodTipo
WHERE
C.ALMA_Codigo = @ALMA_Codigo And
C.PROD_CodProd like @PROD_CodProd + '%' AND
C.CATL_Activo = 'S'
ORDER BY C.PROD_CODPROD ASC

DROP TABLE #SALDOS

Preguntas similares