Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-08-2007
Marchd Marchd is offline
Registrado
 
Registrado: ago 2007
Posts: 7
Poder: 0
Marchd Va por buen camino
filtrar RXMEMORYDATA1

Buenos estoy iniciandome como programador delphi, vengo de visual basic.

Tengo un problema con el filtrado de un componente RXMEMORYDATA1

Tengo varios clientes de un banco con la informacion de Cedula, Apellido, Nombre, Tipo y Monto.

Toda esta informacion se m pide ser vaciada en un RXMEMORYDATA1 y luego mostrada en un dbgrid, todo bien hasta el momento en que me piden mostrar solo la informacion de los clientes que sean Tipo 0,1,2,3 o 4 y al momento de seleccionar el tipo me debeb mostrar solo la lista de clientes que cumplan con ese filtro

investigando hice lo siguiente:
caso1:

Código Delphi [-]
procedure Tform2.BFiltrarClick(Sender: TObject);
begin 
  RXMEMORYDATA1.Filter:='Tipo=''1''';
  RXMEMORYDATA1.Filtered:=true;
end;

Caso 2:

RxMemoryData1.Filtered:= FALSE;
RxMemoryData1.Filter:= 'Apellido='''+EditBusqueda.Text+'%''';
RxMemoryData1.Filtered:= TRUE;
RxMemoryData1.Refresh;

ninguno de los dos casos me funciona


por ahora hago una busqueda directa del los clientes Tipo 1 para prueba y esto me funcion con un componente tTable perfectamante pero al usar el RXMEMORYDATA1 no ocasiona ningun resultado
Responder Con Cita
  #2  
Antiguo 08-08-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Mira el siguiente Link, http://www.clubdelphi.com/foros/showthread.php?t=40171, allí explico como hacer filtros con las TRxMemoryData. Espero te sirva.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #3  
Antiguo 11-08-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Recuerdo que ayer, antes de la caida del foro hiciste una pregunta que decia algo como:

"Necesito filtrar, para que cuando tenga dos registros como sanchez y salazar, al colocar 'sa' queden estos dos, porque ambos comienzan por 'sa'"...

La respuesta es:

Si, quieres usar CaseSensitive hazlo asi:

Código Delphi [-]
//En el evento OnFilterRecord...
Accept := AnsiStartsStr('sa', RxMemoryData1.FieldByName('Apellido').AsString);

Si no te importa el case-sensitive, sino que al contrario sea caseinsensitive, hazlo asi...
Código Delphi [-]
//En el evento OnFilterRecord...
Accept := AnsiStartsText('sa', RxMemoryData1.FieldByName('Apellido').AsString);

Espero te sirva
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #4  
Antiguo 11-08-2007
Marchd Marchd is offline
Registrado
 
Registrado: ago 2007
Posts: 7
Poder: 0
Marchd Va por buen camino
Ok

De verdad Agradezco mucho tu ayuda me ha servido de mucho pero tengo un problema.

Me da error solo quisiera saber con que libreria trabaja esta funcion me imagino que el problema debe ser ese.

Por otro lado ciertamente tiene mucha logica tu respuesta para los casos que envie si busco 'sa' me deberia aparecer (sanchez, salcedo) ok pero existe una forma de que tambie aparezca (hernandez salcedo) tomando en cuenta de que ya salcedo no es la primera posicion en la cadena?

Muchas gracias por tu ayuda.
Responder Con Cita
  #5  
Antiguo 11-08-2007
Marchd Marchd is offline
Registrado
 
Registrado: ago 2007
Posts: 7
Poder: 0
Marchd Va por buen camino
Avance

Investigue y encontre la funcion que lo realiza:

function AnsiContainsStr( const AText, ASubText: string ): Boolean;

Comprueba si la cadena ASubText esta dentro de la cadena AText. Por ejemplo:

AnsiContainsStr( 'DELPHI AL LIMITE', 'LIMITE' ) devuelve True
AnsiContainsStr( 'DELPHI AL LIMITE', 'LIMITe' ) devuelve False


function AnsiContainsText( const AText, ASubText: string ): Boolean;

Esta función es igual a AnsiConstainsStr salvo que no diferencia mayúsculas de minúsculas. Veamos un ejemplo:


AnsiContainsText( 'DELPHI AL LIMITE', 'LIMITE' ) devuelve True
AnsiContainsText( 'DELPHI AL LIMITE', 'LIMITe' ) devuelve True
AnsiContainsText( 'DELPHI AL LIMITE', 'LIMITES' ) devuelve False
Responder Con Cita
  #6  
Antiguo 11-08-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Ahhh, cierto, la función es de la unidad llamada StrUtils

En cuanto a tu otra duda, la cosa quedaria muy parecida, asi:

Con CaseSensitive

Código Delphi [-]
//En el evento OnFilterRecord...
Accept := AnsiContainsStr('sa',RxMemoryData1.FieldByName('Apellido').AsString);

Con CaseInSensitive

Código Delphi [-]
//En el evento OnFilterRecord...
Accept := AnsiContainsText('sa',RxMemoryData1.FieldByName('Apellido').AsString);
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #7  
Antiguo 11-08-2007
Marchd Marchd is offline
Registrado
 
Registrado: ago 2007
Posts: 7
Poder: 0
Marchd Va por buen camino
Upps!

Bueno realmente la funcion que me diste solo busca al principio de la cadena y necesito que busque en cualquier palabra de la cadena .

la que coloque yo solo busca la palabra completa date cuenta que si busca limite y esta limites genera falso tampoco me sirve seguire buscando

Gracias
Responder Con Cita
  #8  
Antiguo 11-08-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por Marchd Ver Mensaje
Bueno realmente la funcion que me diste solo busca al principio de la cadena y necesito que busque en cualquier palabra de la cadena .

la que coloque yo solo busca la palabra completa date cuenta que si busca limite y esta limites genera falso tampoco me sirve seguire buscando

Gracias

Yo creo que estas confundido, quiza, crees que el parametro 1, hace lo del parametro 2 y viceversa, yo hice el siguiente ejercicio y me funciona correctamente:

Código Delphi [-]
var
  a, b :string;
begin
  a := 'Montaño Sanchez';
  b := 'sa';
  ShowMessage(BoolToStr(AnsiContainsText(a, b), True));
end;

Como vez, solo busco 'sa', dentro de 'Montaño Sanchez' y el ShowMessage me muestra un True, de manera que funciona correctamente.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/

Última edición por jhonny fecha: 11-08-2007 a las 01:40:20. Razón: Corregir error de ortografia
Responder Con Cita
  #9  
Antiguo 13-08-2007
Marchd Marchd is offline
Registrado
 
Registrado: ago 2007
Posts: 7
Poder: 0
Marchd Va por buen camino
Listo

Ok tenias razon Muchas Gracias
El Codigo quedo asi

RBCedula, RBApellido y RB NOmbre, son Radio Button
Dato_Buscado: es donde guardo lo que el usuario quiere buscar
s: Guardo la seleccion de la columna a buscar

Código Delphi [-]
procedure Tform2.RxMemoryData1FilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
  var Dato_Buscado,s:string;
begin
  if not RBCedula.Checked and not RBApellido.Checked and not RBNombre.Checked then
  begin
    showmessage('Debe Seleccionar la Columna donde Desea Buscar');
    RxMemoryData1.Filtered:=false;
  end
  else
  begin
    if  EditBusqueda.Text<>'' then
    begin
      if RBCedula.Checked then
       s:='Cedula'
       else
       if RBApellido.Checked then
         s:='Apellido'
       else
        if RBNombre.Checked then
        s:='Nombre';
          Dato_Buscado:=(EditBusqueda.text);
          Accept := AnsiContainsText(RxMemoryData1.FieldByName(s).AsString,Dato_Buscado);
    end
    else
      showmessage('Introducir Busqueda');
  end;
end;


Todo funcion muy bien Gracias de verdad muchas gracias. Muy bueno este foro
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
Filtrar miguel_figueroa Conexión con bases de datos 11 03-01-2007 23:50:48
Filtrar BD NoSv Conexión con bases de datos 8 11-10-2006 12:27:47
Filtrar Dbf userlazarus Conexión con bases de datos 2 23-05-2006 16:48:45
Filtrar pepelu1975 OOP 24 18-05-2004 09:14:57
Filtrar elloco C++ Builder 2 28-04-2004 05:12:36


La franja horaria es GMT +2. Ahora son las 06:22:41.


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