2015-06-17 46 views
0

在VBA項目中,我有一個大型SQL查詢,我將其檢索到一個字符串變量中以形成從遠程數據庫檢索數據的操作的一部分。將大型文本資源存儲在VBA項目中

目前,我以純文本形式存儲在文件中這一點,我從該文件中檢索需要的時候。

雖然這使得開發/更新更容易,因爲我可以隨時編輯文件中的查詢,但它確實呈現曝光,因爲用戶可能會惡意地編輯文件(損壞的機會有限,但仍然是不可接受的安全風險) 。

來降低這種風險,我正在考慮的選項/人認爲是:

  • 店項目中的文本,作爲一個全局變量。好,因爲它沒有公開給用戶,但不幸的是這意味着每次我需要對查詢進行更改時,我必須將查詢轉換爲塊,轉義引號,使用行連續,添加換行符以及將每個塊連接在一起。育。
  • 存儲包裹在指令模塊中的文本不編譯它,然後使用VBE方法來檢索和在從模塊行解析的文本。比上述更好,但要求最終用戶啓用VBE。這就是這個選項。
  • 保持在外部文件中的文本,但它混淆(例如Base64編碼它)。爲編輯添加一些(可接受的)開銷,但需要項目中的base64解碼方法(VBA是否有一個?)。
  • 如上所述,但使用某種加密 - 同樣需要項目中的解密方法。
  • 將文本以基於文件的安全格式(例如.mdb或.accdb)和代碼憑據存儲到Visio項目中以檢索文本。

任何建議或經驗?我錯過了VBA提供的一些簡單的選擇嗎?

+0

你是什麼意思選項1 - 「變換成塊...串聯「 - 你需要多長時間更改從查詢中收到的字符串?如果字符串將要更改,是否應該再次運行查詢? – Raystafarian

+0

@Raystafarian實際上存儲的字符串*是*這個查詢主要是在開發過程中,我需要經常更改它,在生產中應該是非常靜態的,但是隻要對查詢進行細微更改而不必重新發布解決方案的能力就是我的問題的驅動程序。 – sasfrog

+0

我不認爲你可以在應用程序關閉時將它存儲在一個Visio變量中,而不會丟失它。我也不認爲*你可以將輸出打印到VBE中的一個模塊中 – Raystafarian

回答

1

爲什麼不查詢字符串存儲在遠程數據庫中,當你需要它找回?您可以維護該數據庫中的字符串並使用數據庫[只讀]保護來防止普通用戶更改該數據庫。

表可能看起來像TABLE QUERYSTRINGS (QueryName, QueryString).

查詢可能是"SELECT QueryString FROM QUERYSTRINGS WHERE QueryName='MyQuery';"

+0

好的建議。在這種情況下,遠程數據庫不在我的控制範圍之內,也沒有機會對其執行任何操作,但從中讀取數據。如果我可以添加對象,我只是將我的查詢作爲視圖實現!然而,你所建議的是與我最後的點,這是目前我的首選選項。 – sasfrog

1

我建議另一種解決辦法?保持在「非常隱藏」的表格中。

複製SQL查詢到一個表(一排,或很多,給你);然後進入VBA(宏編輯器,IDE,無論你怎麼稱呼它)並在項目菜單中選擇該表;終於在屬性窗口(按F4,如果你不能看到它),選擇:

Visible = 2 (xlSheetVeryHidden) 

這樣,用戶將不會看到表和代碼,只要您用密碼保護的項目中,用戶將無法訪問它。

+0

這是一個很好的答案,但我通過使用excel-vba標籤自己提出了這個問題,並沒有明確表示這是一個Visio解決方案。所以這不適用於我的情況。 Mea culpa:我使用excel-vba標記作爲智能VBA練習者的蜜罐來查看我的問題...... – sasfrog

相關問題