Como podria obtener lo mismo programando para SQL???

10/07/2003 - 19:21 por Marcelo Rodrigo Sosa | Informe spam
Hola compañeros, cual seria el codigo equivalente para obtener lo siguiente
programando para cliente / servidor (para SQL).

if seek(clave,'mitabla','miclave')
? registro encontrado
else
? no exite el registro
endif

Digo por que me dijeron que la funcion seek() no sirve para programar
cliente/servidor por el solo hecho que no existe en SQL.
Desde ya muchas gracias.
Saludos.

Preguntas similare

Leer las respuestas

#1 Fernando España
10/07/2003 - 17:43 | Informe spam
if exists(Select 1 from tu_tabla where clave=tu_clave)
begin
print 'Registro Encontrado'
end
else
Begin
print 'Registro NO Encontrado'
end


"Marcelo Rodrigo Sosa" wrote in message
news:
Hola compañeros, cual seria el codigo equivalente para obtener lo


siguiente
programando para cliente / servidor (para SQL).

if seek(clave,'mitabla','miclave')
? registro encontrado
else
? no exite el registro
endif

Digo por que me dijeron que la funcion seek() no sirve para programar
cliente/servidor por el solo hecho que no existe en SQL.
Desde ya muchas gracias.
Saludos.


Respuesta Responder a este mensaje
#2 Fernando España
10/07/2003 - 20:37 | Informe spam
La funcion me parece muy buena, pero creo que estarias sub utilizando las
condiciones de trabajo en SQL Server, a mi criterio, deberias de tomar en
cuenta primero que es lo que necesitas realizar con ese tipo de consultas.
Podriamos pensar asi:

Supon que lo que necesitas es validar la existencia de ese registro para
permitir algun tipo de insercion de datos o modificacion de los mismos,+
podrias implmentas en el trigger respectivo el siguiente codigo:

if exists(select 1 from tu_tabla where tu_condicion)
** esta linea evaluara que exista el registro que necesitas, si la
expresion se evalua, seguidamente usas la instruccion
** contenida entre un begin y un end, para realizar la accion, en caso
se cumpla la condicion.

begin
print 'si existe' -- Aca puedes colocar el codigo
adicional
end


Por otro lado, si lo que necesitas es evaluar desde tu aplicacion la
existencia de esa informacion, para efectos unicamente de informacion, no de
manipulacion de datos, porque eso seria mejor hacerlo lado servidor, puedes
implementarlo con SQLPrepare y SQL exec, enviando dentro de la sentencia SQl
la
misma cadena IF EXISTS( Select) seguido del begin y end, y devolver a VFP un
conjunto de resultados.

Esto te garantizo sera mucho mas rapido que cualquier funcion adicional que
puedas implementar, y tener que pasar, N cantidad de registros por la red a
un cursor local de vfp y alli realizar tu busqueda.

Saludos.

Fernando España






"José G. Samper" wrote in message
news:
Hola como estas, espero te sirva esta función busca en fox o sql segun sea
requerido

Function FindRegistro
Lparameters pTabla, pTablaAlias, pConexion, pIndice, pCampo, pValor
** pTabla: Tabla a en donde buscar
** pTablaAlias: Nombre del cursor a devolver en caso de ser SQL
** pConexion: Número de Conexión se asume que si es igual o menor que


cero
la busqueda es en Fox
** pIndice: Nombre del Indice, Busqueda fox
** pCampo: Campo por cual buscar, Busqueda en SQL
** pValor: Valor a buscar
** Retorna -1 si hay error en Sql, 0 si no la encuentra, 1 si la


encuentra
Local lResultado, lCadena, lValor, lResult
lResultado = 0
lValor = pValor
If pConexion>0
Do CASE
Case TYPE("lValor") = "N"
lValor = ALLTRIM(STR(pValor))
Otherwise
lValor = "'" + RTRIM(pValor) + "'"
Endcase
lCadena = "SELECT * FROM " + UPPER(ALLTRIM(pTabla)) + " WHERE " +;
UPPER(ALLTRIM(pCampo)) + " = " + lValor
If sqlexec(pConexion,lCadena,pTablaAlias)<1
Return -1
Endif
lResultado =iif(!EOF(pTablaAlias),1,0)
Else
lResultado =iif(SEEK(pValor,pTabla,pIndice),1,0)
Endif
Return lResultado
Endfunc


Saludos


Jóse G. Samper
Microsoft Visual FoxPro MVP - Venezuela

"Marcelo Rodrigo Sosa" escribió en el


mensaje
news:
> Hola compañeros, cual seria el codigo equivalente para obtener lo
siguiente
> programando para cliente / servidor (para SQL).
>
> if seek(clave,'mitabla','miclave')
> ? registro encontrado
> else
> ? no exite el registro
> endif
>
> Digo por que me dijeron que la funcion seek() no sirve para programar
> cliente/servidor por el solo hecho que no existe en SQL.
> Desde ya muchas gracias.
> Saludos.
>
>


Respuesta Responder a este mensaje
#3 José G. Samper
10/07/2003 - 22:38 | Informe spam
Hola Fernando como estas, Gracias por la explicación, pero creo que esta
definición de la función esta errada

Esto te garantizo sera mucho mas rapido que cualquier funcion adicional


que
puedas implementar, y tener que pasar, N cantidad de registros por la red


a
un cursor local de vfp y alli realizar tu busqueda.



Esta función no trae todos los datos desde SQL y luego los busca en el
cursor fox, lo que hace es que buscar información necesaria de un registro
por campo clave ya sea en fox o sql, me explico

Supongamos que queremos elaborar un procedimiento que trae la información de
varias tablas que te debe funcionar tanto para fox como para sql.

si lo elaboras en fox seria
use mitabla alias mialias in 0 again shared
if seek(clave,'mialias','miindice')
*** manejo de la información
lcosto=mialias.costo
endif

si lo elaboras en sql seria
If sqlexec(pConexion,'select * from mitabla where
campoclave=?clave','mialias')>1
*** manejo de la información
lcosto=mialias.costo
endif

lo que hace esta funcion es traer la información requerida del registro
independientemente estes en fox o en sql

if
FindRegistro('mitabla','mialias',pConexion,'miindice','campoclave','clave')>
0
*** manejo de la información
lcosto=mialias.costo
endif

A mi me ha resultado muy util para la elaboración de procesos que sean
corran tanto en fox como para sql, de esta forma no tengo que elaborar
código por separado

Saludos

Jóse G. Samper
Microsoft Visual FoxPro MVP - Venezuela

"Fernando España" escribió en el mensaje
news:#
La funcion me parece muy buena, pero creo que estarias sub utilizando las
condiciones de trabajo en SQL Server, a mi criterio, deberias de tomar en
cuenta primero que es lo que necesitas realizar con ese tipo de consultas.
Podriamos pensar asi:

Supon que lo que necesitas es validar la existencia de ese registro para
permitir algun tipo de insercion de datos o modificacion de los mismos,+
podrias implmentas en el trigger respectivo el siguiente codigo:

if exists(select 1 from tu_tabla where tu_condicion)
** esta linea evaluara que exista el registro que necesitas, si la
expresion se evalua, seguidamente usas la instruccion
** contenida entre un begin y un end, para realizar la accion, en caso
se cumpla la condicion.

begin
print 'si existe' -- Aca puedes colocar el codigo
adicional
end


Por otro lado, si lo que necesitas es evaluar desde tu aplicacion la
existencia de esa informacion, para efectos unicamente de informacion, no


de
manipulacion de datos, porque eso seria mejor hacerlo lado servidor,


puedes
implementarlo con SQLPrepare y SQL exec, enviando dentro de la sentencia


SQl
la
misma cadena IF EXISTS( Select) seguido del begin y end, y devolver a VFP


un
conjunto de resultados.

Esto te garantizo sera mucho mas rapido que cualquier funcion adicional


que
puedas implementar, y tener que pasar, N cantidad de registros por la red


a
un cursor local de vfp y alli realizar tu busqueda.

Saludos.

Fernando España






"José G. Samper" wrote in message
news:
> Hola como estas, espero te sirva esta función busca en fox o sql segun


sea
> requerido
>
> Function FindRegistro
> Lparameters pTabla, pTablaAlias, pConexion, pIndice, pCampo, pValor
> ** pTabla: Tabla a en donde buscar
> ** pTablaAlias: Nombre del cursor a devolver en caso de ser SQL
> ** pConexion: Número de Conexión se asume que si es igual o menor que
cero
> la busqueda es en Fox
> ** pIndice: Nombre del Indice, Busqueda fox
> ** pCampo: Campo por cual buscar, Busqueda en SQL
> ** pValor: Valor a buscar
> ** Retorna -1 si hay error en Sql, 0 si no la encuentra, 1 si la
encuentra
> Local lResultado, lCadena, lValor, lResult
> lResultado = 0
> lValor = pValor
> If pConexion>0
> Do CASE
> Case TYPE("lValor") = "N"
> lValor = ALLTRIM(STR(pValor))
> Otherwise
> lValor = "'" + RTRIM(pValor) + "'"
> Endcase
> lCadena = "SELECT * FROM " + UPPER(ALLTRIM(pTabla)) + " WHERE " +;
> UPPER(ALLTRIM(pCampo)) + " = " + lValor
> If sqlexec(pConexion,lCadena,pTablaAlias)<1
> Return -1
> Endif
> lResultado =iif(!EOF(pTablaAlias),1,0)
> Else
> lResultado =iif(SEEK(pValor,pTabla,pIndice),1,0)
> Endif
> Return lResultado
> Endfunc
>
>
> Saludos
>
>
> Jóse G. Samper
> Microsoft Visual FoxPro MVP - Venezuela
>
> "Marcelo Rodrigo Sosa" escribió en el
mensaje
> news:
> > Hola compañeros, cual seria el codigo equivalente para obtener lo
> siguiente
> > programando para cliente / servidor (para SQL).
> >
> > if seek(clave,'mitabla','miclave')
> > ? registro encontrado
> > else
> > ? no exite el registro
> > endif
> >
> > Digo por que me dijeron que la funcion seek() no sirve para programar
> > cliente/servidor por el solo hecho que no existe en SQL.
> > Desde ya muchas gracias.
> > Saludos.
> >
> >
>
>


Respuesta Responder a este mensaje
#4 José G. Samper
10/07/2003 - 23:24 | Informe spam
Fernando, realmente tienes toda la razón del mundo con respecto al buen uso
de SQL, pero hay veces que tengo que desarrollar código que corra igual
tanto para fox como para Sql, tu sabes que el cliente siempre tiene la razón
y hay veces que ni modo si el lo pide asi, se le desarrolla.

Muchisimas gracias y Saludos

Jóse G. Samper
Microsoft Visual FoxPro MVP - Venezuela


"Fernando España" escribió en el mensaje
news:
ok, perfecto, y gracias por la aclaracion. Lo que sucede, es que


trabajando
con SQL Server, casi nunca necesitas
usar una funcion de ese tipo, y devuelves solo 0 o 1 segun sea tu


necesidad,
pero bueno, cada quien tiene su forma de trabajo.

saludos,

Fernando España.


"José G. Samper" wrote in message
news:
> Hola Fernando como estas, Gracias por la explicación, pero creo que


esta
> definición de la función esta errada
>
> > Esto te garantizo sera mucho mas rapido que cualquier funcion


adicional
> que
> > puedas implementar, y tener que pasar, N cantidad de registros por la
red
> a
> > un cursor local de vfp y alli realizar tu busqueda.
>
> Esta función no trae todos los datos desde SQL y luego los busca en el
> cursor fox, lo que hace es que buscar información necesaria de un
registro
> por campo clave ya sea en fox o sql, me explico
>
> Supongamos que queremos elaborar un procedimiento que trae la


información
de
> varias tablas que te debe funcionar tanto para fox como para sql.
>
> si lo elaboras en fox seria
> use mitabla alias mialias in 0 again shared
> if seek(clave,'mialias','miindice')
> *** manejo de la información
> lcosto=mialias.costo
> endif
>
> si lo elaboras en sql seria
> If sqlexec(pConexion,'select * from mitabla where
> campoclave=?clave','mialias')>1
> *** manejo de la información
> lcosto=mialias.costo
> endif
>
> lo que hace esta funcion es traer la información requerida del registro
> independientemente estes en fox o en sql
>
> if
>



FindRegistro('mitabla','mialias',pConexion,'miindice','campoclave','clave')>
> 0
> *** manejo de la información
> lcosto=mialias.costo
> endif
>
> A mi me ha resultado muy util para la elaboración de procesos que sean
> corran tanto en fox como para sql, de esta forma no tengo que elaborar
> código por separado
>
> Saludos
>
> Jóse G. Samper
> Microsoft Visual FoxPro MVP - Venezuela
>
> "Fernando España" escribió en el
mensaje
> news:#
> > La funcion me parece muy buena, pero creo que estarias sub utilizando
las
> > condiciones de trabajo en SQL Server, a mi criterio, deberias de tomar
en
> > cuenta primero que es lo que necesitas realizar con ese tipo de
consultas.
> > Podriamos pensar asi:
> >
> > Supon que lo que necesitas es validar la existencia de ese registro


para
> > permitir algun tipo de insercion de datos o modificacion de los


mismos,+
> > podrias implmentas en el trigger respectivo el siguiente codigo:
> >
> > if exists(select 1 from tu_tabla where tu_condicion)
> > ** esta linea evaluara que exista el registro que necesitas, si la
> > expresion se evalua, seguidamente usas la instruccion
> > ** contenida entre un begin y un end, para realizar la accion, en
caso
> > se cumpla la condicion.
> >
> > begin
> > print 'si existe' -- Aca puedes colocar el codigo
> > adicional
> > end
> >
> >
> > Por otro lado, si lo que necesitas es evaluar desde tu aplicacion la
> > existencia de esa informacion, para efectos unicamente de informacion,
no
> de
> > manipulacion de datos, porque eso seria mejor hacerlo lado servidor,
> puedes
> > implementarlo con SQLPrepare y SQL exec, enviando dentro de la


sentencia
> SQl
> > la
> > misma cadena IF EXISTS( Select) seguido del begin y end, y devolver a
VFP
> un
> > conjunto de resultados.
> >
> > Esto te garantizo sera mucho mas rapido que cualquier funcion


adicional
> que
> > puedas implementar, y tener que pasar, N cantidad de registros por la
red
> a
> > un cursor local de vfp y alli realizar tu busqueda.
> >
> > Saludos.
> >
> > Fernando España
> >
> >
> >
> >
> >
> >
> > "José G. Samper" wrote in message
> > news:
> > > Hola como estas, espero te sirva esta función busca en fox o sql


segun
> sea
> > > requerido
> > >
> > > Function FindRegistro
> > > Lparameters pTabla, pTablaAlias, pConexion, pIndice, pCampo, pValor
> > > ** pTabla: Tabla a en donde buscar
> > > ** pTablaAlias: Nombre del cursor a devolver en caso de ser SQL
> > > ** pConexion: Número de Conexión se asume que si es igual o menor


que
> > cero
> > > la busqueda es en Fox
> > > ** pIndice: Nombre del Indice, Busqueda fox
> > > ** pCampo: Campo por cual buscar, Busqueda en SQL
> > > ** pValor: Valor a buscar
> > > ** Retorna -1 si hay error en Sql, 0 si no la encuentra, 1 si la
> > encuentra
> > > Local lResultado, lCadena, lValor, lResult
> > > lResultado = 0
> > > lValor = pValor
> > > If pConexion>0
> > > Do CASE
> > > Case TYPE("lValor") = "N"
> > > lValor = ALLTRIM(STR(pValor))
> > > Otherwise
> > > lValor = "'" + RTRIM(pValor) + "'"
> > > Endcase
> > > lCadena = "SELECT * FROM " + UPPER(ALLTRIM(pTabla)) + " WHERE "


+;
> > > UPPER(ALLTRIM(pCampo)) + " = " + lValor
> > > If sqlexec(pConexion,lCadena,pTablaAlias)<1
> > > Return -1
> > > Endif
> > > lResultado =iif(!EOF(pTablaAlias),1,0)
> > > Else
> > > lResultado =iif(SEEK(pValor,pTabla,pIndice),1,0)
> > > Endif
> > > Return lResultado
> > > Endfunc
> > >
> > >
> > > Saludos
> > >
> > >
> > > Jóse G. Samper
> > > Microsoft Visual FoxPro MVP - Venezuela
> > >
> > > "Marcelo Rodrigo Sosa" escribió en el
> > mensaje
> > > news:
> > > > Hola compañeros, cual seria el codigo equivalente para obtener lo
> > > siguiente
> > > > programando para cliente / servidor (para SQL).
> > > >
> > > > if seek(clave,'mitabla','miclave')
> > > > ? registro encontrado
> > > > else
> > > > ? no exite el registro
> > > > endif
> > > >
> > > > Digo por que me dijeron que la funcion seek() no sirve para
programar
> > > > cliente/servidor por el solo hecho que no existe en SQL.
> > > > Desde ya muchas gracias.
> > > > Saludos.
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#5 Fernando España
11/07/2003 - 02:11 | Informe spam
tienes razon, solo que como el señor dijo SQL, por eso.

saludos,
F. España

"José G. Samper" wrote in message
news:%
Fernando, realmente tienes toda la razón del mundo con respecto al buen


uso
de SQL, pero hay veces que tengo que desarrollar código que corra igual
tanto para fox como para Sql, tu sabes que el cliente siempre tiene la


razón
y hay veces que ni modo si el lo pide asi, se le desarrolla.

Muchisimas gracias y Saludos

Jóse G. Samper
Microsoft Visual FoxPro MVP - Venezuela


"Fernando España" escribió en el


mensaje
news:
> ok, perfecto, y gracias por la aclaracion. Lo que sucede, es que
trabajando
> con SQL Server, casi nunca necesitas
> usar una funcion de ese tipo, y devuelves solo 0 o 1 segun sea tu
necesidad,
> pero bueno, cada quien tiene su forma de trabajo.
>
> saludos,
>
> Fernando España.
>
>
> "José G. Samper" wrote in message
> news:
> > Hola Fernando como estas, Gracias por la explicación, pero creo que
esta
> > definición de la función esta errada
> >
> > > Esto te garantizo sera mucho mas rapido que cualquier funcion
adicional
> > que
> > > puedas implementar, y tener que pasar, N cantidad de registros por


la
> red
> > a
> > > un cursor local de vfp y alli realizar tu busqueda.
> >
> > Esta función no trae todos los datos desde SQL y luego los busca en el
> > cursor fox, lo que hace es que buscar información necesaria de un
> registro
> > por campo clave ya sea en fox o sql, me explico
> >
> > Supongamos que queremos elaborar un procedimiento que trae la
información
> de
> > varias tablas que te debe funcionar tanto para fox como para sql.
> >
> > si lo elaboras en fox seria
> > use mitabla alias mialias in 0 again shared
> > if seek(clave,'mialias','miindice')
> > *** manejo de la información
> > lcosto=mialias.costo
> > endif
> >
> > si lo elaboras en sql seria
> > If sqlexec(pConexion,'select * from mitabla where
> > campoclave=?clave','mialias')>1
> > *** manejo de la información
> > lcosto=mialias.costo
> > endif
> >
> > lo que hace esta funcion es traer la información requerida del


registro
> > independientemente estes en fox o en sql
> >
> > if
> >
>



FindRegistro('mitabla','mialias',pConexion,'miindice','campoclave','clave')>
> > 0
> > *** manejo de la información
> > lcosto=mialias.costo
> > endif
> >
> > A mi me ha resultado muy util para la elaboración de procesos que sean
> > corran tanto en fox como para sql, de esta forma no tengo que elaborar
> > código por separado
> >
> > Saludos
> >
> > Jóse G. Samper
> > Microsoft Visual FoxPro MVP - Venezuela
> >
> > "Fernando España" escribió en el
> mensaje
> > news:#
> > > La funcion me parece muy buena, pero creo que estarias sub


utilizando
> las
> > > condiciones de trabajo en SQL Server, a mi criterio, deberias de


tomar
> en
> > > cuenta primero que es lo que necesitas realizar con ese tipo de
> consultas.
> > > Podriamos pensar asi:
> > >
> > > Supon que lo que necesitas es validar la existencia de ese registro
para
> > > permitir algun tipo de insercion de datos o modificacion de los
mismos,+
> > > podrias implmentas en el trigger respectivo el siguiente codigo:
> > >
> > > if exists(select 1 from tu_tabla where tu_condicion)
> > > ** esta linea evaluara que exista el registro que necesitas, si


la
> > > expresion se evalua, seguidamente usas la instruccion
> > > ** contenida entre un begin y un end, para realizar la accion,


en
> caso
> > > se cumpla la condicion.
> > >
> > > begin
> > > print 'si existe' -- Aca puedes colocar el codigo
> > > adicional
> > > end
> > >
> > >
> > > Por otro lado, si lo que necesitas es evaluar desde tu aplicacion la
> > > existencia de esa informacion, para efectos unicamente de


informacion,
> no
> > de
> > > manipulacion de datos, porque eso seria mejor hacerlo lado servidor,
> > puedes
> > > implementarlo con SQLPrepare y SQL exec, enviando dentro de la
sentencia
> > SQl
> > > la
> > > misma cadena IF EXISTS( Select) seguido del begin y end, y devolver


a
> VFP
> > un
> > > conjunto de resultados.
> > >
> > > Esto te garantizo sera mucho mas rapido que cualquier funcion
adicional
> > que
> > > puedas implementar, y tener que pasar, N cantidad de registros por


la
> red
> > a
> > > un cursor local de vfp y alli realizar tu busqueda.
> > >
> > > Saludos.
> > >
> > > Fernando España
> > >
> > >
> > >
> > >
> > >
> > >
> > > "José G. Samper" wrote in message
> > > news:
> > > > Hola como estas, espero te sirva esta función busca en fox o sql
segun
> > sea
> > > > requerido
> > > >
> > > > Function FindRegistro
> > > > Lparameters pTabla, pTablaAlias, pConexion, pIndice, pCampo,


pValor
> > > > ** pTabla: Tabla a en donde buscar
> > > > ** pTablaAlias: Nombre del cursor a devolver en caso de ser SQL
> > > > ** pConexion: Número de Conexión se asume que si es igual o menor
que
> > > cero
> > > > la busqueda es en Fox
> > > > ** pIndice: Nombre del Indice, Busqueda fox
> > > > ** pCampo: Campo por cual buscar, Busqueda en SQL
> > > > ** pValor: Valor a buscar
> > > > ** Retorna -1 si hay error en Sql, 0 si no la encuentra, 1 si la
> > > encuentra
> > > > Local lResultado, lCadena, lValor, lResult
> > > > lResultado = 0
> > > > lValor = pValor
> > > > If pConexion>0
> > > > Do CASE
> > > > Case TYPE("lValor") = "N"
> > > > lValor = ALLTRIM(STR(pValor))
> > > > Otherwise
> > > > lValor = "'" + RTRIM(pValor) + "'"
> > > > Endcase
> > > > lCadena = "SELECT * FROM " + UPPER(ALLTRIM(pTabla)) + " WHERE "
+;
> > > > UPPER(ALLTRIM(pCampo)) + " = " + lValor
> > > > If sqlexec(pConexion,lCadena,pTablaAlias)<1
> > > > Return -1
> > > > Endif
> > > > lResultado =iif(!EOF(pTablaAlias),1,0)
> > > > Else
> > > > lResultado =iif(SEEK(pValor,pTabla,pIndice),1,0)
> > > > Endif
> > > > Return lResultado
> > > > Endfunc
> > > >
> > > >
> > > > Saludos
> > > >
> > > >
> > > > Jóse G. Samper
> > > > Microsoft Visual FoxPro MVP - Venezuela
> > > >
> > > > "Marcelo Rodrigo Sosa" escribió en


el
> > > mensaje
> > > > news:
> > > > > Hola compañeros, cual seria el codigo equivalente para obtener


lo
> > > > siguiente
> > > > > programando para cliente / servidor (para SQL).
> > > > >
> > > > > if seek(clave,'mitabla','miclave')
> > > > > ? registro encontrado
> > > > > else
> > > > > ? no exite el registro
> > > > > endif
> > > > >
> > > > > Digo por que me dijeron que la funcion seek() no sirve para
> programar
> > > > > cliente/servidor por el solo hecho que no existe en SQL.
> > > > > Desde ya muchas gracias.
> > > > > Saludos.
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>


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