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 30-01-2005
senpiterno senpiterno is offline
Miembro
 
Registrado: abr 2004
Posts: 112
Poder: 21
senpiterno Va por buen camino
Problema con filtro en IBDataset

Hola amigos
Tengo el siguiente problema. creo un Ibdateset en tiempo de ejecucion al cual le asigno diferentes propiedades tales como SelectSQL, InsertSQL,ModifySQL y DeleteSQL, dentro de un bucle voy efectuando diferentes operaciones con la tabla que enlaza al dateset (insertar, modificar, eliminar, borrar) una de esas operaciones realiza un filtro para poder ubicar un registro y modificarlo, el problema es que dicho filtro no funciona, es decir nunca se posiciona en el registro buscado, siendo que dicho registro si existe....Le he dado bastantes vueltas al problema y no logro encontrar en donde esta el error....aqui le muestro el trozo de codigo que me esta volviendo loco...
Código Delphi [-]
 ......
 TObrasClientes.Filtered:=False;//Desactivamos el filtro
 TObrasClientes.Filter:='CODIGOOBRA = ' + QuotedStr(CodigoObra);
 TObrasClientes.Filtered:=True;//Activamo el filtro
 TObrasClientes.FindFirst;
               
  //Vemos si el registro fue encontrado
 If TObrasClientes.FieldValues['CODIGOOBRA'] = CodigoObra Then Begin
     //El registro fue encontrado
     //Lo modifacamos
     TObrasClientes.Edit;
     TObrasClientes.FieldValues['NOMBREOBRA']:=TxtNombreObra;
     TObrasClientes.FieldValues['ESTADO']:=TxtEstado;
     TObrasClientes.FieldValues['FECHAULTIMAMODIFICACION']:=CSFechaDeSistema+Time;
     TObrasClientes.FieldValues['ULTIMOUSUARIOQUEMODIFICO']:=CSUsuarioActivo.CodigoU;
 //Quien lo modifico por ultima vez
     TObrasClientes.Post;
 End Else Begin//El registro fue borrado, lo volvemos a grabar
     TObrasClientes.Filtered:=False;//Desactivamo el filtro
      //Asignamos los valores correspondientes
     TObrasClientes.Insert;
     TObrasClientes.FieldValues['CODIGOOBRA']:=CodigoObra;
     TObrasClientes.FieldValues['RUT']:=VRutCliente;
     TObrasClientes.FieldValues['NOMBREOBRA']:=TxtNombreObra;
     TObrasClientes.FieldValues['ESTADO']:=TxtEstado;
     TObrasClientes.FieldValues['FECHACREACION']:=CSFechaDeSistema+Time;
     TObrasClientes.FieldValues['FECHAULTIMAMODIFICACION']:=CSFechaDeSistema+Time;
     TObrasClientes.FieldValues['USUARIOCREADOR']:=CSUsuarioActivo.CodigoU;//Quien lo creo
     TObrasClientes.FieldValues['ULTIMOUSUARIOQUEMODIFICO']:=CSUsuarioActivo.CodigoU;
 //Quien lo modifico por ultima vez
     TObrasClientes.Post;
 End;//If
  
 ..............
Cualquier ayuda se agradece

Saludos...
__________________
Un hombre inteligente aprende de los errores propios...
Un hombre sabio aprende de los errores de los demas...

Última edición por marcoszorrilla fecha: 30-01-2005 a las 11:26:38.
Responder Con Cita
  #2  
Antiguo 30-01-2005
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Pues yo creo que te estás liando con algún concepto, porque yo acabo de hacer una prueba y funciona perfectamente, tanto haciendo la comprobación que tu haces como ver si devuelve registros el filtro que me parece más lógica.

Ahora bien tu mencionas un IbDataset, pero luego filtras una tabla, no veo la relación.

Yo he utilizado un IbDaset conectado a un Tdatasource1 y este a una rejilla1 y luego un IbTable conectado a un Tdatasource2 y este a una rejilla2 al aplicar el filtro al IbTable1, la Rejilla2 me muestra solamente 1 registro y el mensaje que me da es que se encontró el registro, la rejilla1 que esta conectada al Ibdataset sigue con todos los registros ya que su propiedas SQL es la que hace que muestre los registros, así que tendrás que aclarar que tiene que ver el IbDataset con lo que propones.

Buen este es el código que como digo funciona sin ningún problema:

Código Delphi [-]
 procedure TForm1.Button1Click(Sender: TObject);
 begin
 ibTable1.Filtered:=False;
 ibTable1.Filter:='Last_Name = '+QuotedStr(Edit1.Text);
 ibTable1.Filtered:=True;
   //Primera Prueba
   if ibTable1.FieldValues['LAST_NAME'] = Edit1.Text then
   ShowMessage('Encontrado')
   else
   ShowMessage('No se encontro ningún Registro');
 
   //Segunda
   if IbTable1.RecordCount > 0 then
   ShowMessage('Registro Encontrado.')
   else
   ShowMessage('No se encontro ningún Registro');
 end;
Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 31-01-2005
senpiterno senpiterno is offline
Miembro
 
Registrado: abr 2004
Posts: 112
Poder: 21
senpiterno Va por buen camino
Primero que todo gracias por tu respuesta marcoszorrilla, el punto de mensionar al IbDataset en el problema es que con el recolecto a un conjunto de datos que obedesen a cierto criterio, datos a los cuales le aplico el filtro. Te lo mensiono ademas porque aparte de realizar un filtro con los datos devueltos por el IbDataset tambien realizo con el inserciones, modificaciones y eliminaciones, cuestiones que me parecieron pudieren alterar el funcionamiento del filtro que estoy efectuando ya que realizo todo esto en un mismo procedimiento y bucle. Respecto a la forma de efecruar el filtro y comprovar si esto surtio efecto se que existen muchas y creeme las he probado todas y ninguna me ha dado resultado, primero pense que podia estar armando de forma errada la cadena que informa el filtro que se va a realizar, pero no era eso, despues pense que el ibDataset estaba configurado como unidireccional, pero tampoco era eso, ya que si fuera asi al momento de efectuar el filtro me lansaria una excepcion. La verdad no se que pueda estar haciendo mal, he mirado debugeado y revisado el codigo muchas veces y no encuentro que esta errado....
Agradeceria me dieras tu punto de vista respecto a que cosas no podria estar haciendo bien....quizas pueda ser algo tan obvio que lo he este dando por sentado que esta bien...

Saludos...
__________________
Un hombre inteligente aprende de los errores propios...
Un hombre sabio aprende de los errores de los demas...
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 23:17:17.


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