ms-access - validacion - rellenar campo automáticamente una vez introducido otro en access
¿Cómo puedo crear un formulario que busque valores en todas las tablas de una base de datos en acceso? (2)
Yo también no sé por qué querrías hacer algo así ...
Creo que la solución publicada por Daniel Cook es correcta, solo tomé un enfoque ligeramente diferente. ¿Necesita igualar el valor exacto como yo? De todos modos, aquí está mi código:
Function searchTables(term as String)
Dim T As TableDef
Dim Rs As Recordset
Dim Result() As String
Dim Counter
Counter = 0
For Each T In CurrentDb.TableDefs
If (Left(T.Name, 4) <> "USys") And (T.Attributes = 0) Then
Set Rs = T.OpenRecordset
While Not Rs.EOF
For Each Field In Rs.Fields
If Rs(Field.Name) = term Then
Counter = Counter + 1
ReDim Preserve Result(Counter)
Result(Counter) = T.Name & "," & Field.Name
End If
Next
Rs.MoveNext
Wend
Rs.Close
End If
Next
If Counter = 0 Then
searchTables = Null
Else
searchTables = Result
End If
End Function
Debe filtrar los valores duplicados, en caso de que la función coincida varias veces con la misma presentada en la misma tabla.
Estoy tratando de crear un formulario que busque el valor dentro de todas las tablas en la base de datos (hay más de 1 tabla). El resultado se mostrará como el nombre de la tabla en la que aparece. Si alguien puede ayudarme, será agradable.
En resumen, tengo un formulario con un cuadro de texto y un botón. Introduzco la cadena de búsqueda (por ejemplo, 183939) y hago clic en el botón. Busca el valor (183939) dentro de todos los campos en las tablas de la base de datos, y si se encuentra el valor, muestra el nombre de la tabla en la que aparece. Gracias por la ayuda.
Creo que esta es una mala idea porque podría llevar mucho tiempo y proporcionar resultados confusos debido a que también se buscan tablas del sistema ... pero la siguiente función devolverá una matriz de todos los nombres de tablas que contengan el término de búsqueda o nada si no fuere no encontrado. El ejemplo de llamada es tal: theTables = containingTable("hello")
donde theTables es una variante. Una limitación es que esto fallará en los campos multivalor.
Function containingTables(term As String)
Dim db As Database
Dim tds As TableDefs
Dim td As TableDef
Set db = CurrentDb
Set tds = db.TableDefs
For Each td In tds
For Each f In td.Fields
On Error Resume Next
If DCount("[" & f.Name & "]", "[" & td.Name & "]", "[" & f.Name & "] LIKE ''*" & term & "*''") Then
If Err.Number <> 0 Then
Debug.Print Err.Number, Err.Description
Err.Clear
On Error GoTo 0
Else
containingTables = containingTables & td.Name & ","
Exit For
End If
End If
Next
Next
Set tds = Nothing
Set db = Nothing
''Alternate Version
if Len(containgingTables) then containingTables = Left(containingTables, Len(containingTables) - 1)
''Original Version
''if Len(containgingTables) then containingTables = Split(Left(containingTables, Len(containingTables) - 1), ",")
End Function
Para mostrar los resultados con la versión alternativa, simplemente use: Msgbox(containingTables(searchTerm))
donde searchTerm
es lo que está buscando.