我正在編寫一個應用程序,它將更改Crystal Reports報告文件中的數據庫訪問參數。我使用.NET窗體應用程序打開報告並應用SDK功能來更改驅動程序類型(ODBC/OLEDB),服務器名稱,數據庫名稱,用戶,密碼,身份驗證類型等。我遇到問題數據庫名稱。我的代碼會更改表ConnectionInfo的具體屬性(在子報表中),但無法更新報表中的一般SQL查詢。這導致報告仍然訪問舊數據庫。Crystal Reports中的SQL查詢不更新
因此,如果原始報告配置爲訪問database_1,並將其更改爲database_2,則它將將所有表屬性正確更改爲database_2(可在Designer中驗證)。它仍然會在查詢中擁有database_1。數據庫名稱在SDK RowsetController.GetSQLStatement()結果和Crystal Reports Developer查詢視圖(數據庫 - >顯示SQL查詢...)中保持不變。
而且我必須有兩個數據庫(database_1和了Database_2)在線而發生轉換,否則我得到任何GetSQLStatement異常(當database_1處於脫機狀態,原因是其仍然是指它)或SetTableLocation(當了Database_2處於離線狀態 - 儘管這是預期的和可接受的行爲)。如果兩個數據庫都在線,則沒有錯誤。
這正是我使用的是什麼:
1)CrystalDecisions.CrystalReports.Engine.ReportDocument.Load(文件路徑,OpenReportMethod.OpenReportByTempCopy) (...)
2)請並填充CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag
3)遍歷CrystalDecisions.ReportAppServer.DataDefModel.Tables並使用SetTableLocaiton()爲每個屬性應用所有屬性。
4)與每個子報表
5)RowsetController.GetSQLStatement()重複,以查看該報告的SQL查詢。
是否有一些方法來更新基於新表ConnectionInfos(似乎設置正確)的查詢?我甚至沒有看到任何手動更新查詢的可能性(GET,搜索&替換,SET)。
我使用:
.NET 4.5, 的Visual Studio 2012, CR爲VS 13.0.5, Crystal Reports開發9.2.2.693的結果驗證(來源報告也用它創建)
當你說查詢時,你的意思是由Crystal報表創建的SQL,或者你正在使用一個命令,你的問題是如何更新命令?你可以檢查這個產品:http://www.r-tag.com/Pages/CRDataSource.aspx如果它能夠改變連接,你也應該能夠做到這一點。否則,查詢有一些特定的內容。 – Lan
我的意思是由CR創建的主報告的整體SQL查詢。命令很容易更新,同時迭代所有表,應用屬性包並使用SetTableLocation。我已經找到了答案,但仍然感謝產品的鏈接! –