![]() |
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 |
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 :)
|
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 :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 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 |
|
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 |
Haces unas cosas muy extrañas:
Código:
if (QTraer_Pagos_ProveedorEXENTO.AsVariant='N') or ¿?¿?¿? |
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..... :D:D:D:D:D:D |
Cita:
|
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 |
¿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.
|
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. |
La franja horaria es GMT +2. Ahora son las 00:14:57. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi