![]() |
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 |
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:
Y llenarías el parámetro con
// Saludos |
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 |
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 |
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 |
podrías mirar de hacer algo así
Espero te sirva |
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:
Y posteriormente en un boton buscar añado este codigo en el evento onclick:
Y luego en un boton de cerrar busqueda añado esto:
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 |
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!! :confused: O el problema está en "quitar el filtro"? |
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 |
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 |
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 |
Buenas, he estado probando para cuando una consulta no devuelve filas, y he probado esta codigo:
El problema es que siempre me sale el mensaje hasta cuando hay resultados en la consulta, ¿no es asi?. Saludos, y gracias |
Prueba con Query.IsEmpty
|
Gracias, funcionan las dos :D
Saludos |
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 |
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 |
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 |
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 |
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:
Y le paso el precio que introduzco en un edit:
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 |
Cita:
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 |
La franja horaria es GMT +2. Ahora son las 02:49:43. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi