線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3987
推到 Plurk!
推到 Facebook!

調用exe文件時,怎樣傳參數?

尚未結案
dialog
一般會員


發表:33
回覆:18
積分:10
註冊:2002-09-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-14 13:45:41 IP:218.188.xxx.xxx 未訂閱
如:在一個exe1.exe中有一個AdoConnection,另一個exe2.exe中有一個AdoDataSet,怎樣將exe1.exe中的AdoConnection傳給exe2.exe的AdoDataSet.connection
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-14 14:07:55 IP:211.76.xxx.xxx 未訂閱
一個想法. 傳 ADOConnection 的 connectionstring 會比較理想. 至於傳的時機, 看你的程式流程. 若是由 exe1.exe 呼叫 exe2.exe 起動的話, 可以利用 command line 的 參數來傳遞. 在 exe2.exe 中的 formcreate 來取得再交給對應的 vcl 元件.
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-14 14:12:27 IP:218.16.xxx.xxx 未訂閱
Connection 元件不能在兩個程式中共享,ConnectionString 還可以傳    exe1 執行 exe2 : exe1 : ShellExexute(0,'open','exe2.exe',PChar(ADOConnection.ConnectionString),nil,1);    exe2 : AdoDataSet.ConnectionString := ParamStr[1]; AdoDataSet.Active := true;     哈,出文時未見 timhuang 兄的回文 ,大家所見略同耶 發表人 - Justmade 於 2003/05/14 14:15:59
Rain
資深會員


發表:31
回覆:236
積分:268
註冊:2003-02-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-15 20:14:36 IP:218.5.xxx.xxx 未訂閱
前不久在做一个系统的时候有处理过这个问题,即把主程序的连接字符串传递给一个数据库恢复程序,你可以参考看看: 因为ConnectString字符串长度太长,如果把整个ConnectString做为一个参数是无法正常传递的,好象这个限制比较大, 几十个字节大小的都不可以,所以把整个字符串分成几个参数传递,在你的exe1.exe中调用代码 var xPath: PChar; xPath := PChar(ExtractFilePath(Application.ExeName) 'exe2.exe'); WinExec(PChar(xPath ' ' '密码参数' ' ' '用户名参数' ' ' '数据库名称参数' ' ' '数据库服务器参数'), SW_SHOW); 注:如果是空参数,传递字符串'--',参数与参数之间用空格隔开 exe2.exe取得参数 const X_LinkSQL: string = 'Provider=SQLOLEDB.1;Password=%s;Persist Security Info=True;' 'User ID=%s;Initial Catalog=%s;Data Source=%s'; NullParam = '--'; var sPassword, sUserID, sDBName, sAlias: string; begin if ParamCount > 0 then begin with ADOQX do begin if Active then Close; if ParamStr(1) = NullParam then sPassword := '' else sPassword := ParamStr(1); if ParamStr(2) = NullParam then sUserID := '' else sUserID := ParamStr(2); if ParamStr(3) = NullParam then sDBName := '' else sDBName := ParamStr(3); if ParamStr(4) = NullParam then sAlias := '' else sAlias := ParamStr(4); ConnectionString := Format(X_LinkSQL, [sPassword, sUserID, sDBName, sAlias]); end; end; end;
Rain
資深會員


發表:31
回覆:236
積分:268
註冊:2003-02-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-15 20:26:20 IP:218.5.xxx.xxx 未訂閱
//抱歉,網站的自動轉碼功能好像一直有問題,只得重新貼一遍了 前不久在做一個系統的時候有處理過這個問題,即把主程序的連接字串傳遞給一個資料庫恢復程式,你可以參考看看: 因為ConnectString字串長度太長,如果把整個ConnectString做為一個參數是無法正常傳遞的,好象這個限制比較大, 幾十個位元組大小的都不可以,所以把整個字串分成幾個參數傳遞,在你的exe1.exe中調用代碼 var xPath: PChar; xPath := PChar(ExtractFilePath(Application.ExeName) 'exe2.exe'); WinExec(PChar(xPath ' ' '密碼參數' ' ' '用戶名參數' ' ' '資料庫名稱參數' ' ' '資料庫伺服器參數'), SW_SHOW); 注:如果是空參數,傳遞字串'--',參數與參數之間用空格隔開 exe2.exe取得參數 const X_LinkSQL: string = 'Provider=SQLOLEDB.1;Password=%s;Persist Security Info=True;' 'User ID=%s;Initial Catalog=%s;Data Source=%s'; NullParam = '--'; var sPassword, sUserID, sDBName, sAlias: string; begin if ParamCount > 0 then begin with ADOQX do begin if Active then Close; if ParamStr(1) = NullParam then sPassword := '' else sPassword := ParamStr(1); if ParamStr(2) = NullParam then sUserID := '' else sUserID := ParamStr(2); if ParamStr(3) = NullParam then sDBName := '' else sDBName := ParamStr(3); if ParamStr(4) = NullParam then sAlias := '' else sAlias := ParamStr(4); ConnectionString := Format(X_LinkSQL, [sPassword, sUserID, sDBName, sAlias]); end; end; end;
dialog
一般會員


發表:33
回覆:18
積分:10
註冊:2002-09-07

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-15 21:34:05 IP:218.188.xxx.xxx 未訂閱
我用的是win2000,d6,ShellExecute編譯通不過,說它未定義,幫助裡能看見,windows單元裡沒有. winexec不能傳命令行參數,createprocess參數太多,不會用
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-15 21:50:16 IP:218.16.xxx.xxx 未訂閱
在最上的 uses 加上 ShellAPI 就可以了
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-05-15 21:56:56 IP:218.32.xxx.xxx 未訂閱
1. 要將 TADOConnection 當參數傳遞, 如果是 EXE <-> DLL, 運用 ShareMemory 有可能達到, 不過粉複雜.    2. 要用 ShellExecute , 需 use ShellAPI 如
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ShellAPI;
系統時間:2024-05-02 10:28:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!