場景: 我們的安裝包用於添加用戶DSN。由於終端服務器和Citrix的原因,我們對此進行了更改以安裝系統DSN。用戶DSN和系統DSN - 如何選擇系統?
問題是,這些舊用戶DSN中的一些浮動,我們的應用程序會在系統更新之前自動選擇用戶,並且在升級服務器軟件時連接信息發生變化。
我想我的問題是,有沒有辦法強制應用程序通過用戶DSN使用系統DSN如果重複存在?
我們的應用程序是用PowerBuilder 10.5編寫的,我們使用SQL Anywhere 10.0.1。
感謝, 卡爾文
場景: 我們的安裝包用於添加用戶DSN。由於終端服務器和Citrix的原因,我們對此進行了更改以安裝系統DSN。用戶DSN和系統DSN - 如何選擇系統?
問題是,這些舊用戶DSN中的一些浮動,我們的應用程序會在系統更新之前自動選擇用戶,並且在升級服務器軟件時連接信息發生變化。
我想我的問題是,有沒有辦法強制應用程序通過用戶DSN使用系統DSN如果重複存在?
我們的應用程序是用PowerBuilder 10.5編寫的,我們使用SQL Anywhere 10.0.1。
感謝, 卡爾文
請參閱PowerBuilder幫助中的RegistryValues()。以下是不是你想要什麼,但它確實表明了幾個工作電話...
integer li_RC
string ls_odbc_ini[]
li_RC = RegistryValues (&
"HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources", &
ls_odbc_ini)
IF li_RC <> 1 THEN
MessageBox ('Error', &
'RegistryValues failed in website.open')
RETURN
END IF
MessageBox ('A user DSN...', ls_odbc_ini[1])
li_RC = RegistryValues (&
"HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\ODBC Data Sources", &
ls_odbc_ini)
IF li_RC <> 1 THEN
MessageBox ('Error', &
'RegistryValues failed in website.open')
RETURN
END IF
MessageBox ('A system DSN...', ls_odbc_ini[1])
另一個建議是閱讀任何你想要的DSN的連接信息,然後使用「dsn的「連接,以避免」選錯DSN「。
SQLCA.DBMS = 'ODB'
SQLCA.DBParm &
= "ConnectString='Driver=SQL Anywhere 10;" &
+ "UID=dba;PWD=sql;DatabaseName=ruralfinds_local;EngineName=ruralfinds_local'," &
+ "ConnectOption='SQL_DRIVER_CONNECT,SQL_DRIVER_NOPROMPT'"
CONNECT USING SQLCA;
IF SQLCA.SQLCODE <> 0 THEN
MessageBox ('Error', &
'CONNECT failed in open:' &
+ '~r~nSQLCode = ' &
+ String (SQLCA.SQLCode) &
+ '~r~nSQLDBCode = ' &
+ String (SQLCA.SQLDBCode) &
+ '~r~n' &
+ SQLCA.SQLErrText)
RETURN
END IF
布雷克
我懷疑你可以更改順序。
發佈使用不同命名的系統DSN的新版本可能更容易嗎?
關於用戶DSN(s)的信息存儲在註冊表中。你是否考慮過簡單地做幾次註冊表讀取,然後刪除/重命名無效的DSN,或者警告用戶關於衝突並給用戶修復問題的選項?
由於您使用的SQL Anywhere中,看看隨之而來的dbdsn實用程序。它將允許您列出,描述,創建和刪除用戶和系統DSN。例如,您可以使用它來查看用戶和系統DSN是否都存在,並刪除您不想要的那個DSN。
那麼,我希望能夠列出可用的系統DSN,這些DSN對應於我們的應用程序,供用戶選擇。所以如果我們有一個生產系統和一個測試系統,他們可以登錄他們選擇的任何一個。 – 2009-02-13 23:24:21
這應該是可能的,但是我認爲他們需要唯一命名(在系統和用戶DSN之間),否則你會遇到你的問題。 – Bravax 2009-02-13 23:43:53