全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2363
推到 Plurk!
推到 Facebook!

請問delphi連結資料庫的問題?

答題得分者是:Mickey
funging
一般會員


發表:13
回覆:41
積分:10
註冊:2002-10-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-12-05 23:33:37 IP:139.175.xxx.xxx 未訂閱
大家好,我想寫個程式,連結至遠端的資料庫,但是總會出現以下問題: Project Project1.exe raised exception class EDBEngineError with message 'Name not unique in this context.' Process stopped.Use Step or Run to continue. 嗯!找好久,還是不曉得問題出在哪?也不曉得它是指什麼問題耶?請各位高手,幫忙解答一下!感激不盡!有點趕!謝謝!^^ 原始程式如下: ----------------------- unit Import_source; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, DBTables, StdCtrls, ExtCtrls, Buttons, ComCtrls; type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; stbrDbSetMain: TStatusBar; bitnExit: TBitBtn; rgImportType: TRadioGroup; edHostName: TEdit; edServerName: TEdit; edDatabaseName: TEdit; bitnLink: TBitBtn; edDbType: TEdit; tb_ImportSource: TTable; Database1: TDatabase; procedure bitnExitClick(Sender: TObject); procedure bitnLinkClick(Sender: TObject); procedure edHostNameChange(Sender: TObject); procedure rgImportTypeClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; LinkAlias:string; implementation {$R *.dfm} procedure TForm1.bitnExitClick(Sender: TObject); begin close; end; procedure TForm1.bitnLinkClick(Sender: TObject); var LinkParam :TStringList; tnRoot :TTreeNode; SourceTableList :TStringList; tableName :string; tb_ImportSource :Ttable; i :byte; begin LinkParam:=TStringList.Create; tb_ImportSource:=Ttable.create(self); SourceTableList:= TStringList.Create; try with LinkParam do begin Add('Type=' edDbType.text); if rgImportType.ItemIndex=0 then Add('HOST NAME=' edHostName.text); Add('SERVER NAME=' edServerName.text); Add('DATABASE NAME=' edDatabaseName.text); Add('LANGDRIVER=taiwan'); end; LinkAlias:=edDatabaseName.text; Session.AddAlias(LinkAlias, edDbType.text, LinkParam); //? ShowMessage('成功連線' edServerName.text '資料庫伺服器'); except ShowMessage('無法連結 ' edServerName.text ' 資料庫伺服器'); end; end; procedure TForm1.edHostNameChange(Sender: TObject); begin edServerName.text:=edHostName.text; end; procedure TForm1.rgImportTypeClick(Sender: TObject); begin if rgImportType.ItemIndex=0 then begin edHostName.Clear; edHostName.Enabled:=true; edHostName.Color:=clWhite; edServerName.Clear; edServerName.Ctl3D:=false; edServerName.Color:=clInfoBk; edServerName.ReadOnly:=true; end else begin edHostName.Clear; edHostName.Enabled:=false; edHostName.Color:=clActiveBorder; edServerName.Clear; edServerName.Ctl3D:=true; edServerName.Color:=clWhite; edServerName.ReadOnly:=false; end; end; end.
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-12-06 07:44:09 IP:202.39.xxx.xxx 未訂閱
參考: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=21064    -- Everything I say is a lie.
funging
一般會員


發表:13
回覆:41
積分:10
註冊:2002-10-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-12-07 21:17:49 IP:139.175.xxx.xxx 未訂閱
嗯!問題還沒解決,不曉得意思是不是說,我測的東西,跟我odbc所設的有衡突呢?舉例來說:我odbc設的mysqlodbc,主機名跟我所測的是一樣的ip或是相同的database name,就會出現'name not unique in the context'嗎??
funging
一般會員


發表:13
回覆:41
積分:10
註冊:2002-10-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-12-07 21:31:30 IP:139.175.xxx.xxx 未訂閱
同一個程式的相關問題,當我輸入dababase name:test時,會出現以下錯誤訊息,不曉得為何會如此??請各位高手解答一下!謝謝! Project Import.exe raised exception class EDBEngineError with message 'Invalid configuration parameter. Alias:Test'.Process stopeed.Use Step or Run to continue.
ko
資深會員


發表:28
回覆:785
積分:444
註冊:2002-08-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-12-09 13:18:19 IP:61.221.xxx.xxx 未訂閱
引言: 同一個程式的相關問題,當我輸入dababase name:test時,會出現以下錯誤訊息,不曉得為何會如此??請各位高手解答一下!謝謝! Project Import.exe raised exception class EDBEngineError with message 'Invalid configuration parameter. Alias:Test'.Process stopeed.Use Step or Run to continue.
因為你用的是TTable所以必須用Database來連odbc 所以Database的AliasName要先指定是哪個 在指定Database的名子(DatabaseName) 然後TTable再來指定DatabaseName=Database.DatabaseName
------
======================
昏睡~
不昏睡~
不由昏睡~
funging
一般會員


發表:13
回覆:41
積分:10
註冊:2002-10-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-12-10 22:49:45 IP:139.175.xxx.xxx 未訂閱
引言: -------------------------------------------------------------------------------- 同一個程式的相關問題,當我輸入dababase name:test時,會出現以下錯誤訊息,不曉得為何會如此??請各位高手解答一下!謝謝! Project Import.exe raised exception class EDBEngineError with message 'Invalid configuration parameter. Alias:Test'.Process stopeed.Use Step or Run to continue. -------------------------------------------------------------------------------- 因為你用的是TTable所以必須用Database來連odbc 所以Database的AliasName要先指定是哪個 在指定Database的名子(DatabaseName) 然後TTable再來指定DatabaseName=Database.DatabaseName ------------------------------------------------------ -->基本上以上的動作都做了!還是會出現相同的錯誤!><
ko
資深會員


發表:28
回覆:785
積分:444
註冊:2002-08-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-12-12 01:41:14 IP:61.64.xxx.xxx 未訂閱
是不是還不行呢?  
引言: 在指定Database的名子(DatabaseName) 然後TTable再來指定DatabaseName=Database.DatabaseName
基本上Database的AliasName是你在odbc上有驅動的mysql的databasename 而Database的DatabaseName是隨你高興的,但是所有在程式裡的DB元件的 DatabaseName都要FOLLOW,你高興取的名子
------
======================
昏睡~
不昏睡~
不由昏睡~
funging
一般會員


發表:13
回覆:41
積分:10
註冊:2002-10-28

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-12-12 01:55:10 IP:139.175.xxx.xxx 未訂閱
引言: 是不是還不行呢? 引言: -------------------------------------------------------------------------------- 在指定Database的名子(DatabaseName) 然後TTable再來指定DatabaseName=Database.DatabaseName -------------------------------------------------------------------------------- 基本上Database的AliasName是你在odbc上有驅動的mysql的databasename 而Database的DatabaseName是隨你高興的,但是所有在程式裡的DB元件的 DatabaseName都要FOLLOW,你高興取的名子
嗯!我發現只要我本機有的資料庫(我本機也有設一個一樣的系統資料庫,資料庫都跟遠端的資料庫一樣,不曉得是不是這樣??
Mickey
版主


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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-12-12 10:16:09 IP:163.29.xxx.xxx 未訂閱
funging: 雖然這篇與你的問題無關, 但你的程式有 Memory Leakage 問題. local var TStringList,TTable create 後均未 free. TTable 有 owner (self) 還好可以由 owner 控管 ( when owner free ) 但 TStringList ? 強烈建議養成 deallocate 的習慣, 因為這種 Bug 日後很難 debug.
Mickey
版主


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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-12-12 12:45:07 IP:61.219.xxx.xxx 未訂閱
//Modified your source code procedure TForm1.bitnLinkClick(Sender: TObject); var LinkParam :TStringList; session : Tsession; //tnRoot :TTreeNode; // unused //SourceTableList :TStringList; //tableName :string; //tb_ImportSource :Ttable; i :byte; begin LinkParam:=TStringList.Create; // tb_ImportSource:=Ttable.create(self); // SourceTableList:= TStringList.Create; try try with LinkParam do begin Add('Type=' edDbType.text); if rgImportType.ItemIndex=0 then Add('HOST NAME=' edHostName.text); Add('SERVER NAME=' edServerName.text); Add('DATABASE NAME=' edDatabaseName.text); Add('LANGDRIVER=taiwan'); end; LinkAlias:=edDatabaseName.text; // Where is session ? with TSession.create(self) do begin try AddAlias(LinkAlias, edDbType.text, LinkParam); //? Active := True; ShowMessage('成功連線' edServerName.text '資料庫伺服器'); finally Free; end; except ShowMessage('無法連結 ' edServerName.text ' 資料庫伺服器'); end; finally if LinkParam <> nil then LinkParam.Free; end; end;
funging
一般會員


發表:13
回覆:41
積分:10
註冊:2002-10-28

發送簡訊給我
#11 引用回覆 回覆 發表時間:2002-12-13 00:08:33 IP:139.175.xxx.xxx 未訂閱
不好意思,冒味問一個小問題,try except可以跟finally一起使用嗎?,我查了delphi的help檔發現沒有此方法!?還是可以使用,只是他沒有說明?? 因為我在測試Micky您的程式時,有finally的問題,後來不曉得改的對不對,變成'Session name missing',想說Session不是delphi所提供的指令嗎?為何會出現這個問題?? 不好意思修改了Micky您的程式:謝謝您的建議,我下次寫程式一定會記得的!謝謝您! procedure TForm1.bitnLinkClick(Sender: TObject); var LinkParam :TStringList; session : Tsession; //tnRoot :TTreeNode; // unused //SourceTableList :TStringList; //tableName :string; //tb_ImportSource :Ttable; i :byte; begin LinkParam:=TStringList.Create; // tb_ImportSource:=Ttable.create(self); // SourceTableList:= TStringList.Create; try//try1; with LinkParam do begin Add('Type=' edDbType.text); if rgImportType.ItemIndex=0 then begin Add('HOST NAME=' edHostName.text); Add('SERVER NAME=' edServerName.text); Add('DATABASE NAME=' edDatabaseName.text); Add('LANGDRIVER=taiwan'); end; end; LinkAlias:=edDatabaseName.text; // Where is session ? with TSession.create(self) do begin try begin AddAlias(LinkAlias, edDbType.text, LinkParam); //? Active := True; ShowMessage('成功連線' edServerName.text '資料庫伺服器'); end; except ShowMessage('無法連結 ' edServerName.text ' 資料庫伺服器'); //finally Session.Free;//原為free; end; end; except ShowMessage('無法連結 ' edServerName.text ' 資料庫伺服器'); //end; end; if LinkParam <> nil then LinkParam.Free; end;
Mickey
版主


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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2002-12-18 12:51:47 IP:61.219.xxx.xxx 未訂閱
try...except...end, 是正常執行 try 到 except 段程式, exception 發生時 則 jump to except 到 end. try...finally...end, 是無論如何一定會執行 finally 到 end 程式 (即使 try 到 finally 發生 exception 或 下'Exit;'), 所以相當適合 run time create and free. 不可使用 try...except...finally...end,因為那是截然不同的程式流程控制. 大致上看了你的程式, "session : Tsession" local 變數可以不用宣告(因為沒用到). with Tsession.create(self) do begin...end 已經在 'self'(TForm1) created 了一個 Tsession 的 instance. 另 with xxx do begin...end 雖然好用,但對一初學者而言,常常造成混淆, 等熟練以後再用吧 ! 點到為止,修行在個人,Coding樂趣在其中,共勉之. /* 使用中文很辛苦,中華男兒當自強 */
系統時間:2024-06-29 15:37:52
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!