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 26-07-2017
identsoft identsoft is offline
Miembro
 
Registrado: abr 2006
Posts: 282
Poder: 18
identsoft Va por buen camino
Error : field not found

Hola a todos.
Estoy intentando obtener el valor de dos campos de una tabla y de un campo si obtengo pero del otro campo no. El error que da es "Error SqlVarios:Field AGENTE not found" . Los dos campos existen el la tabla ASEGURADOS y tiene valor.
Pongo código:
Código Delphi [-]
        SQLVarios.Close;
         SQLVarios.SQL.Clear;
         SQLVarios.SQL.Text := 'select AGENTE, FORMA_COBRO from ASEGURADOS where CODIGO = :ICODIGO';
         SQLVarios.ParamByName('ICODIGO').AsInteger := StrToInt(DBEAsegurado.Text);
         SQLVarios.Open;
         if SQLVarios.IsEmpty = False then
            begin
               fpago := SQLVarios.FieldByName('FORMA_COBRO').AsInteger;
               ag_aux := SQLVarios.FieldByName('AGENTE').AsInteger;  <-- El error lo da aquí
            end

Las dos variable están definidas de igual forma.Son Integer.
Siguiendo el debug, si antes de la asignación le pregunto por el valor del campo (SQLVarios.FieldByName('AGENTE').AsInteger) me lo da correctamente, no tira ningún error.

Utilizo del DBExpress y la bd es firebird. La tabla existe y los dos campos existen y definidos como integer.
Alguien tiene alguna idea de porque da este error?

Muchas gracias.
Responder Con Cita
  #2  
Antiguo 26-07-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Qué componente es SQLVarios?
¿Qué base de datos estás usando?

El error está claro, pero mejor antes nos aclaras esas dudas.

EDITO: Estoy ciego, lo pones claramente
Responder Con Cita
  #3  
Antiguo 26-07-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Seguramente ese componente va así:
Código Delphi [-]
fpago := SQLVarios.Fields[0].AsInteger;
ag_aux := SQLVarios.Fields[1].AsInteger;

O también así:
Código Delphi [-]
ag_aux := SQLVarios.Fields.FieldByName('agente').AsInteger;
Responder Con Cita
  #4  
Antiguo 26-07-2017
identsoft identsoft is offline
Miembro
 
Registrado: abr 2006
Posts: 282
Poder: 18
identsoft Va por buen camino
Casimiro:
poniendolo como tu dices, me tira otro tipo de error 'xxx' is not a valid integer value
Responder Con Cita
  #5  
Antiguo 26-07-2017
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Cita:
Empezado por identsoft Ver Mensaje
Casimiro:
poniendolo como tu dices, me tira otro tipo de error 'xxx' is not a valid integer value
¿El error lo da en el mismo lugar o en otra línea?
Aparentemente etá recibiendo 'xxx' y tratan de convertirlo a entero y no puede.
Supongo que se trata de la línea donde carga el parámetro, en donde tienes StrToInt().

Última edición por duilioisola fecha: 26-07-2017 a las 15:45:01. Razón: comillas
Responder Con Cita
  #6  
Antiguo 26-07-2017
identsoft identsoft is offline
Miembro
 
Registrado: abr 2006
Posts: 282
Poder: 18
identsoft Va por buen camino
El error lo da en la misma linea.
Si pongo sqlVarios.fieldbyname('AGENTE').asinteger el error queda da "FIELD NOT FOUND"
Si pongo SqlVarios,Fields[0].asinteger el error que da es "'xxx' is not a valid integer value". Le Intenta asignar el valor de otro campo(direccion) de tipo string.
Es como si no reconociera el campo AGENTE. Pero lo he comprobado varias veces y existe, es integer y en otro form lo utilizo en un dbedit.
Expediente X.
Responder Con Cita
  #7  
Antiguo 26-07-2017
identsoft identsoft is offline
Miembro
 
Registrado: abr 2006
Posts: 282
Poder: 18
identsoft Va por buen camino
Si en vez de utilizar el sqlquery(sqlVarios) utilizo un SIMPLIDATASET la cosa funciona perfectamente.
La solución la tengo, pero esto me genera muchas dudas con el sqlquery.
Gracias a todos por vuestro tiempo y si alguien quiere o puede aportar algo más, estaremos atentos.
Un saludo
Responder Con Cita
  #8  
Antiguo 26-07-2017
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Hola!,

Solo para ver que pudo ser el fallo con el Query. ¿Puedes copiar el componente acá? (Copiar sobre el componente y pegar en el editor de texto del foro)
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #9  
Antiguo 26-07-2017
identsoft identsoft is offline
Miembro
 
Registrado: abr 2006
Posts: 282
Poder: 18
identsoft Va por buen camino
Cita:
Empezado por movorack Ver Mensaje
Hola!,

Solo para ver que pudo ser el fallo con el Query. ¿Puedes copiar el componente acá? (Copiar sobre el componente y pegar en el editor de texto del foro)
Explicame como lo hago. No lo he hecho nunca
Responder Con Cita
  #10  
Antiguo 26-07-2017
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Por el nombre del componente, diría que lo utilizas varias veces con SQLs distintos.
Prueba a crear otro componente para ese SQL. Puede que quede la estructura del SQL anterior en memoria y debas borrar los campos antes de seguir.
Prueba con algo como esto:

Código Delphi [-]
   // Creo componente
   with TSQLQuery.Create(nil) do
   begin
       // Me aseguro de liberarlo aunque falle
     try
         // Trabajo con el compoente
       Close;
       SQL.Clear;
       SQL.Text := 'select AGENTE, FORMA_COBRO from ASEGURADOS where CODIGO = :ICODIGO';
       ParamByName('ICODIGO').AsInteger := StrToInt(DBEAsegurado.Text);
       Open;
       if IsEmpty = False then
       begin
        fpago := FieldByName('FORMA_COBRO').AsInteger;
        ag_aux := FieldByName('AGENTE').AsInteger;  <-- El error lo da aquí
       end;
     finally
         // Libero componente
       Free;
     end;
   end;
Responder Con Cita
  #11  
Antiguo 26-07-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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 identsoft.

Una consulta, ¿ Has creado campos persistentes en SQLVarios ?

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #12  
Antiguo 26-07-2017
identsoft identsoft is offline
Miembro
 
Registrado: abr 2006
Posts: 282
Poder: 18
identsoft Va por buen camino
No. Nada extraño, solo lo que puse
Responder Con Cita
  #13  
Antiguo 27-07-2017
identsoft identsoft is offline
Miembro
 
Registrado: abr 2006
Posts: 282
Poder: 18
identsoft Va por buen camino
Cita:
Empezado por duilioisola Ver Mensaje
Por el nombre del componente, diría que lo utilizas varias veces con SQLs distintos.
Prueba a crear otro componente para ese SQL. Puede que quede la estructura del SQL anterior en memoria y debas borrar los campos antes de seguir.
Prueba con algo como esto:
Código Delphi [-]
// Creo componente    
with TSQLQuery.Create(nil) do    
begin        
  // Me aseguro de liberarlo aunque falle        
  try            
  // Trabajo con el compoente            
    Close;            
    SQL.Clear;            
    SQL.Text := 'select AGENTE, FORMA_COBRO from ASEGURADOS where CODIGO = :ICODIGO';            
    ParamByName('ICODIGO').AsInteger := StrToInt(DBEAsegurado.Text);            
    Open;            
    if IsEmpty = False then            
    begin               
      fpago := FieldByName('FORMA_COBRO').AsInteger;               
      ag_aux := FieldByName('AGENTE').AsInteger;  <-- El error lo da aquí            
    end;        
  finally            
    // Libero componente            
    Free;        
  end;    
end;
Da error : "Parameter ICODIGO not found"

Última edición por Casimiro Notevi fecha: 27-07-2017 a las 11:26:44.
Responder Con Cita
  #14  
Antiguo 27-07-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por identsoft Ver Mensaje
Da error : "Parameter ICODIGO not found"
Eso no puede ser.
¿Qué código estás usando?
Responder Con Cita
  #15  
Antiguo 27-07-2017
identsoft identsoft is offline
Miembro
 
Registrado: abr 2006
Posts: 282
Poder: 18
identsoft Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Eso no puede ser.
¿Qué código estás usando?
el que puso duilioisola en el foro:
Código Delphi [-]
with TSQLQuery.Create(nil) do 
begin 
  try 
    Close; 
    SQL.Clear; 
    SQL.Text := 'select AGENTE, FORMA_COBRO from ASEGURADOS where CODIGO = :ICODIGO'; 
    ParamByName('ICODIGO').AsInteger := StrToInt(DBEAsegurado.Text); 
    Open; 
    if IsEmpty = False then 
    begin 
      fpago := FieldByName('FORMA_COBRO').AsInteger; 
      ag_aux := FieldByName('AGENTE').AsInteger; 
    end; 
  finally 
    Free; 
  end; 
end;
Y el error lo da en la linea del ParamByName('ICODIGO').....
Responder Con Cita
  #16  
Antiguo 27-07-2017
identsoft identsoft is offline
Miembro
 
Registrado: abr 2006
Posts: 282
Poder: 18
identsoft Va por buen camino
lo siento, no ha respetado los marcadores codigo delphi
Responder Con Cita
  #17  
Antiguo 27-07-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Dime exactamente qué componentes estás usando y a qué paleta pertenecen, para hacer una prueba igual.
Responder Con Cita
  #18  
Antiguo 27-07-2017
identsoft identsoft is offline
Miembro
 
Registrado: abr 2006
Posts: 282
Poder: 18
identsoft Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Dime exactamente qué componentes estás usando y a qué paleta pertenecen, para hacer una prueba igual.
El componente es un SQLQUERY de la paleta dbexpress.
Lo he utilizado muchas veces de la misma forma: buscar el contenido de un campo de una tabla. previamente un Close y un Clear. A continuacion en sql.Text pongo la select que busco ( a veces con parametros, otras sin parametros) y siempre a funcionado bien, excepto en este caso.
Tal como decia anteriormente, el problema lo tengo solucionado con otro componente(simplidataset, en la misma paleta), pero la cuestion es (si se puede) saber porque hace estas cosas, porque me genera dudas.
Responder Con Cita
  #19  
Antiguo 27-07-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
He hecho una prueba similar y no ha ocurrido ningún error.
Yo probaría a eliminar esos componentes, guardar, volver a crearlos y probar de nuevo. Vaya a haber algo raro que haya quedado.
Responder Con Cita
  #20  
Antiguo 27-07-2017
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Podría ser que el componente que usa tiene campos persistentes y al modificar la consulta por código agrega un campo que no está persistente y por eso genera el error.

Por eso te dije que copies el componente acá en el foro.

Como copiar un componente for dummies:
- Clic derecho del mouse sobre el componente. Edit > Copy
- Abres la página del navegador donde enviarás la respuesta
- En el cuadro de texto de la respuesta haces Clic derecho del mouse y seleccionas Pegar

Vas a obtener algo parecido a esto:

Código Delphi [-]
object SQLQuery1: TSQLQuery
  Params = <>
  Left = 240
  Top = 184
end
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
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
error field '' not found sonjeux Firebird e Interbase 4 05-07-2015 19:29:31
field not found anubis Lazarus, FreePascal, Kylix, etc. 5 02-02-2014 07:41:02
ayuda error query:field 'id' not found edgar_prospero Varios 15 31-08-2012 00:43:11
Error sqlQuery 'field CODIGO not found' identsoft Conexión con bases de datos 4 29-02-2012 17:05:26
Solución para el error "Field ID not found" Calderin Conexión con bases de datos 5 24-11-2004 11:18:26


La franja horaria es GMT +2. Ahora son las 11:57:25.


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