Access - metodo seek

 
Vista:
sin imagen de perfil
Val: 266
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

metodo seek

Publicado por Pablo (328 intervenciones) el 24/09/2020 20:22:16
Hola a todos
Aclaro que trabajo con access 2007, si alguien puede ayudarme se lo agradezco
Estoy haciendo formulario para buscar en una tabla, los campos son independientes, quiero que al encontrar un registro de la tabla los pinte en el formulario, pregunta si es el deseado y si no lo es sigue buscando.
¿Cuál es la mejor manera de hacer esto?
Estoy buscando NIFs, puedo saberlo entero, sólo el principio, el final o el medio
Se que existen los métodos find y seek, en consultas like y operadores *,#...
¿Alguien puede orientarme un poco?
Gracias
Pablo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

metodo seek

Publicado por Mario (25 intervenciones) el 25/09/2020 03:49:57
Hay varias maneras de hacer esto, yo uso usualmente un form con un textbox(name: txtInput) y un list box (name: lbxStores)

en el evento change del texbox tu pones este codigo:
1
2
3
4
5
6
7
8
9
10
On Error Resume Next
  Dim strSQL As String
  strSQL = "SELECT tblcustomer.id" & vbNewLine
  strSQL = strSQL & "           , tblcustomer.FldfullName" & vbNewLine
  strSQL = strSQL & "           , tblcustomer.FldPhone" & vbNewLine
  strSQL = strSQL & "        FROM tblcustomer" & vbNewLine
  strSQL = strSQL & "       WHERE (((tblcustomer.[FldfullName]) Like '" & "*" & txtInput.Text & "*" & "')) " & vbNewLine
  strSQL = strSQL & "          OR (((tblcustomer.[FldPhone]) Like '" & "*" & txtInput.Text & "*" & "'));"
lbxStores.RowSourceType = "Table/Query"
Me.lbxStores.RowSource = strSQL

cualquier dato que escribas en el texbox , mostrar ocurrencias segun el campo fullname y fldphone (puedes usar los que desees), en el listbox
alguna duda me avisas
Mario
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 266
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

metodo seek

Publicado por Pablo (328 intervenciones) el 25/09/2020 13:00:04
Gracias Mario. Acabo de ver tu respuesta, si no me equivoco construyes un sentencia sql con * & dato a buscar & * y esta sentencia la pasas como rowsource de un cuadro de lista.
Lo probaré por la tarde, gracias

Pablo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 266
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

metodo seek

Publicado por Pablo (328 intervenciones) el 25/09/2020 18:23:01
Hola, buenas tardes
Estoy probando lo que me aconsejó Mario, construyo una sql que queda así: Select nifcomunero as nifcomunerob From comuneros Where nifcomunero Like '*36203*', después la paso como origen del registro del formulario con Me.RecordSource = sql
Aparentemente está bien pero, no me pinta nada, no se por que, le añadí me.repaint y tampoco, dónde está mi error, porque seguro que estoy haciendo algo mal, se agradece que me abran los ojos.
Pienso que mi error puede estar en el lío de nombres. En la tabla es nifcomunero, el cuadro de texto independiente es nifcomunerob
Un saludo

Pablo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 266
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

metodo seek

Publicado por Pablo (328 intervenciones) el 25/09/2020 19:47:22
Me contesto a mi mismo
Como decía antes no lo tenía solucionado, ahora si, explico:
Tengo un formulario con origen en la tabla, al lado de cada cuadro de texto de cada campo un botón, lo que hace este botón es llamar a otro formulario que solo pide el dato a buscar,p.e. si es el botón que está al lado del nombre el form que se abre pide el nombre o parte del nombre, después de actualizar construyo la sql que paso al form de búsqueda y cierro este, quedando sólo el de búsqueda con los registros filtrados.
Solucionado el problema.

Se me ocurre otro: qué es mejor , más útil, más práctico, pasar una nueva RecordSource o un Filter?

Pablo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

metodo seek

Publicado por Anonimo (3316 intervenciones) el 25/09/2020 20:28:00
Todo depende:

Un filtro permite cambios mas eficientes sobre un conjunto que no varia (simplemente muestra parte del conjunto).

Un nuevo origen de datos elimina del conjunto lo que no pasa por el filtro (el formulario 'pesara' menos pero tardara mas tiempo en obtener los nuevos datos).


El método SEEK:

Es quizás el mas eficiente en un entorno DAO, requiere (exige) un índice (sea simple o compuesto), una vez que se logra encontrar el registro habría que cargar los datos en los cuadros de texto del formulario (u informe o .....) esto es: se tendrá que trabajar con DAO (que por otra parte es la columna vertebral de las tablas Access y mas eficiente que ADO, pero menos eficiente que este con datos 'externos').
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 266
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

metodo seek

Publicado por Pablo (328 intervenciones) el 25/09/2020 22:57:04
Hola Anonimo, dices que en DAO el método Seek es el más eficiente, creo que yo utilizo DAO, cuando abro un recordset lo dimensiono antes con dim rst as dao.recordset, entonces haciendolo así debería usar el método Seek, es así?

Gracias

Pablo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

metodo seek

Publicado por Anonimo (3316 intervenciones) el 26/09/2020 02:29:01
Si, se puede utilizar Seek, siempre que exista un índice (esto es: los datos ordenados por un campo o una combinación de varios campos).

Pero 'el buen uso no admite el abuso' así que los índices están condicionados, pues cada vez que se modifica un dato o se añade un dato, Access ha de regenerar el índice (al igual que verifica si cumple el resto de las reglas).

¿Has utilizado Seek en algún momento o estas intentando obtener información para analizar si vale la pena?
Yo para experimentar utilizaría los ejemplos de la ayuda, primero de forma fiel (pues estará verificado que 'así funciona') y después ... le dedicaría el tiempo que necesitase si lo viese interesante.

Como todo en el mundo de la programación (y de la mecánica y de la medicina e incluso en la cocina) se pueden utilizar diferentes métodos y según la funcionalidad deseada suele existir uno que es el mas adecuado (no el único que puede hacerlo), pero si el que mejor resultado da,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar