2011-12-17 27 views
2

我是dbexpress的新手,我無法弄清楚如何在運行時爲SQL主機名設置TSQLConnection參數。當我在客戶端系統上安裝我的程序時,TSQLConnectionHost仍然從開發系統中讀取我的開發系統中的主機。dbExpress TSQLConnection參數問題

+0

我注意到你的名聲你是一個新用戶:我建議你閱讀FAQ(如果你這樣做,你會得到一個徽章!)。選擇答案很有禮貌,而且你選擇答案的頻率越高,人們就越有可能被動機回答你的問題。 – 2011-12-23 12:26:47

回答

2

TSQLConnection.Params類型爲TStrings,這意味着它包含一組String項。在TSQLConnection的情況下,Params持有一組Name=Value對,其中Name是參數名稱,Value是參數值。要閱讀的具體參數,使用值:

var 
    s: String; 
... 
s := SQLConnection1.Params.Values['ParamName']; 

要分配一個值,具體參數,用途:

SQLConnection1.Params.Values['ParamName'] := 'NewValue'; 

(替換「PARAMNAME」與實際參數名稱和「的NewValue」與實際的新值)。

+0

然後,我需要分發dbconnections.ini以及我的可執行文件不是嗎? – Mike 2011-12-18 04:11:46

+2

不一定。您可以簡單地設置應用程序啓動時的特定參數。您可以使用硬編碼值(不推薦)明確指定所需的參數,也可以讓應用程序首次安裝或運行時讓最終用戶提供這些參數值。一些必需的參數值(如主機名)可以自動收集,也可以在安裝時或首次運行時收集。將這些值存儲在註冊表或INI文件中,並在每次運行應用程序時讀取它們並將其分配給適當的參數。 – LightBulb 2011-12-18 04:21:57

0

幾年前我開始用dbExpress開發時遇到了這個問題。在我的開發機器上,數據庫位於X位置,而生產機器的數據庫位於Y位置。我解決這個問題的方式是將數據庫的物理位置存儲在註冊表中(通過我寫的一個小型實用程序)然後使用下面的代碼來加載正確的值。該位置可以存儲在INI文件中,這需要對代碼稍作修改,但該部分並不重要。

procedure TDm.SQLConnection1BeforeConnect(Sender: TObject); 
var 
dir: string; 

begin 
with TRegIniFile.create (regpath) do // this is where I get the physical value 
    begin 
    dir:= ReadString ('firebird', progname, ''); 
    free 
    end; 

with sqlconnection1 do 
    begin 
    close; 
    params.values['database']:= dir; 
    end; 
end; 
0

問題的原因是,在分解應用程序之前,您尚未斷開SQLConnection和所有數據集。 待辦事項 a)確保所有組件都未連接。 b)將SQLConnection的參數設置爲空白。 c)當您啓動應用程序時,從ini文件讀取所需的連接參數,並用這些文件填充SQLConnection。 d)然後連接,你會沒事的! Registers Chris