SQL客户端软件的设定问题 |
答題得分者是:malanlk
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
|
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
|
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
try
if not sqlsetupform.CheckSetupDataOk then
begin
sqlsetupform.ShowModal;
bConnectOk := sqlsetupform.ConnectionTestOk;
end
else
begin
bconnectok:=true;
end;
finally
加了一句后那个 Value assigned to 'bConnectOk' never used错误没了。
其它的ONCREAT要用到数据库的操作都搬到ONSHOW中去了。现在最大的问题就在于数据库测试联接上
现在是怎么测都连不成功,我现在用最简单的办法也连不成,
begin
with datamoduleform.ADOConnection1 do
begin
ConnectionString:='Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=mzsfwlb;Data Source=ntsj1';
if connected then
showmessage('1');
if not connected then
showmessage('2');
我在DATAMODULE中直接在设计时连接是能成功的,我就是把连成功后的代码复
制下来的,(如上)
用您给我的procedure Tsqlsetupform.ConnectTestBtnClick(Sender: TObject);
测试代码也是怎么连都连不成功。
------
我的编程起步于ktop,我将永远支持ktop |
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
ntjrr 兄......... ADOConnection1 的 Connected 只是ㄧ個值, 必須要對值做設定才會進行連接. 也就是你必須 下ㄧ行指令
try
ADOConnection1.Connected := True;
except
end;
ADOConnection1 才會開始連線..... 當ADOConnection1 連線成功 Connected 就會維持 True 若失敗(就會有錯誤提示, 所以我用except 把它藏起來)就會變回 False... 這樣說你了解了嗎....? 你在 17 格的程式碼就是對的....
|
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
测试连接的代码被我试来试去勉强成功了,但我知道这里面还有错误,第一就是try finally的搭配问题,第二就是ELSE的问题,估计层次上不是太清晰的,烦前辈再给我理一理。还有就是写入注册表的代码被加入了引号,不知道会不会影响到取值的准确性?例如我写的是ntsj1取出的值就是'ntsj1'有时候还是''ntsj1''(现在填好后下次启动时还会提示要填的,估计另一处的代码还有一点问题,先不谈那,先把这一段搞定,呵呵)
var reg: TRegistry; begin with datamoduleform.ADOConnection1 do begin ConnectionString:='Provider=SQLOLEDB.1;Persist Security Info=False;User ID=' EditLoginName.Text ';Initial Catalog=mzsfwlb;Data Source=' EditHost.Text ; try connected:=true; if connected=true then begin ShowMessage('Connection Success!'); FConnectionTestOk := True; reg := TRegistry.Create; try reg.RootKey := HKEY_CURRENT_USER; if Reg.OpenKey('\Software\Cyberhood',True) then begin reg.WriteString('LoginName','''' EditLoginName.Text ''''); reg.WriteString('Host','''' EditHost.Text ''''); reg.CloseKey; end; finally reg.Free; end; end else Application.MessageBox('测试连接失败,请重新测试或选用其他的服务器','信息提示',MB_OK MB_ICONINFORMATION) finally end; end; end;
------
我的编程起步于ktop,我将永远支持ktop |
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
var reg: TRegistry; begin FConnectionTestOk := False; with datamoduleform.ADOConnection1 do begin ConnectionString:='Provider=SQLOLEDB.1;Persist Security Info=False;User ID=' EditLoginName.Text ';Initial Catalog=mzsfwlb;Data Source=' EditHost.Text ; try connected:=true; if connected=true then begin ShowMessage('Connection Success!'); FConnectionTestOk := True; reg := TRegistry.Create; try reg.RootKey := HKEY_CURRENT_USER; if Reg.OpenKey('\Software\Cyberhood',True) then begin reg.WriteString('LoginName',EditLoginName.Text); reg.WriteString('Host',EditHost.Text); reg.CloseKey; end; finally reg.Free; end; end else Application.MessageBox('測試連接失敗,請重新測試或選用其他的伺服器','資訊提示',MB_OK MB_ICONINFORMATION) finally end; end; if FConnectionTestOk then Self.Close; // 關閉 SetupForm end; |
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
以上代码在填入正确的参数后运行基本正常了,在填入错误的参数后,比如服务器名故意填错后,发现执行的流程有错误,流程如下:
try
connected:=true;
如填错的,它就会跳到
bConnectOk := sqlsetupform.ConnectionTestOk;
然后跳回到dqlsetupform中,执行end;这个end是紧靠第二个finally下面的end;
然后会执行 Self.Close;
上面的错误之处在于:1。 Application.MessageBox('測試連接失敗,請重新測試或選用其他的伺服器','資訊提示',MB_OK MB_ICONINFORMATION)这一行代码不会执行到。2。Self.Close不管连接成功不成功都会执行到的。
------
我的编程起步于ktop,我将永远支持ktop |
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
FConnectionTestOk := False; //這行有加嗎? with datamoduleform.ADOConnection1 do begin ConnectionString:='Provider=SQLOLEDB.1;Persist Security Info=False;User ID=' EditLoginName.Text ';Initial Catalog=mzsfwlb;Data Source=' EditHost.Text ; try // connected:=true; //這行改成下列 try Open; except Application.MessageBox('測試連接失敗,請重新測試或選用其他的伺服器','資訊提示',MB_OK MB_ICONINFORMATION); end; if connected=true then begin ShowMessage('Connection Success!'); FConnectionTestOk := True; reg := TRegistry.Create; .... .... end; // else // 這兩行拿掉 // Application.MessageBox('測試連接失敗,請重新測試或選用其他的伺服器','資訊提示',MB_OK MB_ICONINFORMATION); |
ntjrr
高階會員 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |