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 23-11-2004
Calderin Calderin is offline
Registrado
 
Registrado: nov 2004
Posts: 3
Poder: 0
Calderin Va por buen camino
Question Solución para el error "Field ID not found"

Hola a todos, necesito ayuda con un problemilla que tengo en una aplicación cliente / servidor que estoy desarrollando. Estoy utilizando Interbase 6.5 y Delphi 7. Las conexiones las realizo con IBDataSet.

A continuación pongo un ejemplo del código con el que tengo el problema. En el código del ejemplo lo que hago es eliminar un registro seleccionado, pero el error me ocurre tanto cuando inserto, elimino, modifico y refresco.

Código:
   if dmPrincipal.dsetFamilia.Fields[0].Value <> null then
 	begin
 	  if   MessageDlg('¿Seguro que desea borrar el registro seleccionado?', mtInformation, [mbYes, mbNo],0) = mrYes then
 		begin
 		  dmPrincipal.dsetFamilia.Delete;
 		  dmPrincipal.dsetFamilia.ParamByName('ID').AsInteger := dmPrincipal.dsetFamilia.Fields[0].Value;
 		  dmPrincipal.dsetFamilia.Open;
 		end
 	  else
 		  dmPrincipal.dsetFamilia.Open;
 	end
   else
 	MessageDlg('Debe seleccionar un registro para eliminarlo', mtInformation, [mbYes], 0)
Haciendo la traza del programa el error se produce en la linea en la que le indico el parámetro ("ID"). El mensaje de error es el siguiente: "Field "ID" not found." El error me lo devuelve como he comentado antes tanto haciendo insert, delete ... Lo extraño es que a pesar de mostrar el error, elimina el registro.

Buenos gracias de antemano, y si alguien tiene algunas respuesta para mi enigma de deberé unas cuantas noches en vela.

Un saludo.
Responder Con Cita
  #2  
Antiguo 23-11-2004
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 26
eduarcol Va por buen camino
El problema esta en que cuando pasas al parametro el valor "id" estas pasando un literal cuando en realidad lo que se espera es un valor numerico entre 0 y n donde n es la cantidad total de parametros menos uno
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #3  
Antiguo 24-11-2004
Calderin Calderin is offline
Registrado
 
Registrado: nov 2004
Posts: 3
Poder: 0
Calderin Va por buen camino
Antes que nada darte las gracias eduarcol por la rápida respuesta, pero hay algo que no entiendo. No se a que te refieres cuando dices:
Cita:
"...estas pasando un literal cuando en realidad lo que se espera es un valor numerico..."
El valor que recojo en la línea siguiente es un entero.

Código:
 ...
 dmPrincipal.dsetFamilia.ParamByName('ID').AsInteger := dmPrincipal.dsetFamilia.Fields[0].Value; ...
Si pudieses especificar más o poner un ejemplo te lo agradecería.
Responder Con Cita
  #4  
Antiguo 24-11-2004
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 26
eduarcol Va por buen camino
Perdon no vi bien la sintaxis, tienes razon, pero el asunto esta que el parametro ID no existe ese es todo el problema
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #5  
Antiguo 24-11-2004
Calderin Calderin is offline
Registrado
 
Registrado: nov 2004
Posts: 3
Poder: 0
Calderin Va por buen camino
El la declaración de DeleteSQL tengo lo siguiente:
Código:
 DELETE FROM Familia WHERE ID = :ID
Tengo definido un parámetro :ID, además en el caso de no existir el parámetro ¿Cómo se explica que elimine el registro seleccionado?
Responder Con Cita
  #6  
Antiguo 24-11-2004
Avatar de defcon1_es
defcon1_es defcon1_es is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuenca - España
Posts: 533
Poder: 21
defcon1_es Va por buen camino
Hola,
Cita:
Empezado por Calderin
Tengo definido un parámetro :ID, además en el caso de no existir el parámetro
¿Cómo se explica que elimine el registro seleccionado?
Realmente NO tienes ese parámetro, a menos que esté definido en la sentencia SQL de la propiedad SELECTSQL.
En un IBDataSet, sólo tienes acceso a los parámetros que pongas en la sentencia SELECTSQL.

Los "parámetros" de las sentencias INSERTSQL, UPDATESQL y DELETESQL los "sustituye" (internamente)
por el valor de los campos que tienen el mismo nombre, por eso te borra el registro.

Pregunta: Cuando haces un INSERT/APPEND o EDIT del IBDataSet,
¿a que NO le pasas todos los "parámetros" de las sentencias INSERTSQL o UPDATESQL como parámetros (con ParamByName),
sino que asignas los valores correspondientes a los campos (FieldByName o Field[x])?

Yo haría lo siguiente:
Código Delphi [-]
  if not(dmPrincipal.dsetFamilia.FieldByName('ID').IsNull)
  then begin
    if MessageDlg('¿Seguro que desea borrar el registro seleccionado?', 
                       mtInformation, [mbYes, mbNo],0) = mrYes 
    then dmPrincipal.dsetFamilia.Delete; // Borra el reg. seleccionado
  end
  else MessageDlg('Debe seleccionar un registro para eliminarlo', 
                         mtInformation, [mbYes], 0);

Salu2.
__________________
Progress Openedge
https://abevoelker.com/progress_open...dered_harmful/


Delphi forever...
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


La franja horaria es GMT +2. Ahora son las 01:05:38.


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