Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-06-2011
Chaja Chaja is offline
No confirmado
 
Registrado: ago 2004
Ubicación: Mar del Plata
Posts: 238
Poder: 0
Chaja Va por buen camino
Lectura de Campos de 1 caracter

Estimado:
mi inquietud es la siguiente, estoy sacando el BDE de mi aplicacion, lo que me esta llevando bastante trabajo , son mas de 500 querys y mas de 100 store. Mi Te es que en lagunos SP tenia como resultado hacia la BD de Dato (Interbase) un Caracter el cual me tra S o N o una letra. Desde el lado del componete esa variable me vuelve vacia null , en al gunos casos me trae el valo, pero en otros no. Misma consulta mismo datos, pero distintos servidores. por ejemplo en el cliente , con los datos del cliente hago la consulta y me trae el valor de ESTADO en S o N, en tro cliente otra base no lo hace , hago por el IB Expert si la consulta esta bien y lo esta , ya que el sp siempre me devuelve un registro con datos. Siempre que hay una devolucion de un caracter no me lee nada, el campo en el stro lo define como CHAR (1) y luego con VARCHAR, pero no hubo cambios. Los comp, que uso ahora son los DBX. Alguna idea???
Gracias
Responder Con Cita
  #2  
Antiguo 09-06-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Disculpa, pero no sé si tu teclado tiene algún problema y faltan bastantes letras por lo que dificulta muchísimo poder entender exactamente lo que estás diciendo. ¿Puedes reescribir la pregunta procurando que no falten letras?, gracias amigo
Responder Con Cita
  #3  
Antiguo 09-06-2011
Chaja Chaja is offline
No confirmado
 
Registrado: ago 2004
Ubicación: Mar del Plata
Posts: 238
Poder: 0
Chaja Va por buen camino
Estimado:
mi inquietud es la siguiente, estoy sacando el BDE de mi aplicacion, lo que me esta llevando bastante trabajo , son mas de 500 querys y mas de 100 store. Mi Tema es: que en algunos SP tenia como resultado (BD de Dato Interbase) un Caracter el cual me trae S o N o una letra.
Desde el lado del componete esa variable me vuelve vacia null , en al gunos casos me trae el valor, pero en otros no.
Misma consulta mismo datos, pero distintos servidores. por ejemplo en el cliente , con los datos del cliente hago la consulta y me trae el valor de ESTADO en S o N, en otro cliente otra base no lo hace. Lo hago por el IBExpert si la consulta esta bien y lo esta , ya que el sp siempre me devuelve un registro con datos. Siempre que hay una devolucion de un caracter y no me lee nada, el campo en el sp lo define como CHAR (1) y luego con VARCHAR, pero no hubo cambios. Los comp, que uso ahora son los DBX. Alguna idea???
anexo el Sp

Código SQL [-]CREATE PROCEDURE TOTAL_PAGOS_MENSUAL_PROVEEDORES ( CODIGO VARCHAR(6), FECHA DATE) RETURNS ( TOTAL NUMERIC(15,3), EXENTO VARCHAR(1), CODIGO_REGIMEN INTEGER, PAGOS_ANTERIORES NUMERIC(15,3), CONCEPTO CHAR(25), MINIMO_NO_IMPONIBLE NUMERIC(15,3), TASA NUMERIC(15,3), IMPUESTO_MINIMO NUMERIC(15,3), EXENTO_ID INTEGER) AS DECLARE VARIABLE PAGOS_ANTERIORES_AUX NUMERIC(15,3); DECLARE VARIABLE ANULACIONES NUMERIC(15,3); begin /* Busco el proveedor si es exento a las ganacias y el codigo de retencion*/ select p.exento_ganacia,p.codigo_regimen_ret_ganacia from poveedor p where p.codigo=:codigo into :exento,:codigo_regimen; if (exento='N') then begin select Sum(op.total_neto_gravado) from ordenpago op where extract( month from op.fecha)= extract (month from :fecha) and extract (year from op.fecha)=extract (year from :fecha) and op.codigo=:codigo into :total; if (total is null) then total=0; select t.alicuota,t.minimo_no_imponible,t.concepto,t.impuesto_minimo from tasas_ret_ganancia t where t.codigo=:codigo_regimen into :tasa,:minimo_no_imponible,:concepto,:impuesto_minimo; /*Sumo los pagos de las retenciones aneriores */ select Sum(ret.impuesto_retenido) from retenciones_ganancia ret where extract(month from ret.fecha)=extract (month from :fecha) and extract (year from ret.fecha)=extract (year from :fecha) and ret.codigo_proveedor=:codigo into agos_anteriores; if (pagos_anteriores is null) then pagos_anteriores=0; /*************************/ /*Sumo las Anulaciones */ anulaciones=0; pagos_anteriores_aux=0; select Sum(a_ret.impuesto_retenido) from anulacion_retenciones_ganancia a_ret where extract(month from a_ret.fecha)=extract (month from :fecha) and extract (year from a_ret.fecha)=extract (year from :fecha) and a_ret.codigo_proveedor=:codigo into :anulaciones; if (anulaciones is null) then anulaciones=0; /***************************/ pagos_anteriores_aux=agos_anteriores-:anulaciones; pagos_anteriores=agos_anteriores_aux; end else begin tasa =0; concepto =''; minimo_no_imponible=0; exento ='S'; pagos_anteriores =0; impuesto_minimo =0; end if (exento = 'N') Then begin exento_id=0; end else begin exento_id = 1; end /* Procedure Text */ /*suspend;*/ end


y como lo llamo desde la aplicacion
Código Delphi [-] if DMMain_2.AgenteRetencionGanacia='S' Then begin QTraer_Pagos_Proveedor.Close; QTraer_Pagos_Proveedor.ParamByName('CODIGO').AsString := Dato; QTraer_Pagos_Proveedor.ParamByName('Fecha').AsDate := CDSOPagoFECHA.AsDateTime; QTraer_Pagos_Proveedor.Open;//ExecProc; if (QTraer_Pagos_ProveedorEXENTO.AsVariant='N') or (QTraer_Pagos_ProveedorEXENTO.AsString='N') or (QTraer_Pagos_ProveedorEXENTO.AsWideString='N') or (QTraer_Pagos_ProveedorEXENTO_ID.Value=0) Then CDSOPagoRETIENE_GANACIAS.Value:='S' else CDSOPagoRETIENE_GANACIAS.Value:='N'; if CDSOPagoTIPOIVA.Value<>1 Then CDSOPagoRETIENE_GANACIAS.Value:='N'; if CDSOPagoRETIENE_GANACIAS.Value='S' Then begin // este es el Total de netos gravados del mes CDSOPagoTOTAL_PAGOS_DEL_MES.AsFloat := QTraer_Pagos_ProveedorTOTAL.AsFloat; // total de impuestos pagados CDSOPagoTOTAL_RETENIDO_MES.AsFloat := QTraer_Pagos_ProveedorPAGOS_ANTERIORES.AsFloat; CDSOPagoTASA_RETENCION_GANACIA.AsFloat := QTraer_Pagos_ProveedorTASA.AsFloat; CDSOPagoMINIMO_NO_IMPONIBLE_GANANCIA.AsFloat := QTraer_Pagos_ProveedorMINIMO_NO_IMPONIBLE.AsFloat; CDSOPagoCODIGO_REGIMENA_GANANCIA.Value := QTraer_Pagos_ProveedorCODIGO_REGIMEN.AsInteger; CDSOPagoCONCEPTO_RETENCION_GANACIA.Value := QTraer_Pagos_ProveedorCONCEPTO.AsString; CDSOPagoIMPUESTO_MINIMO_GANANCIA.AsFloat := QTraer_Pagos_ProveedorIMPUESTO_MINIMO.AsFloat; end; QTraer_Pagos_Proveedor.Close; end;


Gracias y perdon por la falta de ortografia, me pasa por apurado
Responder Con Cita
  #4  
Antiguo 09-06-2011
Chaja Chaja is offline
No confirmado
 
Registrado: ago 2004
Ubicación: Mar del Plata
Posts: 238
Poder: 0
Chaja Va por buen camino
Código SQL [-]
CREATE PROCEDURE TOTAL_PAGOS_MENSUAL_PROVEEDORES (
    CODIGO VARCHAR(6),
    FECHA DATE)
RETURNS (
    TOTAL NUMERIC(15,3),
    EXENTO VARCHAR(1),
    CODIGO_REGIMEN INTEGER,
    PAGOS_ANTERIORES NUMERIC(15,3),
    CONCEPTO CHAR(25),
    MINIMO_NO_IMPONIBLE NUMERIC(15,3),
    TASA NUMERIC(15,3),
    IMPUESTO_MINIMO NUMERIC(15,3),
    EXENTO_ID INTEGER)
AS
DECLARE VARIABLE PAGOS_ANTERIORES_AUX NUMERIC(15,3);
DECLARE VARIABLE ANULACIONES NUMERIC(15,3);
begin
  /* Busco el proveedor si es exento a las ganacias y el codigo de retencion*/
  select p.exento_ganacia,p.codigo_regimen_ret_ganacia from poveedor p
    where p.codigo=:codigo
      into :exento,:codigo_regimen;
  if (exento='N') then
    begin
      select  Sum(op.total_neto_gravado) from ordenpago  op where
        extract( month from op.fecha)= extract (month from :fecha) and
        extract (year from op.fecha)=extract (year from :fecha)  and
        op.codigo=:codigo
          into :total;
      if (total is null) then
        total=0;
      select t.alicuota,t.minimo_no_imponible,t.concepto,t.impuesto_minimo from tasas_ret_ganancia t
        where t.codigo=:codigo_regimen
          into :tasa,:minimo_no_imponible,:concepto,:impuesto_minimo;
     /*Sumo los pagos de las retenciones aneriores */
      select Sum(ret.impuesto_retenido) from retenciones_ganancia ret where
        extract(month from ret.fecha)=extract (month from :fecha) and
        extract (year from ret.fecha)=extract (year from :fecha)  and
          ret.codigo_proveedor=:codigo
            into :pagos_anteriores;
      if (pagos_anteriores is null) then
        pagos_anteriores=0;
     /*************************/
     /*Sumo las Anulaciones */
      anulaciones=0;
      pagos_anteriores_aux=0;
      select Sum(a_ret.impuesto_retenido) from anulacion_retenciones_ganancia a_ret where
        extract(month from a_ret.fecha)=extract (month from :fecha) and
        extract (year from a_ret.fecha)=extract (year from :fecha)  and
          a_ret.codigo_proveedor=:codigo
            into :anulaciones;
      if (anulaciones is null) then
        anulaciones=0;
      /***************************/
      pagos_anteriores_aux=:pagos_anteriores-:anulaciones;
      pagos_anteriores=:pagos_anteriores_aux;
    end
  else
    begin
      tasa               =0;
      concepto           ='';
      minimo_no_imponible=0;
      exento             ='S';
      pagos_anteriores   =0;
      impuesto_minimo    =0;
    end
  if (exento = 'N') Then begin exento_id=0; end
    else begin exento_id = 1; end
  /* Procedure Text */
  /*suspend;*/
end

codigo Delphi

'delphi'>
Código Delphi [-]
   'keyword'>if DMMain_2.AgenteRetencionGanacia='quote'>'S' 'keyword'>Then
        'keyword'>begin
          QTraer_Pagos_Proveedor.Close;
          QTraer_Pagos_Proveedor.ParamByName('quote'>'CODIGO').AsString := Dato;
          QTraer_Pagos_Proveedor.ParamByName('quote'>'Fecha').AsDate    := CDSOPagoFECHA.AsDateTime;
          QTraer_Pagos_Proveedor.Open;'comment'>//ExecProc;

          'keyword'>if (QTraer_Pagos_ProveedorEXENTO.AsVariant='quote'>'N') 'keyword'>or
             (QTraer_Pagos_ProveedorEXENTO.AsString='quote'>'N') 'keyword'>or
             (QTraer_Pagos_ProveedorEXENTO.AsWideString='quote'>'N') 'keyword'>or (QTraer_Pagos_ProveedorEXENTO_ID.Value=0) 'keyword'>Then
            CDSOPagoRETIENE_GANACIAS.Value:='quote'>'S'
          'keyword'>else
            CDSOPagoRETIENE_GANACIAS.Value:='quote'>'N';
          'keyword'>if CDSOPagoTIPOIVA.Value<>1 'keyword'>Then
            CDSOPagoRETIENE_GANACIAS.Value:='quote'>'N';

          'keyword'>if CDSOPagoRETIENE_GANACIAS.Value='quote'>'S' 'keyword'>Then
            'keyword'>begin
              'comment'>// este es el Total de netos gravados del mes
              CDSOPagoTOTAL_PAGOS_DEL_MES.AsFloat          := QTraer_Pagos_ProveedorTOTAL.AsFloat;
              'comment'>// total de impuestos pagados
              CDSOPagoTOTAL_RETENIDO_MES.AsFloat           := QTraer_Pagos_ProveedorPAGOS_ANTERIORES.AsFloat;
              CDSOPagoTASA_RETENCION_GANACIA.AsFloat       := QTraer_Pagos_ProveedorTASA.AsFloat;
              CDSOPagoMINIMO_NO_IMPONIBLE_GANANCIA.AsFloat := QTraer_Pagos_ProveedorMINIMO_NO_IMPONIBLE.AsFloat;
              CDSOPagoCODIGO_REGIMENA_GANANCIA.Value       := QTraer_Pagos_ProveedorCODIGO_REGIMEN.AsInteger;
              CDSOPagoCONCEPTO_RETENCION_GANACIA.Value     := QTraer_Pagos_ProveedorCONCEPTO.AsString;
              CDSOPagoIMPUESTO_MINIMO_GANANCIA.AsFloat     := QTraer_Pagos_ProveedorIMPUESTO_MINIMO.AsFloat;
            'keyword'>end;
          QTraer_Pagos_Proveedor.Close;
        'keyword'>end;

Última edición por ecfisa fecha: 09-06-2011 a las 15:56:42.
Responder Con Cita
  #5  
Antiguo 09-06-2011
Chaja Chaja is offline
No confirmado
 
Registrado: ago 2004
Ubicación: Mar del Plata
Posts: 238
Poder: 0
Chaja Va por buen camino
Investigando , veo que me devuelve un reg. vacio... pero por que??? si desde el IBExperte me da resultados posibles?
sera por la fecha??
por que con el BDE no me pasaba y esto benditos DBX me dan tanto trabajo.....
ufffff
Responder Con Cita
  #6  
Antiguo 09-06-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Haces unas cosas muy extrañas:

Código:
if (QTraer_Pagos_ProveedorEXENTO.AsVariant='N') or
 (QTraer_Pagos_ProveedorEXENTO.AsString='N') or
 (QTraer_Pagos_ProveedorEXENTO.AsWideString='N') or
 (QTraer_Pagos_ProveedorEXENTO_ID.Value=0) Then
¿asvariant, asstring, aswidestring, value? ¿eso para qué sirve?, si el campo es un char, aunque veo que en el SP pones varchar(1).

¿?¿?¿?
Responder Con Cita
  #7  
Antiguo 09-06-2011
Chaja Chaja is offline
No confirmado
 
Registrado: ago 2004
Ubicación: Mar del Plata
Posts: 238
Poder: 0
Chaja Va por buen camino
Lo hice por que en algunos casos, si la tomo como string me da '' pero si lo tomaba como Wide me daba el valor... no se talvez esta al cuete, y no me daba valor por estar vacio el reg.
cosas que probas por que no sabes que hacer.....
Responder Con Cita
  #8  
Antiguo 09-06-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Chaja Ver Mensaje
Lo hice porque en algunos casos, si la tomo como string, me da ''
Claro, porque no devolvería nada, y nada.asstring=''
Responder Con Cita
  #9  
Antiguo 09-06-2011
Chaja Chaja is offline
No confirmado
 
Registrado: ago 2004
Ubicación: Mar del Plata
Posts: 238
Poder: 0
Chaja Va por buen camino
Solucion............

Bueno, no se por que pero la solucion la encontre sin querer
en el SP estaba

else begin exento_id = 1; end /* Procedure Text */ /*suspend;*/ end

por lo que saque el comentario del suspend, y funciono. no entiendo por que cuando estaba con el BD esto no pasaba.
en fin , si alguien tiene el por que estaria bueno saberlo
gracias a quienes leyeron mi inquietud


Luis Roldan
Mar del Plata
Argentina
Responder Con Cita
  #10  
Antiguo 09-06-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Quieres decir desde ibexpert?, a mí me ha pasado alguna vez que si pongo más de un comentario en la misma línea sale algún error.
Responder Con Cita
  #11  
Antiguo 09-06-2011
Avatar de Kipow
Kipow Kipow is offline
Miembro
 
Registrado: abr 2006
Ubicación: Guatemala
Posts: 329
Poder: 19
Kipow Va por buen camino
El suspend es el la funcion que indica al procedure que devuelva valor, sino estabas ejecutandolo pues no te estaba devolviendo nada (null en los parametros de Delphi).

Todo Procedure en firebird que deseas que devuelva datos debe de ejecutar el Suspend 1 vez por cada fila que deseas obtener. en tu caso pues es 1 unica fila.
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
Leer texto caracter a caracter kikecg Firebird e Interbase 11 23-11-2010 17:44:44
Uso del componente filereader con campos caracter IVAND Varios 0 05-06-2008 19:49:12
leer caracter por caracter, una linea de un memo douglas OOP 1 05-10-2007 06:59:31
Ayudaaaa!!! Tabla ASCII: El carácter Ñ vs. carácter ¥ Berto2003 Varios 5 26-07-2005 15:37:48
busqueda caracter a caracter Irina SQL 3 20-05-2003 13:12:53


La franja horaria es GMT +2. Ahora son las 02:57:05.


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