Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-06-2018
carlos gonzalez carlos gonzalez is offline
Miembro
 
Registrado: May 2005
Posts: 99
Poder: 14
carlos gonzalez Va por buen camino
Obtener Resulta de Funcion SQL con DBExpress

Hola amigos buenos días.
Alguien sabe si es posible obtener el resultado de una función de SQL SERVER con DBEXPRESS del Delphi 7, he estado buscando información en los foros y no he encontrado nada lo poco que he encontrado es con ADO, como el sistema todo esta desarrollado con DBEXPRESS es por ello mi necesidad, si alguien sabe si es posible y me puede compartir el componente a usar o la sintaxis se los voy agradecer enormemente.


Su amigo Charless
Responder Con Cita
  #2  
Antiguo 12-06-2018
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: Jul 2004
Ubicación: Barcelona - España
Posts: 15.685
Poder: 10
Neftali [Germán.Estévez] Tiene un aura espectacularNeftali [Germán.Estévez] Tiene un aura espectacular
Puedes ejecutarla dentro de una SELECT (dependiendo del tipo de función) y recoger el resultado de la select de la forma estandard.


Código SQL [-]
SELECT GETDATE() as fecha
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 12-06-2018
carlos gonzalez carlos gonzalez is offline
Miembro
 
Registrado: May 2005
Posts: 99
Poder: 14
carlos gonzalez Va por buen camino
El problema lo tengo con una función ( Un store procedure de sql server) es un store que genera varios cálculos y al final regresa un valor, quiere ver si con algún componente de dbexpress puedo obtener ese dato, para ejecutarlo no tengo problema lo hago con un tsimpledataset, para obtener el valor de retorno quise hacer esto pero no funciono:

SQLStoredProc1.Name:='validaCION';
SQLStoredProc1.ParamByName('FOLIO').VALUE := folio;
SQLStoredProc1.ExecProc;
Responder Con Cita
  #4  
Antiguo 12-06-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: Sep 2004
Ubicación: En algún lugar.
Posts: 28.571
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Más o menos así (depende de qué tipo sea el campo):
Código Delphi [-]
Result := FieldByName('elcampoquesea').AsString;

¡¡¡Y no olvides las etiquetas para el código fuente!!!

Responder Con Cita
  #5  
Antiguo 12-06-2018
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: Dec 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.114
Poder: 30
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

El problema para nosotros es que desconocemos nombres y tipos de los parámetros que se le deben enviar al procedimiento almacenado, así como también el nombre y el tipo del retorno.

No trabajo con MS-SQLServer, pero en líneas generales creo que al componente deberías darle minimamente esos datos. Pongamos, por citar un ejemplo, un stored procedure que realize lo mismo que la función Pos de Delphi:
Código Delphi [-]
...
begin
  SQLStoredProc1.SQLConnection  := SQLConnection1;
  SQLStoredProc1.StoredProcName := 'POS';  // nombre del stored procedure
  SQLStoredProc1.Params.ParamByName('SUBSTR').AsString := 'MUNDO';  // un parámetro,
  SQLStoredProc1.Params.ParamByName('STR').AsString    := 'HOLA MUNDO';  // otro...
  SQLStoredProc1.ExecProc;
  ShowMessage(SQLStoredProc1.Params.ParamByName('RESULT').AsString); { muestra: 6 }
end;
Ese es el modo en que funciona en los RDBMS que he trabajado, así que pienso que también debería hacerlo en MS-SQLServer...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 13-06-2018
carlos gonzalez carlos gonzalez is offline
Miembro
 
Registrado: May 2005
Posts: 99
Poder: 14
carlos gonzalez Va por buen camino
Ya hice la prueba y me marca que no encuentra el parámetro, esta es la función que espero cachar el resultado que retorna

CREATE FUNCTION [dbo].[VALIDACION]
(@FOLIO as varchar(50) )

returns varchar(10)
as
begin
declare @ent as integer, @sal as integer,@resul varchar(10)
set @ent = (select count(*) from dbo.entrada WHERE FOLIO=@FOLIO)
set @SAL = (select count(*) from dbo.SALIDAS WHERE FOLIO=@FOLIO)


set @resul = convert(varchar(10), @ent) +convert(varchar(10), @SAL)

return @resul
end
Responder Con Cita
  #7  
Antiguo 13-06-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: Sep 2004
Ubicación: En algún lugar.
Posts: 28.571
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Casimiro Notevi Ver Mensaje
¡¡¡Y no olvides las etiquetas para el código fuente!!!













!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Responder Con Cita
  #8  
Antiguo 13-06-2018
bucanero bucanero is offline
Miembro
 
Registrado: Nov 2013
Ubicación: Almería, España
Posts: 111
Poder: 5
bucanero Va por buen camino
Hola a todos,

como ya te ha comentado CASIMIRO NOTEVI, al tratarse de una funcion debes de utilizar un TSQLQuery, el problema lo puedes tener por la forma en que hay que realizar llamadas en MSSQLServer a funciones y procedimientos, prueba este código:

Código Delphi [-]

  function validacion(folio: string): string;
  begin
    // SQLQuery1 es de tipo TSQLQuery
    with SQLQuery1 do begin
      SQLConnection := SQLConnection1;
      SQL.clear;
      SQL.Add('SELECT [dbo].[VALIDACION](:folio) as RES;');
      Params.ParamByName('folio').Value := folio;
      open;
      Result:=FieldByName('RES').value;

      close;
    end;
  end;

begin
  MessageDlg(validacion('tu valor'), mtInformation, [mbOK], 0);
end;
Responder Con Cita
  #9  
Antiguo 13-06-2018
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: Jul 2004
Ubicación: Barcelona - España
Posts: 15.685
Poder: 10
Neftali [Germán.Estévez] Tiene un aura espectacularNeftali [Germán.Estévez] Tiene un aura espectacular
Generando una función como esta (que es la misma que la tuya, pero usando una par tablas mías):


Código SQL [-]
CREATE FUNCTION dbo.VALIDACION (@FOLIO as VARCHAR(10) )

returns varchar(10)
as
begin
declare @ent as integer, @sal as integer,@resul varchar(10)

set @ent = (select count(*) from usuarios )
set @SAL = (select count(*) from tablas )

set @resul = convert(varchar(10), @ent) +convert(varchar(10), @SAL)

return @resul
end
GO


Y ejecutrando esta consulta:


Código SQL [-]
  SELECT dbo.validacion('11') AS RESULTADO


Obtienes un único registro con el valor resultado.
Para obtenerlo desde Delphi, tal y como han comentado un TQuery (derivado).
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #10  
Antiguo 13-06-2018
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: Dec 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.114
Poder: 30
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.
Cita:
Empezado por carlos gonzalez Ver Mensaje
Ya hice la prueba y me marca que no encuentra el parámetro, esta es la función que espero cachar el resultado que retorna
...
Ayudaría mucho que copiaras/pegaras exáctamente el mensaje de error que te indica.

Una misma función o stored procedure debería poderse llamar desde ambos componentes, ya sea TSQLStoredProc o TSQLQuery con el mismo resultado.

Repitiendo el ejemplo anterior, del mismo modo funciona:
Código Delphi [-]
...
begin
  SQLQuery1.Close;
  SQLQuery1.SQL.Text := 'SELECT RESULT FROM POS(:SUBSTR, :STR)';
  SQLQuery1.ParamByName('SUBSTR').AsString := 'MUNDO';
  SQLQuery1.ParamByName('STR').AsString    := 'HOLA MUNDO';
  SQLQuery1.Open;
  ShowMessage(SQLQuery1.Fields[0].AsString);  { muestra: 6 }
end;
Para el primer ejemplo usé el TSQLStoredProc ya que ese figuraba en tu intento.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
ORDER BY No resulta con CHAR MAXIUM Firebird e Interbase 17 14-03-2017 09:07:43
Obtener el parametro de salida de una funcion de Sql en Delphi titooo MS SQL Server 6 17-06-2013 15:35:46
(DBExpress)la función IsIndexField del TSQLQuery siempre me devuelve falso amezeta32 Conexión con bases de datos 0 17-08-2006 00:20:46
Como obtener los parametros para dbexpress al conectarme por odbc..! Arturo Conexión con bases de datos 2 20-05-2006 00:51:42
consulta SQL que me resulta compleja j2mg SQL 5 29-05-2003 22:50:13


La franja horaria es GMT +2. Ahora son las 15:35:05.


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