Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-06-2012
d3nz1g d3nz1g is offline
Miembro
NULL
 
Registrado: jun 2012
Posts: 10
Poder: 0
d3nz1g Va por buen camino
Question Obtener valor númerico de procedimiento almacenado

Un saludo a tod@s,

Tengo una duda que quizás me puedan ayudar a despejar, sin mas preámbulos vamos al problema:

Estoy trabajando en una aplicación conectada a una BD SQL (Server o cualquier otra). Para realizar las consultas sobre la BD utilizo dos métodos (mediante DBExpress):

1. obtenerConsulta : me devuelve un ClientDataSet con los resultados consultados.

2. ejecutarConsulta: ejecuta una sentencia SQL dada y me devuelve un valor entero.

Este ultimo metodo (ejecutarConsulta) en realidad lo que hace es declarar un TSQLQuery y ejecutar un ExecSql, que como supongo muchos saben devuelve el número de filas afectadas por la consulta.

Cita:
...
SQL.Clear;
SQL.Add(query);
Result := ExecSQL(true);
Aqui es donde surge el problema: resulta que mediante el ExecSQL estoy ejecutando un procedimiento almacenado que inserta un registro en una tabla dadas ciertas condiciones, pero ademas de esto me devuelve un valor numerico significando si realizo la insercion (1), o si no la inserto porque el registro ya exisitía (2) o no cumplía una condición dada (3).

Así, mi pregunta es la siguiente: ¿Existirá alguna manera de ejecutar un procedimiento almacenado que realize modificaciones a la BD y que me devuelva un valor numerico que no sea el numero de filas afectadas?

Ya intente ejecutando el procedimiento almacenado mediante el comando Open; en este caso si puedo obtener el valor númerico pero se cae en el caso de tener tener que realizar la insercion (caso 1)...

Alguna idea? Gracias y saludos.
Responder Con Cita
  #2  
Antiguo 08-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Y qué base de datos es?

En principio, un procedimiento almacenado puede devolver lo que tú quieras, así que no habría problema.
Responder Con Cita
  #3  
Antiguo 09-06-2012
d3nz1g d3nz1g is offline
Miembro
NULL
 
Registrado: jun 2012
Posts: 10
Poder: 0
d3nz1g Va por buen camino
Actualmente estoy trabajando en SQL Server.

El procedimiento almancenado como tal si esta devolviendo el valor esperado, el problema es como obtener ese valor desde Delphi, ya que el ExecSQL no retorna el valor que devuelve el procedimiento almacenado sino la cantidad de filas afectadas...

Me doy a entender?

Gracias por la respuesta.
Responder Con Cita
  #4  
Antiguo 09-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Supongo que el sql server que usas es el de microsoft.
Y creo que preguntas por un procedimiento almacenado llamado desde delphi.

Para obtener el valor devuelto, algo así, es sólo un ejemplo:

Código Delphi [-]
query.parambyname('codigo').asinteger := 1;
query.execsql;
valordevuelto := query.fields[0].asinteger;          //  así 
valordevuelto := query.fieldbyname('valor').asinteger;  // o así
Responder Con Cita
  #5  
Antiguo 19-06-2012
d3nz1g d3nz1g is offline
Miembro
NULL
 
Registrado: jun 2012
Posts: 10
Poder: 0
d3nz1g Va por buen camino
Gracias Casimiro, lamento haber durado tanto en responder pero estuve realizando bastantes pruebas al respecto... Comento mis resultados:

Intente por todos los medios de realizar la consulta como sugeriste pero no logre echarla a andar.... El execsql no me permite obtener el valor devuelto, esto solo lo pude conseguir mediante el comando open, pero este no me permite realizar la inserción que necesito efectuar mediante el procedimiento almacenado.

Así que después de mucho batallar con el problema decidí que talvez habia una manera mas simple de abordar el problema, y la encontre utilizando el componente ClientDataSet. La idea de utilizar procedimientos almacenados era para optimizar al máximo la velocidad de las consultas pues estaba editando la base de datos directamente, al lograr trabajar mediante el CDS se me solucionaron un montón de problemas asi como también logre optimizar enormemente el tiempo de respuesta de mi aplicación!

Ahora tengo una nueva duda, pero ya no pertenece a este hilo, así que Casimiro muchas gracias por tu tiempo y atención.
Responder Con Cita
  #6  
Antiguo 19-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Bueno, voy a ver el otro hilo, a ver si conozco la respuesta
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Rescatar valor desde Procedimiento Almacenado en Delphi 7 Confucio SQL 3 11-03-2009 01:32:53
Obtener Fecha y Hora en un Procedimiento Almacenado Efren2006 SQL 2 17-01-2009 15:04:38
obtener valor numerico de una excepcion Enan0 Varios 1 06-08-2005 00:54:35
Mostrar valor de DBEDIT con Procedimiento Almacenado JoanKa Firebird e Interbase 3 05-06-2005 11:10:35
Procedimiento almacenado para obtener Rubros y subrubros oliverinf Firebird e Interbase 7 27-08-2004 01:25:42


La franja horaria es GMT +2. Ahora son las 13:56:43.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi