puedo hacer que un procedimiento almacenado me devuelva un valor a una aplicacion corriendo en VBA ???

03/12/2004 - 09:30 por .·:m·a·r·l·a:·. | Informe spam
hola a todos

tengo creado un procedimiento almacenado que me da de alta los clientes,
este, entre otras formas, es llamado desde una aplicaicion VBA en excell
para automatizar el proceso cuando recibo clientes por hojas de excel

actualmente cada vez que el procedimiento es llamado, creo el cliente y ya
esta, mi intencion es que este a su vez devolviera el numero de cliente que
ha generado (este se genera segun determinadas reglas), por ejemplo para
mostrarlo en la aplicacion

el procedimiento es tal que (un pequeño resumen):

CREATE PROCEDURE dbo.EntityNEW @Name as char(40),
...
@Country
as char(50),
@Town as
char(30),
@Street
as char(30),
...
@Format
as char(40),
...
AS

DECLARE @MISid as char(15) // variable donde voy generando el id

... //busqueda de codigos, generacion del identificador, bla bla bla

SET @MISid = @Country_forMISid + @BA_forMISid + @Type_forMISid +
@Format_forMISid + @MISid_last5

... //inserciones en tablas del SQL-server el cliente y otros valores

GO



y la funcion con la que lo llamo tal que:

QueryString = "dbo.EntityNEW " + "'" + var_Name + + var_Country +
"','" + var_Town + "','" + var_Street + ... + var_Format + ... + "'"
If var_execute_insertion Then objConnSQLMIS.Execute (QueryString)



puede acerse esto, y en tal caso, que he de modificar en el procedimiento
alamacenado y como cojo el valor en la funcion VBA ??
he intentado buscar en la ayuda y en los BOL pero no he encontrado nada que
me oriente

gracias por adelantado

Preguntas similare

Leer las respuestas

#6 Maxi
03/12/2004 - 13:59 | Informe spam
ops, lei mal entonces :( mil disculpas

pd: se nota que es viernes la pucha jeje




Salu2
Maxi


"Carlos Sacristán" <csacristanARROBAmvpsPUNTOorg> escribió en el mensaje
news:%
No Maxi, ella no usa un identity...


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Maxi" escribió en el mensaje
news:
Hola, como no soy amante de los identity para estas cosas, por lo cual te
voy a pasar un articulo de como a mi criterio se deberian hacer estas
cuestiones ;)

Un abrazo

http://www.microsoft.com/spanish/ms...art187.asp


Salu2
Maxi


".·:m·a·r·l·a:·." escribió en el mensaje
news:
> hola a todos
>
> tengo creado un procedimiento almacenado que me da de alta los
> clientes,
> este, entre otras formas, es llamado desde una aplicaicion VBA en
> excell
> para automatizar el proceso cuando recibo clientes por hojas de excel
>
> actualmente cada vez que el procedimiento es llamado, creo el cliente y


ya
> esta, mi intencion es que este a su vez devolviera el numero de cliente
> que
> ha generado (este se genera segun determinadas reglas), por ejemplo
> para
> mostrarlo en la aplicacion
>
> el procedimiento es tal que (un pequeño resumen):
>
> CREATE PROCEDURE dbo.EntityNEW @Name as char(40),
> ...
>
> @Country
> as char(50),
>
> @Town
> as
> char(30),
>


@Street
> as char(30),
> ...
>


@Format
> as char(40),
> ...
> AS
>
> DECLARE @MISid as char(15) // variable donde voy generando el id
>
> ... //busqueda de codigos, generacion del identificador, bla bla bla
>
> SET @MISid = @Country_forMISid + @BA_forMISid + @Type_forMISid +
> @Format_forMISid + @MISid_last5
>
> ... //inserciones en tablas del SQL-server el cliente y otros valores
>
> GO
>
>
>
> y la funcion con la que lo llamo tal que:
>
> QueryString = "dbo.EntityNEW " + "'" + var_Name + +
> var_Country


+
> "','" + var_Town + "','" + var_Street + ... + var_Format + ... +
> "'"
> If var_execute_insertion Then objConnSQLMIS.Execute (QueryString)
>
>
>
> puede acerse esto, y en tal caso, que he de modificar en el


procedimiento
> alamacenado y como cojo el valor en la funcion VBA ??
> he intentado buscar en la ayuda y en los BOL pero no he encontrado nada
> que
> me oriente
>
> gracias por adelantado
>
>






Respuesta Responder a este mensaje
#7 .·:m·a·r·l·a:·.
03/12/2004 - 14:04 | Informe spam
a ambos, el problema no es el id, este lo genero segun determinadas reglas
(por que si, politica de empresa que no quieren simples numeros para el
identificador), mi problema es como saco de nuevo ese numero a la aplicacion
que llamo al procedimiento

buscando he encontrado que puedo hacer el procedimiento tal que: (añadiendo
una variable y marcandola como OUTPUT)

CREATE PROCEDURE dbo.EntityNEW @Name as char(40),
...
@Country
as char(50),
@Town as
char(30),
@Street
as char(30),
...
@Format
as char(40),
...

@Var_salida as char(15) OUTPUT
AS

DECLARE @MISid as char(15) // variable donde voy generando el id

... //busqueda de codigos, generacion del identificador, bla bla bla

SET @MISid = @Country_forMISid + @BA_forMISid + @Type_forMISid +
@Format_forMISid + @MISid_last5

... //inserciones en tablas del SQL-server el cliente y otros valores

SET @Var_salida = 'lo_que_quiera'

GO



mi duda es pues, como debo modificar la funcion (en excel, VBA) que llama a
este procedimiento ??


QueryString = "dbo.EntityNEW " + "'" + var_Name + + var_Country +
"','" + var_Town + "','" + var_Street + ... + var_Format + ... + "'"
If var_execute_insertion Then objConnSQLMIS.Execute (QueryString)


gracias a ambos



"Carlos Sacristán" <csacristanARROBAmvpsPUNTOorg> wrote in message
news:%
No Maxi, ella no usa un identity...


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Maxi" escribió en el mensaje
news:
> Hola, como no soy amante de los identity para estas cosas, por lo cual


te
> voy a pasar un articulo de como a mi criterio se deberian hacer estas
> cuestiones ;)
>
> Un abrazo
>
>


http://www.microsoft.com/spanish/ms...art187.asp
>
>
> Salu2
> Maxi
>
>
> ".·:m·a·r·l·a:·." escribió en el mensaje
> news:
> > hola a todos
> >
> > tengo creado un procedimiento almacenado que me da de alta los


clientes,
> > este, entre otras formas, es llamado desde una aplicaicion VBA en


excell
> > para automatizar el proceso cuando recibo clientes por hojas de excel
> >
> > actualmente cada vez que el procedimiento es llamado, creo el cliente


y
ya
> > esta, mi intencion es que este a su vez devolviera el numero de


cliente
> > que
> > ha generado (este se genera segun determinadas reglas), por ejemplo


para
> > mostrarlo en la aplicacion
> >
> > el procedimiento es tal que (un pequeño resumen):
> >
> > CREATE PROCEDURE dbo.EntityNEW @Name as char(40),
> > ...
> >
> > @Country
> > as char(50),
> >


@Town
> > as
> > char(30),
> >
@Street
> > as char(30),
> >


...
> >
@Format
> > as char(40),
> > ...
> > AS
> >
> > DECLARE @MISid as char(15) // variable donde voy generando el id
> >
> > ... //busqueda de codigos, generacion del identificador, bla bla bla
> >
> > SET @MISid = @Country_forMISid + @BA_forMISid + @Type_forMISid +
> > @Format_forMISid + @MISid_last5
> >
> > ... //inserciones en tablas del SQL-server el cliente y otros valores
> >
> > GO
> >
> >
> >
> > y la funcion con la que lo llamo tal que:
> >
> > QueryString = "dbo.EntityNEW " + "'" + var_Name + +


var_Country
+
> > "','" + var_Town + "','" + var_Street + ... + var_Format + ...


+
> > "'"
> > If var_execute_insertion Then objConnSQLMIS.Execute (QueryString)
> >
> >
> >
> > puede acerse esto, y en tal caso, que he de modificar en el
procedimiento
> > alamacenado y como cojo el valor en la funcion VBA ??
> > he intentado buscar en la ayuda y en los BOL pero no he encontrado


nada
> > que
> > me oriente
> >
> > gracias por adelantado
> >
> >
>
>


Respuesta Responder a este mensaje
#8 Carlos Sacristán
03/12/2004 - 14:55 | Informe spam
Esto sería un ejemplo de cómo ejecutar un procedimiento almacenado con
un parámetro de salida desde código VB. Modificándolo un poco lo puedes
adaptar a lo que necesitas

****************************************************************************
****

Sub mostrarParametroSalida()
Dim adoConn As ADODB.Connection
Dim adoCmd As ADODB.Command
Dim adoPar1 As ADODB.Parameter
Dim adoParS As ADODB.Parameter

Set adoConn = New ADODB.Connection

adoConn.Provider = "SQLOLEDB"

adoConn.Open
"Server=nombreServer;UID=usuario;PWD=contraseña;Database=baseDeDatos;"

Dim i As Integer, t As Variant



Set adoCmd = New ADODB.Command
adoCmd.CommandType = adCmdStoredProc

adoCmd.CommandText = "nombreDelProcedimiento"

Set adoCmd.ActiveConnection = adoConn

Set adoPar1 = adoCmd.CreateParameter("@param1", adInteger,
adParamInput)
...
...
Set adoParS = adoCmd.CreateParameter("@m", adVarchar,adParamOutput)

adoCmd.Parameters.Append adoPar1
adoCmd.Parameters.Append adoParM

adoPar1.Value = valorParametro1
adoCmd.Execute , , adExecuteNoRecords

Debug.Print "Valor parámetro de salida", adoParS.Value


Set adoPar1 = Nothing
Set adoParS = Nothing
Set adoCmd = Nothing


adoConn.Close
Set adoConn = Nothing
End Sub

****************************************************************************
****

Espero te sirva



Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

".·:m·a·r·l·a:·." escribió en el mensaje
news:
a ambos, el problema no es el id, este lo genero segun determinadas reglas
(por que si, politica de empresa que no quieren simples numeros para el
identificador), mi problema es como saco de nuevo ese numero a la


aplicacion
que llamo al procedimiento

buscando he encontrado que puedo hacer el procedimiento tal que:


(añadiendo
una variable y marcandola como OUTPUT)

CREATE PROCEDURE dbo.EntityNEW @Name as char(40),
...



@Country
as char(50),
@Town


as
char(30),



@Street
as char(30),
...



@Format
as char(40),
...

@Var_salida as char(15) OUTPUT
AS

DECLARE @MISid as char(15) // variable donde voy generando el id

... //busqueda de codigos, generacion del identificador, bla bla bla

SET @MISid = @Country_forMISid + @BA_forMISid + @Type_forMISid +
@Format_forMISid + @MISid_last5

... //inserciones en tablas del SQL-server el cliente y otros valores

SET @Var_salida = 'lo_que_quiera'

GO



mi duda es pues, como debo modificar la funcion (en excel, VBA) que llama


a
este procedimiento ??


QueryString = "dbo.EntityNEW " + "'" + var_Name + + var_Country +
"','" + var_Town + "','" + var_Street + ... + var_Format + ... +


"'"
If var_execute_insertion Then objConnSQLMIS.Execute (QueryString)


gracias a ambos



"Carlos Sacristán" <csacristanARROBAmvpsPUNTOorg> wrote in message
news:%
> No Maxi, ella no usa un identity...
>
>
> Un saludo
>
> -
> "Sólo sé que no sé nada. " (Sócrates)
>
> "Maxi" escribió en el mensaje
> news:
> > Hola, como no soy amante de los identity para estas cosas, por lo cual
te
> > voy a pasar un articulo de como a mi criterio se deberian hacer estas
> > cuestiones ;)
> >
> > Un abrazo
> >
> >
http://www.microsoft.com/spanish/ms...art187.asp
> >
> >
> > Salu2
> > Maxi
> >
> >
> > ".·:m·a·r·l·a:·." escribió en el mensaje
> > news:
> > > hola a todos
> > >
> > > tengo creado un procedimiento almacenado que me da de alta los
clientes,
> > > este, entre otras formas, es llamado desde una aplicaicion VBA en
excell
> > > para automatizar el proceso cuando recibo clientes por hojas de


excel
> > >
> > > actualmente cada vez que el procedimiento es llamado, creo el


cliente
y
> ya
> > > esta, mi intencion es que este a su vez devolviera el numero de
cliente
> > > que
> > > ha generado (este se genera segun determinadas reglas), por ejemplo
para
> > > mostrarlo en la aplicacion
> > >
> > > el procedimiento es tal que (un pequeño resumen):
> > >
> > > CREATE PROCEDURE dbo.EntityNEW @Name as char(40),
> > >


...
> > >
> > > @Country
> > > as char(50),
> > >
@Town
> > > as
> > > char(30),
> > >
> @Street
> > > as char(30),
> > >
...
> > >
> @Format
> > > as char(40),
> > >


...
> > > AS
> > >
> > > DECLARE @MISid as char(15) // variable donde voy generando el id
> > >
> > > ... //busqueda de codigos, generacion del identificador, bla bla bla
> > >
> > > SET @MISid = @Country_forMISid + @BA_forMISid + @Type_forMISid +
> > > @Format_forMISid + @MISid_last5
> > >
> > > ... //inserciones en tablas del SQL-server el cliente y otros


valores
> > >
> > > GO
> > >
> > >
> > >
> > > y la funcion con la que lo llamo tal que:
> > >
> > > QueryString = "dbo.EntityNEW " + "'" + var_Name + +
var_Country
> +
> > > "','" + var_Town + "','" + var_Street + ... + var_Format + ...
+
> > > "'"
> > > If var_execute_insertion Then objConnSQLMIS.Execute (QueryString)
> > >
> > >
> > >
> > > puede acerse esto, y en tal caso, que he de modificar en el
> procedimiento
> > > alamacenado y como cojo el valor en la funcion VBA ??
> > > he intentado buscar en la ayuda y en los BOL pero no he encontrado
nada
> > > que
> > > me oriente
> > >
> > > gracias por adelantado
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#9 .·:m·a·r·l·a:·.
03/12/2004 - 15:04 | Informe spam
muchas gracias, a esto es lo que me referia

aunque es un poco mas complejo de lo que creia

me pondre en un rato a implementarlo

gracias de nuevo


"Carlos Sacristán" <csacristanARROBAmvpsPUNTOorg> wrote in message
news:OIMfc$
Esto sería un ejemplo de cómo ejecutar un procedimiento almacenado con
un parámetro de salida desde código VB. Modificándolo un poco lo puedes
adaptar a lo que necesitas




****************************************************************************
****

Sub mostrarParametroSalida()
Dim adoConn As ADODB.Connection
Dim adoCmd As ADODB.Command
Dim adoPar1 As ADODB.Parameter
Dim adoParS As ADODB.Parameter

Set adoConn = New ADODB.Connection

adoConn.Provider = "SQLOLEDB"

adoConn.Open
"Server=nombreServer;UID=usuario;PWD=contraseña;Database=baseDeDatos;"

Dim i As Integer, t As Variant



Set adoCmd = New ADODB.Command
adoCmd.CommandType = adCmdStoredProc

adoCmd.CommandText = "nombreDelProcedimiento"

Set adoCmd.ActiveConnection = adoConn

Set adoPar1 = adoCmd.CreateParameter("@param1", adInteger,
adParamInput)
...
...
Set adoParS = adoCmd.CreateParameter("@m",


adVarchar,adParamOutput)

adoCmd.Parameters.Append adoPar1
adoCmd.Parameters.Append adoParM

adoPar1.Value = valorParametro1
adoCmd.Execute , , adExecuteNoRecords

Debug.Print "Valor parámetro de salida", adoParS.Value


Set adoPar1 = Nothing
Set adoParS = Nothing
Set adoCmd = Nothing


adoConn.Close
Set adoConn = Nothing
End Sub




****************************************************************************
****

Espero te sirva



Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

".·:m·a·r·l·a:·." escribió en el mensaje
news:
> a ambos, el problema no es el id, este lo genero segun determinadas


reglas
> (por que si, politica de empresa que no quieren simples numeros para el
> identificador), mi problema es como saco de nuevo ese numero a la
aplicacion
> que llamo al procedimiento
>
> buscando he encontrado que puedo hacer el procedimiento tal que:
(añadiendo
> una variable y marcandola como OUTPUT)
>
> CREATE PROCEDURE dbo.EntityNEW @Name as char(40),
> ...
>
@Country
> as char(50),
>


@Town
as
> char(30),
>
@Street
> as char(30),
> ...
>
@Format
> as char(40),
> ...
>
> @Var_salida as char(15) OUTPUT
> AS
>
> DECLARE @MISid as char(15) // variable donde voy generando el id
>
> ... //busqueda de codigos, generacion del identificador, bla bla bla
>
> SET @MISid = @Country_forMISid + @BA_forMISid + @Type_forMISid +
> @Format_forMISid + @MISid_last5
>
> ... //inserciones en tablas del SQL-server el cliente y otros valores
>
> SET @Var_salida = 'lo_que_quiera'
>
> GO
>
>
>
> mi duda es pues, como debo modificar la funcion (en excel, VBA) que


llama
a
> este procedimiento ??
>
>
> QueryString = "dbo.EntityNEW " + "'" + var_Name + + var_Country


+
> "','" + var_Town + "','" + var_Street + ... + var_Format + ... +
"'"
> If var_execute_insertion Then objConnSQLMIS.Execute (QueryString)
>
>
> gracias a ambos
>
>
>
> "Carlos Sacristán" <csacristanARROBAmvpsPUNTOorg> wrote in message
> news:%
> > No Maxi, ella no usa un identity...
> >
> >
> > Un saludo
> >
> > -
> > "Sólo sé que no sé nada. " (Sócrates)
> >
> > "Maxi" escribió en el mensaje
> > news:
> > > Hola, como no soy amante de los identity para estas cosas, por lo


cual
> te
> > > voy a pasar un articulo de como a mi criterio se deberian hacer


estas
> > > cuestiones ;)
> > >
> > > Un abrazo
> > >
> > >
>


http://www.microsoft.com/spanish/ms...art187.asp
> > >
> > >
> > > Salu2
> > > Maxi
> > >
> > >
> > > ".·:m·a·r·l·a:·." escribió en el mensaje
> > > news:
> > > > hola a todos
> > > >
> > > > tengo creado un procedimiento almacenado que me da de alta los
> clientes,
> > > > este, entre otras formas, es llamado desde una aplicaicion VBA en
> excell
> > > > para automatizar el proceso cuando recibo clientes por hojas de
excel
> > > >
> > > > actualmente cada vez que el procedimiento es llamado, creo el
cliente
> y
> > ya
> > > > esta, mi intencion es que este a su vez devolviera el numero de
> cliente
> > > > que
> > > > ha generado (este se genera segun determinadas reglas), por


ejemplo
> para
> > > > mostrarlo en la aplicacion
> > > >
> > > > el procedimiento es tal que (un pequeño resumen):
> > > >
> > > > CREATE PROCEDURE dbo.EntityNEW @Name as char(40),
> > > >
...
> > > >
> > > > @Country
> > > > as char(50),
> > > >
> @Town
> > > > as
> > > > char(30),
> > > >
> > @Street
> > > > as char(30),
> > > >
> ...
> > > >
> > @Format
> > > > as char(40),
> > > >
...
> > > > AS
> > > >
> > > > DECLARE @MISid as char(15) // variable donde voy generando el


id
> > > >
> > > > ... //busqueda de codigos, generacion del identificador, bla bla


bla
> > > >
> > > > SET @MISid = @Country_forMISid + @BA_forMISid + @Type_forMISid +
> > > > @Format_forMISid + @MISid_last5
> > > >
> > > > ... //inserciones en tablas del SQL-server el cliente y otros
valores
> > > >
> > > > GO
> > > >
> > > >
> > > >
> > > > y la funcion con la que lo llamo tal que:
> > > >
> > > > QueryString = "dbo.EntityNEW " + "'" + var_Name + +
> var_Country
> > +
> > > > "','" + var_Town + "','" + var_Street + ... + var_Format +


...
> +
> > > > "'"
> > > > If var_execute_insertion Then objConnSQLMIS.Execute (QueryString)
> > > >
> > > >
> > > >
> > > > puede acerse esto, y en tal caso, que he de modificar en el
> > procedimiento
> > > > alamacenado y como cojo el valor en la funcion VBA ??
> > > > he intentado buscar en la ayuda y en los BOL pero no he encontrado
> nada
> > > > que
> > > > me oriente
> > > >
> > > > gracias por adelantado
> > > >
> > > >
> > >
> > >
> >
> >
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida