請問delphi連結資料庫的問題? |
答題得分者是:Mickey
|
funging
一般會員 發表:13 回覆:41 積分:10 註冊:2002-10-28 發送簡訊給我 |
大家好,我想寫個程式,連結至遠端的資料庫,但是總會出現以下問題:
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 發送簡訊給我 |
|
funging
一般會員 發表:13 回覆:41 積分:10 註冊:2002-10-28 發送簡訊給我 |
|
funging
一般會員 發表:13 回覆:41 積分:10 註冊:2002-10-28 發送簡訊給我 |
|
ko
資深會員 發表:28 回覆:785 積分:444 註冊:2002-08-14 發送簡訊給我 |
引言: 同一個程式的相關問題,當我輸入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 發送簡訊給我 |
引言:
--------------------------------------------------------------------------------
同一個程式的相關問題,當我輸入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 發送簡訊給我 |
是不是還不行呢?
引言: 在指定Database的名子(DatabaseName) 然後TTable再來指定DatabaseName=Database.DatabaseName基本上Database的AliasName是你在odbc上有驅動的mysql的databasename 而Database的DatabaseName是隨你高興的,但是所有在程式裡的DB元件的 DatabaseName都要FOLLOW,你高興取的名子
------
====================== 昏睡~ 不昏睡~ 不由昏睡~ |
funging
一般會員 發表:13 回覆:41 積分:10 註冊:2002-10-28 發送簡訊給我 |
引言: 是不是還不行呢? 引言: -------------------------------------------------------------------------------- 在指定Database的名子(DatabaseName) 然後TTable再來指定DatabaseName=Database.DatabaseName -------------------------------------------------------------------------------- 基本上Database的AliasName是你在odbc上有驅動的mysql的databasename 而Database的DatabaseName是隨你高興的,但是所有在程式裡的DB元件的 DatabaseName都要FOLLOW,你高興取的名子嗯!我發現只要我本機有的資料庫(我本機也有設一個一樣的系統資料庫,資料庫都跟遠端的資料庫一樣,不曉得是不是這樣?? |
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
//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 發送簡訊給我 |
不好意思,冒味問一個小問題,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 發送簡訊給我 |
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樂趣在其中,共勉之. /* 使用中文很辛苦,中華男兒當自強 */
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |