我使用表單(名為Mainform )管理 Microsoft Access 2019 資料庫(由客戶擁有),其記錄集源是 MySQL 直通查詢(SELECT * FROM table_on_mysql_db);每個記錄集(直接在打開Mainform 時顯示)都是可讀的,并且它具有三個欄位:其中一個是description,包含文本。
雙擊描述欄位時,會彈出一個小型子表單(名稱Subform,包含一個名為keywordDescr的文本值欄位,以及一個OK按鈕和一個Cancel按鈕)。
如果我在keywordDescr(即anyword)中輸入一些單詞并按OK,則以下直通查詢
SELECT * FROM table_on_mysql_db WHERE description LIKE '%anyword%'
正在呼叫并且結果集輸出必須顯示在Mainform中(子表單仍保持打開狀態);不幸的是,Mainform內容沒有根據上述 MySQL 過濾查詢進行相應更新。
以下是單擊子表單中的OK按鈕時呼叫的 VBA 代碼(OK 是標簽,按鈕名稱是button_search_description):
Private sub button_search_description_Click()
on Error goto ErrDescr
Dim qdfc as DAO.QueryDef
Dim qryPT as String
Dim ODBC_STRING as String
Dim kwd as String
kwd = Me.keywordDescr
kwd = Replace(kwd, "*", "%") '(the customer is still used to entering Access wildcard rather than MySQL wildcard!)
kwd = Replace(kwd, "'", "\'")
ODBC_STRING = "ODBC;DSN=MY_DSN_NAME" ' it works!
qryPT = "SELECT * FROM table_on_mysql_db WHERE description LIKE '" & kwd & "'"
DoCmd.setWarnings = false
Set qdfc = DBEngine(0)(0).CreateQueryDef("")
With qdfc
.Connect = ODBC_STRING
.SQL = qryPT
.ReturnsRecords = True
Me.Parent.RecordSource = qryPT
End With
Set qdfc = nothing
DoCmd.setWarnings = true
ErrDescr:
Resume Next
End Sub
感謝任何人可以給我一些有用的建議!
uj5u.com熱心網友回復:
修改查詢物件然后將表單 RecordSource 設定為相同的 SQL 陳述句確實沒有意義。
在設計視圖中,將表單 RecordSource 設定為傳遞查詢物件名稱或使用傳遞查詢作為源的 SQL 陳述句:SELECT * FROM PTQname;。使用代碼修改傳遞查詢物件以更改引數但不更改表單 RecordSource。
uj5u.com熱心網友回復:
你在這里嘗試做什么讓我有點困惑,但據我了解,你有一個純 MySQL 查詢(PTQName),它是第一次打開表單(MainForm)時的行源。現在這是一個在 Access 中定義的直通查詢,而不是在 MySQL 中。然后您希望能夠打開一個彈出表單來過濾您從 MainForm 中的 PTQName 獲得的結果。我首先要做的是獲取 PTQName 的代碼,并以此在 MySQL Workbench 中創建一個實際視圖(例如,將其稱為“MyView”)。然后將該視圖鏈接到您的 Access 資料庫。Access 會將這個 MySQL 視圖視為另一個鏈接表。將 MainForm 的記錄源設定為此視圖的名稱,以便在它打開時顯示來自您的視圖的記錄。當您想使用彈出表單過濾 MainForm 中顯示的記錄時,要么使用 MainForm 的 Filter 和 FilterOn 屬性,要么設定 MainForm 的 recordsource = "select * from MyView where ..."。我認為這里甚至不需要使用直通查詢,更不用說在運行時修改其 SQL。但如果我有誤解,請告訴我!
uj5u.com熱心網友回復:
最后,我解決了這個問題;@deluxeinformation 給了我正確的方向,但我還要感謝其他給我有用提示的用戶。
我在 MySQL 資料庫上定義了一個名為View_list的視圖,然后將View_list設定為Mainform記錄源,并且在Mainform加載時,執行過濾的 PT 查詢SELECT * FROM View_list WHERE F1,其中F1是加載Mainform的默認過濾器。
單擊子表單中的OK按鈕呼叫類似的 PT 查詢但具有不同的過濾器;系結到該事件的VBA代碼如下(kwd是子表單Subform的輸入文本keywordDescr中輸入的值):
qryPT = "SELECT * FROM View_list WHERE description LIKE '" & kwd & "'"
With qdfc
.Connect = ODBC_STRING
.SQL = qryPT
.ReturnsRecords = True
Forms!Mainform.RecordSource = qryPT
End With
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/497869.html
