2009-02-13 69 views
1

場景: 我們的安裝包用於添加用戶DSN。由於終端服務器和Citrix的原因,我們對此進行了更改以安裝系統DSN。用戶DSN和系統DSN - 如何選擇系統?

問題是,這些舊用戶DSN中的一些浮動,我們的應用程序會在系統更新之前自動選擇用戶,並且在升級服務器軟件時連接信息發生變化。

我想我的問題是,有沒有辦法強制應用程序通過用戶DSN使用系統DSN如果重複存在?

我們的應用程序是用PowerBuilder 10.5編寫的,我們使用SQL Anywhere 10.0.1。

感謝, 卡爾文

回答

2

請參閱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 

布雷克

0

我懷疑你可以更改順序。

發佈使用不同命名的系統DSN的新版本可能更容易嗎?

+0

那麼,我希望能夠列出可用的系統DSN,這些DSN對應於我們的應用程序,供用戶選擇。所以如果我們有一個生產系統和一個測試系統,他們可以登錄他們選擇的任何一個。 – 2009-02-13 23:24:21

+0

這應該是可能的,但是我認爲他們需要唯一命名(在系統和用戶DSN之間),否則你會遇到你的問題。 – Bravax 2009-02-13 23:43:53

3

關於用戶DSN(s)的信息存儲在註冊表中。你是否考慮過簡單地做幾次註冊表讀取,然後刪除/重命名無效的DSN,或者警告用戶關於衝突並給用戶修復問題的選項?

1

由於您使用的SQL Anywhere中,看看隨之而來的dbdsn實用程序。它將允許您列出,描述,創建和刪除用戶和系統DSN。例如,您可以使用它來查看用戶和系統DSN是否都存在,並刪除您不想要的那個DSN。

相關問題