Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Problema con filtro en IBDataset (https://www.clubdelphi.com/foros/showthread.php?t=18020)

senpiterno 30-01-2005 00:48:17

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

marcoszorrilla 30-01-2005 11:25:00

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.

senpiterno 31-01-2005 00:19:51

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


La franja horaria es GMT +2. Ahora son las 23:17:58.

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