FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Hacer busqueda en un Ttable
Hola a tod@s, estoy haciendo un programa que me tiene que hacer una busqueda en una Ttable, lo hice aplicando un filtro para que se pudiera buscar por el campo [Nombre] o por el campo [PersonaContacto], esto funciona a la perfección con pocos registros, en cuanto se lo pase a mi jefe y metio trescientos y pico registros en la tabla el filtro se hace lentisimo.
He leido por los Foros que se pueden hacer busquedas con Locate, lo declarado de la siguiente forma:
Y se me posiciona en el primer registro de la tabla, no me lo busca, esta mal declarado? ¿Una vez echa la busqueda con Locate se puede aplicar un filtro para que en el Dbgrid solo me aparezcan los registros que busco?Es que esto es lo que me interesaria que hiciera. O a lo mejor hay que hacer la busqueda de otra forma.Os estaría muy agradecido si me lo solucionarais. Gracias a Todos por vuestra ayuda. |
#2
|
|||
|
|||
Para lo que tú quieres es mejor que uses una query y hagas un filtrado de los datos de la tabla mediante una SELECT...
Código:
// Por si las moscas ;) Form1.Query1.Close(); // Cambiamos la condición de búsqueda // Utilizamos quotedString para ponerle comillas simple a la cadena (en el caso que sea de tipo string ;) ) Form1.Query1.SQL.Text := 'SELECT misCampos FROM miTabla WHERE Nombre='+quotedString(Edit1.Text); // Ejecutamos la consulta Form1.Query1.Open(); Si lo que quieres es realizar una búsqueda parcial, solamente debes cambiar la condición del WHERE... Código:
.... Form1.Query1.SQL.Text := 'SELECT misCampos FROM miTabla WHERE Nombre LIKE "%'+quotedString(Edit1.Text)+'%"'; .... Última edición por Er_Manué fecha: 30-11-2004 a las 17:43:03. |
#3
|
|||
|
|||
Gracias por contestarme ER MANUE,lo que pasa es que el componente Query no lo controlo mucho y no se como hacer que en mi Dbgrid1 salga los registros que tengo en los campos que tengo en mi tabla.
Lo he asociado con un Datasource igual que el componente Ttable, pero como hago para que salgan los registros de los campos que yo quiera., es que de codigo SQL no tengo ni pajolera idea. Por cierto la sentencia "quotedString" me da un error, tengo que poner alguna libreria en la USES.Gracias por responderme. |
#4
|
|||
|
|||
upps.. es quotedStr() viene definida en la libería SysUtils que por defecto se incluye cada vez que creamos un formulario.
Para acceder a los registros de un TQuery a través de un DataSource, igual que para un TTable. Para mostrar únicamente una serie de campos de los registros, por ejemplo únicamente el nombre, apellidos y dirección, podemos hacerlo de varias formas: [/list]
Espero que te sirva de ayuda. Si tienes problema con el SQL por internet hay miles de tutoriales, en esta misma página tienes un tutorial de SQL, en la sección manuales. Salu2 |
#5
|
|||
|
|||
Gracias por tu ayuda,pero yo no quiero filtrar por campos sino por registros, me explico:
Yo tengo un programa con empresas direcciones telefonos etc... y lo que quiero es que cuando alguien le de a buscar, escriban el nombre de la empresa o de la persona de contacto y en el dbgrid solo me aparezca esa empresa, ya te digo que lo he conseguido con la propiedad filtered de Ttable pero cuando hay muchos registros de momento 400 va muy lenta la busqueda por eso puse este Hilo Si me puedes ayudar de nuevo te lo agradecere, sino gracias de todas formas por tu interes. |
#6
|
|||
|
|||
mmmm..
Exactamente eso es lo que te expliqué la primera vez que te respondí , La propiedad filter lo que hace es establecer un filtro sobre los registros recuperados por el TTable, TQuery,... Si lo que quieres es hacer un filtrado ANTES de obtener los datos y así sobrecargar menos el motor, debes hacer el filtrado mediante el uso de SQL. Para hacer un filtrado mediante SQL, únicamente debemos establer el criterio de selección en el campo WHERE de la consulta. Por ejemplo, si tenemos los siguientes datos: - Una tabla que se llama clientes - La tabla clientes tiene los siguiente campos:
Una anotación, la estructura básica de una sentecia SQL es: SELECT campos FROM tabla WHERE condicion campos = CAMPOS a recuperar de cada registro, si los queremos todos ponemos * tabla = TABLA de la queremos recuperar los datos. condicion = CONDICIÓN de filtrado que le quermos aplicar a la TABLA seleccionada. weno con todo esto, ahora queremos hacer una búsqueda mediante el campo nombre sería tan simple como añadir a la propiedad SQL del TQuery: Código:
..... Form1.Query1.SQL.Text := 'SELECT * FROM clientes WHERE nombre='+quotedStr(edtFiltroNombre.text); ...... Si quiero realizar una búsqueda por el campo empresa debemos utilizar la siguiente sentencia: Código:
..... Form1.Query1.SQL.Text := 'SELECT * FROM clientes WHERE empresa='+quotedStr(edtFiltroEmpresa.text); ...... Y ahora por último, si quisieramos hacer un filtrado mediante los campos nombre y empresa, usamos: Código:
..... Form1.Query1.SQL.Text := 'SELECT * FROM clientes WHERE nombre='+quotedStr(edtFiltroNombre.text)+' AND empresa='+quotedStr(edtFiltroEmpresa.text); ...... Código:
...WHERE nombre='+quotedStr(edtFiltroNombre.text)+ ' AND empresa='+quotedStr(edtFiltroEmpresa.text)+' AND direccion='+quotedStr(edtFiltroDireccion.text) Un salu2 Er_Manué |
|
|
|