Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-05-2004
RyAr RyAr is offline
Miembro
 
Registrado: oct 2003
Posts: 74
Poder: 21
RyAr Va por buen camino
Filtrar por contenido en Paradox

Pues estoy intentado filtar una tabla por el contenido que ponga en un edit normal. Un ejemplo seria que si tengo estos registros:

Jose Luis
Luis
Angel

Y en el Edit1.text pongo Luis, me devolviera la tabla filtrada con:

Jose Luis
Luis

Yo para filtrar utilizo Table1.filter := 'Nombre = ''' + Edit1.text + ''''; pero el caso es que entonces solo em devuelve el registro que coincide extamente, es decir, solo me devuelve Luis, y yo querria que me devolviera los dos: Jose Luis y Luis.

Saludos, y mil gracias a todos

Última edición por RyAr fecha: 12-05-2004 a las 23:50:00.
Responder Con Cita
  #2  
Antiguo 12-05-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Me parece que esto no lo vas a poder hacer. Los filtros son muy limitados. Te convendría más usar un TQuery con una consulta del tipo:

Código SQL [-]
select * from tabla
where nombre like :nombre

Y llenarías el parámetro con

Código Delphi [-]
Query.ParamByName('nombre').AsString := '%' + Edit.Text + '%';

// Saludos
Responder Con Cita
  #3  
Antiguo 13-05-2004
RyAr RyAr is offline
Miembro
 
Registrado: oct 2003
Posts: 74
Poder: 21
RyAr Va por buen camino
Buenas, lo rpimero gracias por responder.

He metido en el form un TQuery, y en dataset le he puesto el de la tabla, y en el clik del boton el codigo que me has dado, pero mi duda es donde meto la busqueda SQL??

Gracias
Responder Con Cita
  #4  
Antiguo 13-05-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Las componentes TQuery son para mandar consultas SQL a la base de datos. Te recomiendo que busques TQuery en la ayuda de Delphi para darte una idea de su funcionamiento.

// Saludos
Responder Con Cita
  #5  
Antiguo 14-05-2004
RyAr RyAr is offline
Miembro
 
Registrado: oct 2003
Posts: 74
Poder: 21
RyAr Va por buen camino
Buenas de nuevo, me he estado leyendo un manual del componente y me he hecho una idea de como funciona.

Lo que no he visto es la manera de ejecutar esa consulta, y luego volver a ver toda la tabla. Yo los datos de la tabla la veo sobre un DBGrid.

¿La consulta se ejecuta al pasarle el parametro del dato? ¿Como se "quita la consulta" a la tabla?.

Saludos, y gracias
Responder Con Cita
  #6  
Antiguo 14-05-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
podrías mirar de hacer algo así

Código Delphi [-]
begin
  Query.Close;
  Query.SQL.Clear;
  Query.SQL.Add('select * from tabla');

  if Trim(Edit1.Text) <> '' then
    Query.SQL.Add('where nombre like ' + QuotedStr('%' + Trim(Edit1.Text) + '%') );

  try
    Query.Open;
  except
    on E: Exception do
      Application.MessageBox(PChar('Error abriendo Query. Mensaje:'#13+E.Message),
          'Atención', MB_APPLMODAL or MB_ICONWARNING or MB_OK);
  end;

Espero te sirva
Responder Con Cita
  #7  
Antiguo 15-05-2004
RyAr RyAr is offline
Miembro
 
Registrado: oct 2003
Posts: 74
Poder: 21
RyAr Va por buen camino
Buenas, gracias por tu codigo me ha ayudado a aclararme como atacar la base de datos, pero el problema es que en el grid no me "filtra".

Yo teniendo ya todo hecho en Delphi añado un TQuery al form, y en Datasource le digo el Datasource1 que es el que esta linkado con Table1. Posteriormente le añado el codigo SQL al TQuery:

Código SQL [-]
select * from agenda where Nombre like :nombre

Y posteriormente en un boton buscar añado este codigo en el evento onclick:

Código Delphi [-]
Query.Close;
Query.ParamByName('nombre').AsString := '%' + Edit1.Text + '%';
Query.Open;

Y luego en un boton de cerrar busqueda añado esto:

Código Delphi [-]
Query.Close;

Con esto deberia "filtrarme en el DBGrid", no??, tambien he probado en el codigo del final del boton de buscar añadir un DBGrid.refresh y tampoco. Me extraña porque el codigo no da error, simplemnte en el DBGrid se quedan lso mismos datos sin hacer nada.

Saludos, y gracias
Responder Con Cita
  #8  
Antiguo 15-05-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
No me ha terminado de quedar claro si tienes el Query unido al Grid mediante el DataSource o no.

Si no lo tienes unido, haz la unición, sino, no te servirá de nada lanzar la Query

Si lo tienes unido.... realmente no te "filtra"? Debería hacerlo!! O el problema está en "quitar el filtro"?
Responder Con Cita
  #9  
Antiguo 15-05-2004
RyAr RyAr is offline
Miembro
 
Registrado: oct 2003
Posts: 74
Poder: 21
RyAr Va por buen camino
Buenas, tengo una tabla a la cual le digo donde esta la tabla, y el nombre de la tabla de paradox que es agenda.db, luego pongo un datasource al que le doy en dataset el nombre de la tabla. Luego en el TQuery en dataset le doy el datasouerce, y lo mismo en el DBGrid, ya que yo veo los datos en el grid, pero al buscar no "filtran".

He probado a poner una opcion del grid de filtered a tru, pero tampoco "filtra".

Otra prueba que he ehcho es en el TQyery hacer una consulta simple tipo select * from agenda where nombre = 'Pepe' y al ejecutar query.open tampoco se "filtraba" en el grid.

Estoy ya medio loco xDDDDDDDDD

Saludos
Responder Con Cita
  #10  
Antiguo 15-05-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Creo que el problema que tienes es de enlace de componentes

Sería lo siguiente:

TDBGrid (datasource) -> TDataSource (dataset) -> TQuery

Lo que hay entre paréntesis es la propiedad que se ha de usar para enlazar con el siguiente componentes

El TQuery no ha de ir enlazado a ningún lado y, el TTable te sobraría
Responder Con Cita
  #11  
Antiguo 15-05-2004
RyAr RyAr is offline
Miembro
 
Registrado: oct 2003
Posts: 74
Poder: 21
RyAr Va por buen camino
Efectivamente era eso, muchas gracias por tu paciencia. Ahora para que em muestra la tabla antes de ejecutar la consulta lo unico que he de hacer es cam,biar el datasource a la tabla, y luego al query.

Saludos, y muchas gracias
Responder Con Cita
  #12  
Antiguo 16-05-2004
RyAr RyAr is offline
Miembro
 
Registrado: oct 2003
Posts: 74
Poder: 21
RyAr Va por buen camino
Buenas, he estado probando para cuando una consulta no devuelve filas, y he probado esta codigo:

Código Delphi [-]
If Query.RowsAffected  = 0 then begin
ShowMessage ('No hay datos en la consulta.');
end;

El problema es que siempre me sale el mensaje hasta cuando hay resultados en la consulta, ¿no es asi?.

Saludos, y gracias
Responder Con Cita
  #13  
Antiguo 16-05-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Prueba con Query.IsEmpty
Responder Con Cita
  #14  
Antiguo 16-05-2004
RyAr RyAr is offline
Miembro
 
Registrado: oct 2003
Posts: 74
Poder: 21
RyAr Va por buen camino
Gracias, funcionan las dos

Saludos
Responder Con Cita
  #15  
Antiguo 17-05-2004
RyAr RyAr is offline
Miembro
 
Registrado: oct 2003
Posts: 74
Poder: 21
RyAr Va por buen camino
Buenas, seguimos avanzando en el tema, y surgen nuevas dudas.

El problema esta ahora en que yo al prinicpio linko el datasource con la table, pero cuando hago la consulta linko el mismo datasource con la query, y em devuelve las filas en el dbgrid, del cual selecciono una fila, y tengo un boton de modificar registro, pero se me abre el nuevo formulario con los dbedit correctamente con los datos... pero al estar en la query no me deja modificar. ¿Como puedo modificar los datos de la tabla a través de la consulta?

Gracias y saludos
Responder Con Cita
  #16  
Antiguo 17-05-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
un par de cosas

1.- El TTable no lo necesitas para nada. Mírate el mensaje 6 de este hilo
2.- Para que una consulta la puedas modificar, has de poner la propiedad del TQuery RequestLive a true o bien usar el componente TUpdateSQL (creo recordar que se llama)

Espero te sirva
Responder Con Cita
  #17  
Antiguo 18-05-2004
RyAr RyAr is offline
Miembro
 
Registrado: oct 2003
Posts: 74
Poder: 21
RyAr Va por buen camino
Pero si que necesito la tabla para poder insertar registros y ver los datos en el grid, puesto que sino no sale nada en el grid, y no puedo insertar registros desde dbedit, no???

Una vez he activado esa propiedad, en un boton de guardar pongo este cogido query.updaterecord; y al volver a visualizar la tabla no se guardan los cambios.

Estoy liado con la tabla??

Saludos
Responder Con Cita
  #18  
Antiguo 18-05-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
RyAr

De tus mensajes en este hilo queda claro que apenas empiezas con bases de datos y muy posiblemente con Dephi así que primero que nada te recomiendo te leas algún tutorial para conocer el modelo entidad-relación- fundamental para el entendimiento y diseño de bases de datos relacionales. Una búsqueda en Google te ayudaá en esto, como muestra te pongo este. Después será bueno que entiendas lo básico del lenguaje SQL- imprescindible para obtener y modificar datos en las tablas de una base de datos. También encontrarás muchos tutoriales en línea como este. Desde luego será muy importante que aprendas los rudimentos de la conexión a bases de datos con Delphi para lo cual dispones de la ayuda del mismo Delphi y los demos que incluye. El acceso a bases de datos se incluye en prácticamente cualquier libro básico de Delphi y puedes incluso bajar gratuitamente La Cara Oculta de Delphi 4 que si bien fue escrito para la versión 4, te servirá perfectamente para empezar.

No se trata que profundices en cada uno de estos tópicos sino sólo que te des una buena idea de qué trata todo el asunto de manera que entiendas bien, por ejemplo, la diferencia entre usar un TTable y un TQuery para no andar "dando palos de ciego". Si bien la lectura de estos temas te puede llevar una semana, a la larga será más rápido que el método de "prueba y error" y te dará unos fundamentos mucho más sólidos para tu desarrollo.

-------------

Dicho lo anterior y para que no se diga que no contesto te comento que normalmente los datos que obtienes de una consulta SQL con un TQuery no son editables salvo que se den ciertas condiciones. En tu caso es muy posible que así sea para lo cual bastará que pongas la propiedad RequestLive del Query en true. Con esto te olvidas por completo de tu componente TTable- bórrala ya del formulario.

Ahora, si resultase que tu consulta SQL no es editable (aun con RequestLive) puedes optar, al menos, por dos caminos: uno es el usar una componente TUpdateSQL para proveer al motor de bases de datos de las consultas SQL necesarias para la edición, inserción y borrado de registros. Pero, claro, tendrás que entender un poco más de cómo funcionan las componentes de acceso a bases de datos y de SQL en general. También puedes olvidarte del Query y quedarte con tu TTable y utilizar el evento OnFilterRecord que te permite filtrados más complejos al permitirte decidir por cada registro si se muesra o no. Pero si bien te puede parecer lo más sencillo yo en lo personal usaría esto como último recurso ya que suele ser bastante más lento en rendimiento que otros métodos.

// Saludos
Responder Con Cita
  #19  
Antiguo 19-05-2004
RyAr RyAr is offline
Miembro
 
Registrado: oct 2003
Posts: 74
Poder: 21
RyAr Va por buen camino
Buenas, ya he estado mirando los manuales, y toda esta confusion se debe a un profesor que nos dio Delphi sin tener ni puta idea, así va la enseñanza...

Te comento que ya he logrado hacer lo que queria, solo hay un problema. Quiero actualizar un dato en todas las filas el cual introduzco por teclado, siendo este el codigo SQL:

Código SQL [-]
UPDATE basedatos 
SET Precio_unidad = recio, Total = Superficie * Precio_unidad 
WHERE Superficie IS NOT NULL

Y le paso el precio que introduzco en un edit:

Código Delphi [-]
Form3.Query1.Close;
Form3.Query1.ParamByName('precio').AsFloat := strtofloat(Edit1.Text);
Form3.Query1.Open;

Entonces al darle al boton de aceptar me salta este error "Error creating cursor handle", y entonces me voy a ver los registros, y da la casualidad que ha actualizado todos menos el primero, y que si cierro y vuelvo a entrar al programa estan todos actualizados, ¿que problema hay?.

Saludos, y gracias por tu apciencia
Responder Con Cita
  #20  
Antiguo 19-05-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por RyAr
Código Delphi [-]
Form3.Query1.Close;
Form3.Query1.ParamByName('precio').AsFloat := strtofloat(Edit1.Text);
Form3.Query1.Open;

Usa ExecSQL en lugar de Open. Open es para consultas tipo SELECT que te devuelven registros y ExecSQL es para consultas que actualizan, insertan o borran registros.

// Saludos
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 13:44:26.


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