2013-05-28 17 views
0

我有兩個版本的訪問前端。 Access 2003仍然由幾臺尚未升級到Access2010和Win7的計算機運行,但不幸的是Acces2010版本在2003年的Access崩潰中導致了我無法修復的mainform結束。後端是SqlServer 2005 SqlExpress版本。如何在Access前端找到流氓SELECT語句?

所以我堅持了2003人,誰幸好沒有在2010年的版本需要更新的能力較老的前端。現在

,阻止其從大型機轉儲負載數據的維護實用程序是越來越由「SELECT 1上Patient_Clinic_Visits」時,Access 2003中的版本在某處運行。我無法找到的是「來自Patient_Clinic_visits的SELECT 1」的來源。

我已經看過所有的模塊代碼,所有的查詢,卻找不到這樣的事情。

我承擔因此,必須在前端的形式,但如何做到II搜索,如果沒有通過該形式的所有對象和控制的記錄源,在它的一些SQL代碼看?

歡呼聲,

JonHD

+0

您可以添加一些代碼/ SQL嗎? –

回答

0

在Access菜單中選擇數據庫工具 - >數據庫文檔。在那裏,選擇所有對象並按下確定。這將需要一些時間,但是隨後您將看到一份報告,其中列出了數據庫中的所有內容,包括最後的代碼。

報告可能是大型數據庫相當大。

可以導出到Word的報告(有它的一個選項)。在那裏,搜索你的字符串。 (我認爲它應該是「SELECT 1 from Patient_Clinic_visits」)

+0

謝謝Cha ..最後我用下面的例程: – dmc2005

1

最後,我搜索了一些其他問題,並考慮了以編程方式傾倒可能的違規信息。這是我對兩種不同答案的調製,以做我想做的事。在VBA中實現即時窗口的極限,它將從Debug.Print中保留多少行,我已經使用WScript對象轉儲到日誌文件。

的基本代碼:

  • 打開每個窗體數據庫反過來
  • 清除其記錄源描述
  • 那麼對於其形態上的每個控件,轉儲相關信息MAY包含SQL中某種方式
  • 注意:我使用這樣一個事實,即導致錯誤的Writeline(某些代碼)會失敗,並且不會寫入以避免對不同控制類型進行大量測試,以便轉儲或不轉儲屬性。
  • 隨後關閉了形式
  • 然後它通過在數據庫中的所有查詢,並轉儲SQL代碼

(注:這到底沒找到答案我的問題 - 我看其他最近的問題!!)

(注2:這是一個快速和骯髒的腳本。我注意到它第一次運行的時候,WriteStream並沒有寫任何東西,儘管它在執行代碼時似乎在做某些事情。無論如何,當我再次運行它,它的工作。沒有花時間調試爲什麼!)。

Function DumpFormsAndQueries() 

     Dim obj As AccessObject 
     Dim objctrl As Control 
     Dim frm As Form 
     Dim dbs As Object 


     Dim fsoSysObj As FileSystemObject 
     Dim filFile  As Object 
     Dim txsStream As TextStream 
     Dim strPath  As String 

     Set dbs = Application.CurrentProject 

     Set fsoSysObj = New FileSystemObject 

     ' Return Windows Temp folder. 

     strPath = "C:\Temp\" 

     On Error Resume Next 
     ' See if file already exists. 
     Set filFile = fsoSysObj.GetFile(strPath & "Database_Form_dump.Log") 
     ' If not, then create it. 
     If Err <> 0 Then 
      Set filFile = fsoSysObj.CreateTextFile(strPath & "Database_Form_dump.Log") 
     End If 

     Debug.Print ">> dumping to: " & strPath & "Database_form_dump.log" 

     Set txsStream = filFile.OpenAsTextStream(ForAppending) 

     For Each obj In dbs.AllForms 

      DoCmd.OpenForm obj.name, acDesign 
      Set frm = Forms(obj.name) 

      Debug.Print ">>>> dump form: " & obj.name 

      txsStream.WriteLine "=====================================================================" 
      txsStream.WriteLine "Form  : " & obj.name 
      txsStream.WriteLine "RecordSource: " & frm.RecordSource 
      txsStream.WriteLine "=====================================================================" 

      For Each objctrl In frm.Controls 

       txsStream.WriteLine "     --------------------------------------------------" 
       txsStream.WriteLine "     : " & objctrl.name & " Type = " & TypeName(objctrl) 
       txsStream.WriteLine "     --------------------------------------------------" 
       On Error Resume Next 
       txsStream.WriteLine "     >>>> Recordsource: (" & objctrl.RecordSource & ")" 
       txsStream.WriteLine "     >>>> Controlsource: (" & objctrl.ControlSource & ")" 
       txsStream.WriteLine "     >>>> Rowsource: (" & objctrl.RowSource & ")" 
       txsStream.WriteLine "     >>>> Caption: (" & objctrl.Caption & ")" 
       txsStream.WriteLine "     >>>> Text: (" & objctrl.Text & ")" 
       txsStream.WriteBlankLines 1 


      Next objctrl 


      DoCmd.Close acForm, obj.name, acSaveNo 

      txsStream.WriteBlankLines 3 

     Next obj 

      txsStream.WriteLine "=====================================================================" 
      txsStream.WriteLine " Q U E R I E S - in database" 
      txsStream.WriteLine "=====================================================================" 

     Dim db As DAO.Database 
     Dim qdf As DAO.QueryDef 

     Set db = CurrentDb() 
     For Each qdf In db.QueryDefs 
      txsStream.WriteLine "Query: " & qdf.name 

      txsStream.WriteLine "SQL (start) ---------------------------------------------------- " 
      txsStream.WriteLine qdf.sql 
      txsStream.WriteLine "SQL (end) ---------------------------------------------------- " 
     Next qdf 
     Set qdf = Nothing 
     Set db = Nothing 


     txsStream.Close 

     Debug.Print ">> ended" 

End Function