Problema con SP y Visual Basic

05/09/2004 - 01:46 por Leo Lob | Informe spam
Tengo este Stored Procedure en SQL Server:

CREATE PROCEDURE SP_Clientes AS

select nombre, domicilio, saldo from clientes order by saldo desc

GO


Desde VB lo abro asi:

Dim DB As New ADODB.Connection
Dim RS As New ADODB.Recordset
DB.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist
Security Info=False;Initial Catalog=ORT;Data Source=lsiserver"
DB.Open

RS.Open "SP_Clientes", DB, adOpenForwardOnly, adLockOptimistic
RS.MoveFirst
.
.
.
Y anda todo bien.

Ahora, si antes del Select en el SP agrego un Insert Into, no logro que el
SP me devuelva nada. Me da un error en la linea del RS.MoveFirst.

Porque es eso?

Si quiero hacer un Insert y que el mismo SP me devuelva la tabla con el
Insert ya hecho, no puedo???

Gracia.

Preguntas similare

Leer las respuestas

#1 Gustavo Larriera [MVP]
05/09/2004 - 04:02 | Informe spam
Si estás ejecutando una sentencia INSERT seguida de SELECT, estás haciendo
un INSERT de los datos que el SELECT produce. Entonces el sproc está
devolviendo nada pues lo que está haciendo es INSERT y no un SELECT.

Tu código VB está esperando un recordset, pero tu sproc está haciendo un
INSERT.

Gustavo Larriera, MVP
Uruguay LatAm
http://sqljunkies.com/weblog/gux/
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.
"Leo Lob" wrote in message
news:
Tengo este Stored Procedure en SQL Server:

CREATE PROCEDURE SP_Clientes AS

select nombre, domicilio, saldo from clientes order by saldo desc

GO


Desde VB lo abro asi:

Dim DB As New ADODB.Connection
Dim RS As New ADODB.Recordset
DB.ConnectionString = "Provider=SQLOLEDB.1;Integrated
Security=SSPI;Persist
Security Info=False;Initial Catalog=ORT;Data Source=lsiserver"
DB.Open

RS.Open "SP_Clientes", DB, adOpenForwardOnly, adLockOptimistic
RS.MoveFirst
.
.
.
Y anda todo bien.

Ahora, si antes del Select en el SP agrego un Insert Into, no logro que el
SP me devuelva nada. Me da un error en la linea del RS.MoveFirst.

Porque es eso?

Si quiero hacer un Insert y que el mismo SP me devuelva la tabla con el
Insert ya hecho, no puedo???

Gracia.


Respuesta Responder a este mensaje
#2 Leo Lob
05/09/2004 - 04:37 | Informe spam
Perdoname, no me queda claro.

Si yo hago:
INSERT INTO CLIENTES (NOMBRE) VALUES ('AAA')
SELECT CODIGO, DESCRIPCION FROM ARTICULOS

Como es que hago un INSERT de los datos que el SELECT devuelve, si ni
siquiera tocan la misma tabla?

Podrias "desasnarme"?

Gracias por tu ayuda.



"Gustavo Larriera [MVP]" escribió en el mensaje
news:
Si estás ejecutando una sentencia INSERT seguida de SELECT, estás haciendo
un INSERT de los datos que el SELECT produce. Entonces el sproc está
devolviendo nada pues lo que está haciendo es INSERT y no un SELECT.

Tu código VB está esperando un recordset, pero tu sproc está haciendo un
INSERT.

Gustavo Larriera, MVP
Uruguay LatAm
http://sqljunkies.com/weblog/gux/
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.
"Leo Lob" wrote in message
news:
> Tengo este Stored Procedure en SQL Server:
>
> CREATE PROCEDURE SP_Clientes AS
>
> select nombre, domicilio, saldo from clientes order by saldo desc
>
> GO
>
>
> Desde VB lo abro asi:
>
> Dim DB As New ADODB.Connection
> Dim RS As New ADODB.Recordset
> DB.ConnectionString = "Provider=SQLOLEDB.1;Integrated
> Security=SSPI;Persist
> Security Info=False;Initial Catalog=ORT;Data Source=lsiserver"
> DB.Open
>
> RS.Open "SP_Clientes", DB, adOpenForwardOnly, adLockOptimistic
> RS.MoveFirst
> .
> .
> .
> Y anda todo bien.
>
> Ahora, si antes del Select en el SP agrego un Insert Into, no logro que


el
> SP me devuelva nada. Me da un error en la linea del RS.MoveFirst.
>
> Porque es eso?
>
> Si quiero hacer un Insert y que el mismo SP me devuelva la tabla con el
> Insert ya hecho, no puedo???
>
> Gracia.
>
>


Respuesta Responder a este mensaje
#3 Manuel Etcheto
05/09/2004 - 06:16 | Informe spam
En ese caso sì podés hacer el select,
pero necesitas SET NOCOUNT ON en el SP para que no envíe el mensaje de las
filas afectadas por el insert, o lo que fuere, previos

Create P...
AS BEGIN
SET NOCOUNT ON
operación 1
Operacion n
SELECT ...
END

El recordset recibirá el select

"Leo Lob" wrote in message
news:
Perdoname, no me queda claro.

Si yo hago:
INSERT INTO CLIENTES (NOMBRE) VALUES ('AAA')
SELECT CODIGO, DESCRIPCION FROM ARTICULOS

Como es que hago un INSERT de los datos que el SELECT devuelve, si ni
siquiera tocan la misma tabla?

Podrias "desasnarme"?

Gracias por tu ayuda.



"Gustavo Larriera [MVP]" escribió en el mensaje
news:
> Si estás ejecutando una sentencia INSERT seguida de SELECT, estás


haciendo
> un INSERT de los datos que el SELECT produce. Entonces el sproc está
> devolviendo nada pues lo que está haciendo es INSERT y no un SELECT.
>
> Tu código VB está esperando un recordset, pero tu sproc está haciendo un
> INSERT.
>
> Gustavo Larriera, MVP
> Uruguay LatAm
> http://sqljunkies.com/weblog/gux/
> Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
> derecho / This posting is provided "AS IS" with no warranties, and


confers
> no rights.
> "Leo Lob" wrote in message
> news:
> > Tengo este Stored Procedure en SQL Server:
> >
> > CREATE PROCEDURE SP_Clientes AS
> >
> > select nombre, domicilio, saldo from clientes order by saldo desc
> >
> > GO
> >
> >
> > Desde VB lo abro asi:
> >
> > Dim DB As New ADODB.Connection
> > Dim RS As New ADODB.Recordset
> > DB.ConnectionString = "Provider=SQLOLEDB.1;Integrated
> > Security=SSPI;Persist
> > Security Info=False;Initial Catalog=ORT;Data Source=lsiserver"
> > DB.Open
> >
> > RS.Open "SP_Clientes", DB, adOpenForwardOnly, adLockOptimistic
> > RS.MoveFirst
> > .
> > .
> > .
> > Y anda todo bien.
> >
> > Ahora, si antes del Select en el SP agrego un Insert Into, no logro


que
el
> > SP me devuelva nada. Me da un error en la linea del RS.MoveFirst.
> >
> > Porque es eso?
> >
> > Si quiero hacer un Insert y que el mismo SP me devuelva la tabla con


el
> > Insert ya hecho, no puedo???
> >
> > Gracia.
> >
> >
>
>


Respuesta Responder a este mensaje
#4 Leo Lob
05/09/2004 - 16:42 | Informe spam
Buenisimo, justo eso queria.

Muchisimas gracias.


"Manuel Etcheto" escribió en el mensaje
news:
En ese caso sì podés hacer el select,
pero necesitas SET NOCOUNT ON en el SP para que no envíe el mensaje de las
filas afectadas por el insert, o lo que fuere, previos

Create P...
AS BEGIN
SET NOCOUNT ON
operación 1
Operacion n
SELECT ...
END

El recordset recibirá el select

"Leo Lob" wrote in message
news:
> Perdoname, no me queda claro.
>
> Si yo hago:
> INSERT INTO CLIENTES (NOMBRE) VALUES ('AAA')
> SELECT CODIGO, DESCRIPCION FROM ARTICULOS
>
> Como es que hago un INSERT de los datos que el SELECT devuelve, si ni
> siquiera tocan la misma tabla?
>
> Podrias "desasnarme"?
>
> Gracias por tu ayuda.
>
>
>
> "Gustavo Larriera [MVP]" escribió en el


mensaje
> news:
> > Si estás ejecutando una sentencia INSERT seguida de SELECT, estás
haciendo
> > un INSERT de los datos que el SELECT produce. Entonces el sproc está
> > devolviendo nada pues lo que está haciendo es INSERT y no un SELECT.
> >
> > Tu código VB está esperando un recordset, pero tu sproc está haciendo


un
> > INSERT.
> >
> > Gustavo Larriera, MVP
> > Uruguay LatAm
> > http://sqljunkies.com/weblog/gux/
> > Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga


ningun
> > derecho / This posting is provided "AS IS" with no warranties, and
confers
> > no rights.
> > "Leo Lob" wrote in message
> > news:
> > > Tengo este Stored Procedure en SQL Server:
> > >
> > > CREATE PROCEDURE SP_Clientes AS
> > >
> > > select nombre, domicilio, saldo from clientes order by saldo desc
> > >
> > > GO
> > >
> > >
> > > Desde VB lo abro asi:
> > >
> > > Dim DB As New ADODB.Connection
> > > Dim RS As New ADODB.Recordset
> > > DB.ConnectionString = "Provider=SQLOLEDB.1;Integrated
> > > Security=SSPI;Persist
> > > Security Info=False;Initial Catalog=ORT;Data Source=lsiserver"
> > > DB.Open
> > >
> > > RS.Open "SP_Clientes", DB, adOpenForwardOnly, adLockOptimistic
> > > RS.MoveFirst
> > > .
> > > .
> > > .
> > > Y anda todo bien.
> > >
> > > Ahora, si antes del Select en el SP agrego un Insert Into, no logro
que
> el
> > > SP me devuelva nada. Me da un error en la linea del RS.MoveFirst.
> > >
> > > Porque es eso?
> > >
> > > Si quiero hacer un Insert y que el mismo SP me devuelva la tabla con
el
> > > Insert ya hecho, no puedo???
> > >
> > > Gracia.
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#5 Gustavo Larriera [MVP]
05/09/2004 - 20:13 | Informe spam
A lo que yo me refería es a esto, observa que la última sentencia de este
script es un INSERT y no una SELECT. En tu mail original no brindaste los
detalles de los comandos que estabas ejecutando. Si no se usa VALUES en la
INSERT se van a tomar como valores a insertar los emitidos por el SELECT que
viene a continuación.



use tempdb
go

create table t1 (col1 int, col2 char(20))
go
create table t2 (col1 char(20), col2 int, col3 char(40))
go

insert t1 values (1, 'a')
insert t1 values (2, 'b')
insert t2 values ('aaa', 111, 'aaaaaa')
insert t2 values ('bbb', 222, 'bbbbbb')
go

insert t1(col1, col2)
select col2, col1 from t2


Gustavo Larriera, MVP
Uruguay LatAm
http://sqljunkies.com/weblog/gux/
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.
"Leo Lob" wrote in message
news:
Perdoname, no me queda claro.

Si yo hago:
INSERT INTO CLIENTES (NOMBRE) VALUES ('AAA')
SELECT CODIGO, DESCRIPCION FROM ARTICULOS

Como es que hago un INSERT de los datos que el SELECT devuelve, si ni
siquiera tocan la misma tabla?

Podrias "desasnarme"?

Gracias por tu ayuda.



"Gustavo Larriera [MVP]" escribió en el mensaje
news:
Si estás ejecutando una sentencia INSERT seguida de SELECT, estás
haciendo
un INSERT de los datos que el SELECT produce. Entonces el sproc está
devolviendo nada pues lo que está haciendo es INSERT y no un SELECT.

Tu código VB está esperando un recordset, pero tu sproc está haciendo un
INSERT.

Gustavo Larriera, MVP
Uruguay LatAm
http://sqljunkies.com/weblog/gux/
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and
confers
no rights.
"Leo Lob" wrote in message
news:
> Tengo este Stored Procedure en SQL Server:
>
> CREATE PROCEDURE SP_Clientes AS
>
> select nombre, domicilio, saldo from clientes order by saldo desc
>
> GO
>
>
> Desde VB lo abro asi:
>
> Dim DB As New ADODB.Connection
> Dim RS As New ADODB.Recordset
> DB.ConnectionString = "Provider=SQLOLEDB.1;Integrated
> Security=SSPI;Persist
> Security Info=False;Initial Catalog=ORT;Data Source=lsiserver"
> DB.Open
>
> RS.Open "SP_Clientes", DB, adOpenForwardOnly, adLockOptimistic
> RS.MoveFirst
> .
> .
> .
> Y anda todo bien.
>
> Ahora, si antes del Select en el SP agrego un Insert Into, no logro que


el
> SP me devuelva nada. Me da un error en la linea del RS.MoveFirst.
>
> Porque es eso?
>
> Si quiero hacer un Insert y que el mismo SP me devuelva la tabla con el
> Insert ya hecho, no puedo???
>
> Gracia.
>
>






Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida