Jag skall konstruera en sökfunktion i access. Sökningen skall gå till så att man i ett fält skriver in ett sökord, tex företag, kommun eller liknande. Min databas har jag byggt upp genom flera tabeller och jag vill att sökningen skall gå igenom samtliga tabeller. Hmm, detta är inte helt trivialt. Speciellt om du har liten eller ingen vana alls att jobba med VBA. Hmm, detta är inte helt trivialt. Speciellt om du har liten eller ingen vana alls att jobba med VBA. Hmm, detta är inte helt trivialt. Speciellt om du har liten eller ingen vana alls att jobba med VBA.sökfunktion i access
Vidare vill jag på något smart sätt kunna lista de träffar som fås i sökningen. Hur gör man det på bästa sätt så att det blir så enkelt som möjligt för både användaren och mig, (för mig framför allt *S*).
Sidor om hur man går tillväga eller förklaringar emottages tacksamt. Är ganska grön på det här med access så jag behöver pedagoger här =)Sv: sökfunktion i access
Börja med att skapa en procedur som söker igenom ett bestämt fält i en bestämd tabell. Jag föredrar att använda mig ac DAO.Recordset för detta ändamålet enl. följande:
'====================
Public Function FindMatchingRecords (strTableName As String, strFieldName As String, strSearchedString As String) As Boolean
Dim db As DAO.Database
Dim rec As DAO.Recordset
Dim strSQL As String
Dim strMatches As String
Set db = CurrentDb()
strSQL = "SELECT " & strTableName & "." & strFieldName & " FROM " & strTableName _
& " WHERE " & strFieldName & " = " & strSearchedString
'Open the recordset
Set rec = db.OpenRecordset (strSQL, dbOpenDynaset)
rec.MoveLast
If Not rec.RecordCount <> 0 Then
MsgBox"Inga poster hittades"
rec.Close
Set rec = Nothing
FindMatchingRecords = False
Exit Function
End If
rec.MoveFirst
Do Until rec.EOF
strMatches = rec!strFieldName & " " & strMatches & vbCrLf
rec.MoveNext
Loop
MsgBox"Följande träffar hittades: " & vbCrLf & strMatches
FindMatchingRecords = True
'Clean up
rec.Close
Set rec = Nothing
End Function
För att kunna använda denna funktion måste du bifoga följande:
strTableName = Namnet på den tabell du vill söka i (ex. "tblContacts")
strFieldName = Namnet på fältet i tabellen du vill söka i (ex. "City")
strSearchedString = Texten du söker efter (ex. "Stockholm")
Denna funktion söker och returnerar bara texter. Behöver du söka efter tal eller datum måste man göra funktioner för detta också. Genom att loopa igenom hela din databas och ange samtliga tabeller och samtliga fält i samtliga tabelller kan du sedan söka igenom hela databasen.
En tanke bara:
Är det inte lite väl onödigt och söka efter en specifik uppgift i samtliga tabeller och samtliga fält om du VET att uppgiften inte kan finnas i en tabell/fält?
Man behöver ju text inte söka efter texten "Stockholm" i fältet [PersonNr]
// NiklasSv: sökfunktion i access
Börja med att skapa en procedur som söker igenom ett bestämt fält i en bestämd tabell. Jag föredrar att använda mig ac DAO.Recordset för detta ändamålet enl. följande:
'====================
Public Function FindMatchingRecords (strTableName As String, strFieldName As String, strSearchedString As String) As Boolean
Dim db As DAO.Database
Dim rec As DAO.Recordset
Dim strSQL As String
Dim strMatches As String
Set db = CurrentDb()
strSQL = "SELECT " & strTableName & "." & strFieldName & " FROM " & strTableName _
& " WHERE " & strFieldName & " = " & strSearchedString
'Open the recordset
Set rec = db.OpenRecordset (strSQL, dbOpenDynaset)
rec.MoveLast
If Not rec.RecordCount <> 0 Then
MsgBox"Inga poster hittades"
rec.Close
Set rec = Nothing
FindMatchingRecords = False
Exit Function
End If
rec.MoveFirst
Do Until rec.EOF
strMatches = rec!strFieldName & " " & strMatches & vbCrLf
rec.MoveNext
Loop
MsgBox"Följande träffar hittades: " & vbCrLf & strMatches
FindMatchingRecords = True
'Clean up
rec.Close
Set rec = Nothing
End Function
För att kunna använda denna funktion måste du bifoga följande:
strTableName = Namnet på den tabell du vill söka i (ex. "tblContacts")
strFieldName = Namnet på fältet i tabellen du vill söka i (ex. "City")
strSearchedString = Texten du söker efter (ex. "Stockholm")
Denna funktion söker och returnerar bara texter. Behöver du söka efter tal eller datum måste man göra funktioner för detta också. Genom att loopa igenom hela din databas och ange samtliga tabeller och samtliga fält i samtliga tabelller kan du sedan söka igenom hela databasen.
En tanke bara:
Är det inte lite väl onödigt och söka efter en specifik uppgift i samtliga tabeller och samtliga fält om du VET att uppgiften inte kan finnas i en tabell/fält?
Man behöver ju text inte söka efter texten "Stockholm" i fältet [PersonNr]
// NiklasSv: sökfunktion i access
Börja med att skapa en procedur som söker igenom ett bestämt fält i en bestämd tabell. Jag föredrar att använda mig ac DAO.Recordset för detta ändamålet enl. följande:
'====================
Public Function FindMatchingRecords (strTableName As String, strFieldName As String, strSearchedString As String) As Boolean
Dim db As DAO.Database
Dim rec As DAO.Recordset
Dim strSQL As String
Dim strMatches As String
Set db = CurrentDb()
strSQL = "SELECT " & strTableName & "." & strFieldName & " FROM " & strTableName _
& " WHERE " & strFieldName & " = " & strSearchedString
'Open the recordset
Set rec = db.OpenRecordset (strSQL, dbOpenDynaset)
rec.MoveLast
If Not rec.RecordCount <> 0 Then
MsgBox"Inga poster hittades"
rec.Close
Set rec = Nothing
FindMatchingRecords = False
Exit Function
End If
rec.MoveFirst
Do Until rec.EOF
strMatches = rec!strFieldName & " " & strMatches & vbCrLf
rec.MoveNext
Loop
MsgBox"Följande träffar hittades: " & vbCrLf & strMatches
FindMatchingRecords = True
'Clean up
rec.Close
Set rec = Nothing
End Function
För att kunna använda denna funktion måste du bifoga följande:
strTableName = Namnet på den tabell du vill söka i (ex. "tblContacts")
strFieldName = Namnet på fältet i tabellen du vill söka i (ex. "City")
strSearchedString = Texten du söker efter (ex. "Stockholm")
Denna funktion söker och returnerar bara texter. Behöver du söka efter tal eller datum måste man göra funktioner för detta också. Genom att loopa igenom hela din databas och ange samtliga tabeller och samtliga fält i samtliga tabelller kan du sedan söka igenom hela databasen.
En tanke bara:
Är det inte lite väl onödigt och söka efter en specifik uppgift i samtliga tabeller och samtliga fält om du VET att uppgiften inte kan finnas i en tabell/fält?
Man behöver ju text inte söka efter texten "Stockholm" i fältet [PersonNr]
// Niklas