30. september 2004 - 10:21Der er
7 kommentarer og 1 løsning
Oprydning i forespørgsler på en nem måde
Jeg har en del forespørgsler liggende som ikke anvendes længere, og som jeg ønsker at fjerne. Hvordan finder man ud af på en let måde hvilke forespørgsler der er i brug? Kan man ikke undgå at skulle gå ind i hver enkelt rapport og formular for at se hvilken forespørgsel de bygger på?
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
Du kan lægge denne funktion i et modul (kræver reference til DAO):
Public Function SøgEfterOrd(Søgord As String, Optional Erstat_Med As String) As Boolean '*** Denne funktion søger i alle forespørgsler efter et givent ord (f.eks. en bestelt tabel) '*** Endvidere søger den i Recordsource på forms og reports '*** Endvidere søger den på kombobokse og listbokse On Error Resume Next Dim qdef As QueryDef Dim frm As Form, rpt As Report Dim ctrl As Control Dim n As Integer DoCmd.Echo False
'forespørgsler For Each qdef In CurrentDb.QueryDefs If InStr(1, qdef.SQL, Søgord) > 0 Then SøgEfterOrd = True Debug.Print "Query", qdef.Name, "SQL" End If Next qdef
'forms For n = 0 To CurrentProject.AllForms.Count - 1 DoCmd.OpenForm CurrentProject.AllForms(n).Name, acDesign, , , , acHidden Set frm = Forms(CurrentProject.AllForms(n).Name) If InStr(1, frm.RecordSource, Søgord) > 0 Then SøgEfterOrd = True Debug.Print "Form", frm.Name, "Recordsource" End If 'controls For Each ctrl In frm If ctrl.ControlType = acComboBox Or ctrl.ControlType = acListBox Then If InStr(1, ctrl.RowSource, Søgord) > 0 Then SøgEfterOrd = True Debug.Print "Form", frm.Name, ctrl.Name, "Combo-Rowsource" End If End If Next ctrl
Set frm = Nothing DoCmd.Close acForm, CurrentProject.AllForms(n).Name, acSaveNo Next n
'rapporter For n = 0 To CurrentProject.AllReports.Count - 1 DoCmd.OpenReport CurrentProject.AllReports(n).Name, acViewDesign Set rpt = Reports(CurrentProject.AllReports(n).Name) If InStr(1, rpt.RecordSource, Søgord) > 0 Then SøgEfterOrd = True Debug.Print "Report", rpt.Name, "Recordsource" End If
'Controls For Each ctrl In rpt If ctrl.ControlType = acComboBox Or ctrl.ControlType = acListBox Then If InStr(1, ctrl.RowSource, Søgord) > 0 Then SøgEfterOrd = True Debug.Print "Report", rpt.Name, ctrl.Name, "Combo-Rowsource" End If End If Next ctrl
Set rpt = Nothing DoCmd.Close acReport, CurrentProject.AllReports(n).Name, acSaveNo Next n DoCmd.Echo True End Function
Herefter kan du - i Immidiate-vinduet (Ctrl-G) - skrive: call SøgEfterOrd("Din forespørgsel")
NB: Metoden finder dog ikke de steder i din VBA-kode, hvor forespørgslen indgår. Disse skal søges manuelt i VBA-editoren
Hvad betyder et år fra eller til, mellem venner? :o)
tak for point :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.