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 Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-12-2021
jahir1403 jahir1403 is offline
Registrado
 
Registrado: dic 2021
Posts: 5
Poder: 0
jahir1403 Va por buen camino
Problemas con una consulta en un FDQuery

Buen día a todos...

Soy nuevo en el foto y estuve revisando las diferentes secciones y no se si aquí sea la correcto para postear mi duda, en caso de que no lo sea, una disculpa.

Mi duda es la siguiente, tengo mi componente FDQuery, en la cual tengo una consulta la que anteriormente elabore dentro de mi SQL Server y corre de manera correcta, la paso a mi FDQuery y de igual forma la ejecuta de manera correcta, pero cambie los valores que había puesto por default por un parámetro, ya que mi idea es pasarle una cadena string a un parámetro al FDQuery, cuando hago eso ya no me devulve nada de la consulta. Pondré los ejemplos de la consulta en mi FDQuery (con el parámetro) y mi código donde paso mi cadena string al parámetro del FDQuery.

--------------------------- Consulta FDQuery -------------------------------------------------------------------------
Código SQL [-]
select ISNULL(sp.sol_polizaID,'-') as POLIZA, ISNULL(sc.sco_solicitud,'-') as SOLICITUD, cc.cfd_comprobacion as COMPROBACION, cp.cfd_fechaEmision as FECHA_EMISION, 
cp.cfd_emisor as A_NOMBRE_DE, cp.cfd_uuid as UUID_INGRESO, cp.cfd_tipoDeComprobante as TIPO_DE_COMPROBANTE, cp.cfd_total as MONTO,
ISNULL (cp.cfd_importePagado, 0) as IMPORTE_PAGADO,
ISNULL(cp.cfd_saldoInsoluto, cp.cfd_total) as SALDO_PENDIENTE, ISNULL(sp.sol_folioContabilizacion,'-') as ENLACE_COI, mpr.emp_descripcion as EMPRESA, 
dp.dep_descripcion as DEPARTAMENTO, emp.emp_codigo as CLAVE_USUARIO, 
CONCAT (emp.emp_nombre,' ',emp.emp_appaterno,' ', emp.emp_apmaterno) as USUARIO, st.sta_descripcion as ESTATUS, cp.cfd_uuid_pago as UUID_PAGO,
'-' as FECHA_LIMITE
from cfd_pagos cp
join comprobacion_cfd cc
on cp.cfd_uuid = cc.cfd_uuid
left join solicitud_comprobacion sc
on cc.cfd_comprobacion = sc.sco_comprobacion
join comprobacion_gasto cg
on cc.cfd_comprobacion = cg.com_id
join departamentos dp
on cg.com_depto_id = dp.dep_codigo
join usuarios us
on cg.com_usuario = us.usr_codigo
join empleados emp
on us.usr_empleado = emp.emp_codigo
join empresas mpr
on cg.com_emp_id = mpr.emp_id
join r_status st
on cp.cfd_estatus = st.sta_id
left join solicitud_pago sp
on sc.sco_solicitud = sp.sol_id
where cp.cfd_metodoPago = 'PPD' and cc.cfd_estado = 1 and 
cp.cfd_uuid in (:cadena_parametro)
union all
select '-' as poliza, '-' as solicitud, '-' as comprobacion, cfd_fechaEmision, cfd_emisor, 
cfd_uuid, cfd_tipoDeComprobante, 0 as total, cfd_importePagado as ImportePagado, cfd_saldoInsoluto as saldoInsoluto, '-' as enlaceCOI,
'-' as empresa, '-' as departamento, '-' as clave_usuario, '-' as usuario, sta_descripcion, 
cfd_uuid_pago, '-' as fechaLimite
from cfd_pagos
join r_status
on cfd_estatus = sta_id
where cfd_uuid_pago in (:cadena_parametro) and cfd_tipoDeComprobante = 'P'
order by cfd_uuid_pago

----------------- Codigo donde paso el parametro al FDQuery --------------------------------------

Código Delphi [-]
procedure TFConsultAdminPagos.btnRefrescarClick(Sender: TObject);
  var
  selection, arr_cfd_uuid : String;
  begin
    MClient.FDMCFDPagosXPPD.First;
    while not MClient.FDMCFDPagosXPPD.Eof do
    begin
      if MClient.FDMCFDPagosXPPDcheck_sta.AsInteger =  MOD_ACTIVO then
      begin

        if arr_cfd_uuid <> '' then
          arr_cfd_uuid := arr_cfd_uuid + ', ';

          arr_cfd_uuid := arr_cfd_uuid + QuotedStr(MClient.FDMCFDPagosXPPDcfd_uuid.AsString);

          selection := 'SI';
      end
      else
      begin
        if selection <> 'SI' then
        begin
          selection := 'NO';
        end;
      end;
        MClient.FDMCFDPagosXPPD.Next;
    end;

    if selection = 'NO' then
    begin
      msgbox('INFORMACIÓN','No se puede crear el documento debido a que no hay ningún registro seleccionado.',mtInformation,['OK'])
    end
    else
    begin
      FDQConsultaExportAdminPagos.Close;
      FDQConsultaExportAdminPagos.ParamByName('cadena_parametro').AsString := arr_cfd_uuid;
      FDQConsultaExportAdminPagos.Open();
      FDQConsultaExportAdminPagos.Active := true;
     // DataM.HojaExcel('Consulta Generica',DSExportAdminPagos,DBGExportarAdminPagos);
      msgbox('INFORMACIÓN','Se realizó la exportación de los registros.',mtInformation,['OK']);
    end;
  end;

----------------
el valor que contendría la variable arr_cfd_uuid := '''0D53DAD8-532B'', ''2519088A-ED56-4957'', ''9bc8dfcc-8bfb-4608'''

De antemano agradezco su apoyo y espero haber sido claro en mi explicación.
Saludos.

Última edición por Casimiro Notevi fecha: 16-12-2021 a las 17:22:04.
Responder Con Cita
  #2  
Antiguo 16-12-2021
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Se supone que debes usar = y no in?
Código SQL [-]
where cfd_uuid_pago in (:cadena_parametro) and cfd_tipoDeComprobante = 'P'
where cfd_uuid_pago = (:cadena_parametro) and cfd_tipoDeComprobante = 'P'
Responder Con Cita
  #3  
Antiguo 16-12-2021
jahir1403 jahir1403 is offline
Registrado
 
Registrado: dic 2021
Posts: 5
Poder: 0
jahir1403 Va por buen camino
Lo que pasa es que en mi consulta en SQL Server es igual que la que tengo en mi FDQuery donde pongo
where cfd_uuid_pago in ('0D53DAD8-532B', '2519088A-ED56-4957', '9bc8dfcc-8bfb-4608') and cfd_tipoDeComprobante = 'P' y funciona, me retorna los registros que quiero, lo replique en el fdquery donde en vez de pasarle los valores por consulta, se los paso por el parametro, por eso conservo el in. Aclaro, no se si sea la manera correcta o la pregunta sería ¿Cómo puedo pasar una cadena de string a un parametro de un FDQuery.

El valor de ejemplo es este: arr_cfd_uuid := '0D53DAD8-532B', '2519088A-ED56-4957', '9bc8dfcc-8bfb-4608', puede traer más valores como puede traer menos, pero esa es mi duda ¿Cómo puedo pasar una cadena como parametro y que el FDQuery me lo ejecute como lo hace el SQL Server?
Responder Con Cita
  #4  
Antiguo 16-12-2021
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No lo había entendido, o sea que pueden ir varios valores, por eso usas "in" (valor1, valor2, valor3...)
¿Puede ser el problema las mayúsculas/minúsculas?
Responder Con Cita
  #5  
Antiguo 16-12-2021
aposi aposi is offline
Miembro
 
Registrado: dic 2006
Posts: 146
Poder: 18
aposi Va por buen camino
Hola,
Has comprovado que el valor de la variable arr_cfd_uuid este bien?
'VALOR1','VALOR2','VALOR3'

Y antes del while inicializa la variable arr_cfd_uuid := '';

Última edición por aposi fecha: 16-12-2021 a las 19:03:04.
Responder Con Cita
  #6  
Antiguo 16-12-2021
jahir1403 jahir1403 is offline
Registrado
 
Registrado: dic 2021
Posts: 5
Poder: 0
jahir1403 Va por buen camino
Gracias a todos por sus comentarios, ya lo pude resolver, les comparto la solución por si a alguien más le llegase a pasar.


-------------- Consulta SQL --------------------------

Código SQL [-]
declare @arr_cfd_uuid varchar(max)= :arr_cfd_uuid

select ISNULL(sp.sol_polizaID,'-') as POLIZA, ISNULL(sc.sco_solicitud,'-') as SOLICITUD, cc.cfd_comprobacion as COMPROBACION, cp.cfd_fechaEmision as FECHA_EMISION, 
cp.cfd_emisor as A_NOMBRE_DE, cp.cfd_uuid as UUID_INGRESO, cp.cfd_tipoDeComprobante as TIPO_DE_COMPROBANTE, cp.cfd_total as MONTO,
ISNULL (cp.cfd_importePagado, 0) as IMPORTE_PAGADO,
ISNULL(cp.cfd_saldoInsoluto, cp.cfd_total) as SALDO_PENDIENTE, ISNULL(sp.sol_folioContabilizacion,'-') as ENLACE_COI, mpr.emp_descripcion as EMPRESA, 
dp.dep_descripcion as DEPARTAMENTO, emp.emp_codigo as CLAVE_USUARIO, 
CONCAT (emp.emp_nombre,' ',emp.emp_appaterno,' ', emp.emp_apmaterno) as USUARIO, st.sta_descripcion as ESTATUS, cp.cfd_uuid_pago as UUID_PAGO,
'-' as FECHA_LIMITE
from cfd_pagos cp
join comprobacion_cfd cc
on cp.cfd_uuid = cc.cfd_uuid
left join solicitud_comprobacion sc
on cc.cfd_comprobacion = sc.sco_comprobacion
join comprobacion_gasto cg
on cc.cfd_comprobacion = cg.com_id
join departamentos dp
on cg.com_depto_id = dp.dep_codigo
join usuarios us
on cg.com_usuario = us.usr_codigo
join empleados emp
on us.usr_empleado = emp.emp_codigo
join empresas mpr
on cg.com_emp_id = mpr.emp_id
join r_status st
on cp.cfd_estatus = st.sta_id
left join solicitud_pago sp
on sc.sco_solicitud = sp.sol_id
where cp.cfd_metodoPago = 'PPD' and cc.cfd_estado = 1 and 
cp.cfd_uuid in (select convert(varchar(50), value) from string_split(@arr_cfd_uuid, ',') )
union all
select '-' as poliza, '-' as solicitud, '-' as comprobacion, cfd_fechaEmision, cfd_emisor, 
cfd_uuid, cfd_tipoDeComprobante, 0 as total, cfd_importePagado as ImportePagado, cfd_saldoInsoluto as saldoInsoluto, '-' as enlaceCOI,
'-' as empresa, '-' as departamento, '-' as clave_usuario, '-' as usuario, sta_descripcion, 
cfd_uuid_pago, '-' as fechaLimite
from cfd_pagos
join r_status
on cfd_estatus = sta_id
where cfd_uuid_pago in (select convert(varchar(50), value) from string_split(@arr_cfd_uuid, ',') ) and cfd_tipoDeComprobante = 'P'
order by cfd_uuid_pago

--------------------- Código Delphi ------------------------

Código Delphi [-]
procedure TFConsultAdminPagos.btnRefrescarClick(Sender: TObject);
  var
  selection, arr_cfd_uuid : String;
  begin
    MClient.FDMCFDPagosXPPD.First;
    while not MClient.FDMCFDPagosXPPD.Eof do
    begin
      if MClient.FDMCFDPagosXPPDcheck_sta.AsInteger =  MOD_ACTIVO then
      begin
        if arr_cfd_uuid = '' then
        begin
          arr_cfd_uuid := MClient.FDMCFDPagosXPPDcfd_uuid.AsString;
        end
        else
        begin
           arr_cfd_uuid := arr_cfd_uuid + ',' + MClient.FDMCFDPagosXPPDcfd_uuid.AsString;
        end;
        selection := 'SI';
      end
      else
      begin
        if selection <> 'SI' then
        begin
          selection := 'NO';
        end;
      end;
        MClient.FDMCFDPagosXPPD.Next;
    end;

    if selection = 'NO' then
    begin
      msgbox('INFORMACIÓN','No se puede crear el documento debido a que no hay ningún registro seleccionado.',mtInformation,['OK'])
    end
    else
    begin
      FDQConsultaExportAdminPagos.Close;
      FDQConsultaExportAdminPagos.ParamByName('arr_cfd_uuid').AsString := arr_cfd_uuid;
      FDQConsultaExportAdminPagos.Open();
      //FDQConsultaExportAdminPagos.Active := true;
     // DataM.HojaExcel('Consulta Generica',DSExportAdminPagos,DBGExportarAdminPagos);
      msgbox('INFORMACIÓN','Se realizó la exportación de los registros.',mtInformation,['OK']);
    end;
  end;

Espero que si alguien tiene el mismo problema, esto le pueda ayudar.
Saludos y muchas gracias a todos por sus respuestas.

Última edición por Casimiro Notevi fecha: 16-12-2021 a las 21:10:26.
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
FDQuery con parámetros juanca2m FireMonkey 4 07-08-2020 04:29:20
Mostrar todos los registros de un select * from con un FDQuery Soa Pelaez Varios 3 09-09-2017 19:35:07
FireDAC y FDQuery ejecucion directa (sin exec sp_prepexec ) bitbow Conexión con bases de datos 1 17-02-2017 20:30:51
Conectar FDQUERY CON TBUTTON Enrique Ccz Conexión con bases de datos 5 15-12-2016 23:35:49
Consulta con FDQUERY en delphi xe5 kurono Desarrollo en Delphi para Android 7 02-02-2014 22:22:30


La franja horaria es GMT +2. Ahora son las 17:13:30.


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