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

在WINDOWS 下,讀取 環境相關參數的錯誤處理

答題得分者是:Zard
ANDY8C
資深會員


發表:114
回覆:582
積分:299
註冊:2006-10-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-18 14:41:50 IP:211.74.xxx.xxx 未訂閱
//  -----------程式片段 --------------------------------- // 讀取 環境相關參數   Function Read_Reg( _readFileName : string ) : string; var   Reg: TRegistry;   CLASSPATH,TEMP,DATA_IN,DATA_REPORT  :  string; begin     // ----- Registry 取出 ----------------------------   Reg := Tregistry.Create;      try     Reg.RootKey := HKEY_CURRENT_USER;     if Reg.OpenKeyReadOnly('environment'  ) then     begin                           //  環境相關參數                para_CLASSPATH :=  Reg.ReadString('CLASSPATH' ) ;          para_TEMP  :=  Reg.ReadString( 'TEMP'  ) ;                 para_DATA_IN      :=  Reg.ReadString('DATA_IN') ;  // 內定資料存放路徑         para_REPORT      :=  Reg.ReadString('REPORT') ;   // 報表存放路徑               end     else       ShowMsg('環境相關參數 尚未建立,請洽管理人員 !! ');      finally     Reg.CloseKey;     Reg.Free;   end;    end;     // = = = = = = = = = = = = =  = = = = = = = = = = = = = // = = = = = = = = = = = = = = = = = = = = = = = = = = = 問題 :         目前在 Register 中,有一機碼  environment(如圖一),  其下有  CLASSPATH,PATH,TEMP,TMP 等的變數, 若程式中,不知 DATA_IN 及 REPORT 等變數尚未建立,如上程式般的讀取, 將導致程式中斷,並顯示(如圖二)的錯誤訊息         1.  如何才能事先得知 DATA_IN 的變數尚未建立,馬上給予空字串或空白字串的初值,而不讓程式中斷.        2.  圖二的錯誤訊息,是否可以告知是那一個變數不存在??    ,由於對 PASCAL 的語法,不是很熟悉,感謝您的回答!!     -------------------------------- 這一網站,真的不錯!! 發表人 - ANDY8C 於 2004/12/18 14:43:22
------
---------------------------------------
偶爾才來 KTOP ,交流條碼問題,在 FB [條碼標籤達人] 社團留言,感恩.
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-18 15:08:25 IP:61.64.xxx.xxx 未訂閱
您確定是這段碼造成的問題嗎?? 我試了一下沒有問題, 況且若DATA_IN 及 REPORT 等變數尚未建立, 讀出來的值頂多為空白, 為何會引發stream error的問題? 您貼上來的碼似乎不是完整的, Read_Reg的參數_readFileName 沒看到出現在Read_Reg()中.    我試的碼如下.    
Function Read_Reg( _readFileName : string ) : string;
var
  Reg: TRegistry;
  CLASSPATH,TEMP,DATA_IN,DATA_REPORT : string;    begin
  // ----- Registry 取出 ----------------------------
  Reg := Tregistry.Create;      try
    Reg.RootKey := HKEY_CURRENT_USER;
    if Reg.OpenKeyReadOnly('environment' ) then
    begin
      // 環境相關參數          CLASSPATH := Reg.ReadString('CLASSPATH' ) ;
      TEMP := Reg.ReadString( 'TEMP' ) ;          DATA_IN := Reg.ReadString('DATA_IN') ; // 內定資料存放路徑
      DATA_REPORT := Reg.ReadString('REPORT') ; // 報表存放路徑
    end
    else
      ShowMessage('環境相關參數 尚未建立,請洽管理人員 !! ');
  finally
    Reg.CloseKey;
    Reg.Free;
  end;
end;    procedure TForm1.Button1Click(Sender: TObject);
begin
  Read_Reg('123');
end;
tonytop
中階會員


發表:6
回覆:114
積分:89
註冊:2003-12-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-18 15:20:06 IP:210.64.xxx.xxx 未訂閱
加判斷Reg.ValueExists
 
function Read_Reg(_readFileName: string): string;
var
  Reg: TRegistry;
  CLASSPATH, TEMP, DATA_IN, DATA_REPORT: string;
begin      // ----- Registry 取出 ----------------------------
  Reg := Tregistry.Create;      try
    Reg.RootKey := HKEY_CURRENT_USER;
    if Reg.OpenKeyReadOnly('environment') then
    begin          // 環境相關參數          para_CLASSPATH := Reg.ReadString('CLASSPATH');
      para_TEMP := Reg.ReadString('TEMP');          //by tonytop add
      if Reg.ValueExists('DATA_IN') then
      begin//該值存在
        para_DATA_IN := Reg.ReadString('DATA_IN'); // 內定資料存放路徑
      end
      begin//該值不存在
        Reg.WriteString('DATA_IN', '預設值');
      end;
      //同上判斷處理
      para_REPORT := Reg.ReadString('REPORT'); // 報表存放路徑        end
    else
      ShowMsg('環境相關參數 尚未建立,請洽管理人員 !! ');      finally
    Reg.CloseKey;
    Reg.Free;
  end;    end;
忙盲茫
tonytop
中階會員


發表:6
回覆:114
積分:89
註冊:2003-12-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-18 15:59:46 IP:210.64.xxx.xxx 未訂閱
SORRY,上面貼的是判斷目錄是否存在,所以重貼啦!
 
function Read_Reg(_readFileName: string): string;
var
  Reg: TRegistry;
  CLASSPATH, TEMP, DATA_IN, DATA_REPORT: string;
begin // ----- Registry 取出 ----
  Reg := Tregistry.Create;
  Reg.RootKey := HKEY_CURRENT_USER;      try
    if Reg.OpenKey('Environment', True) then //☆要寫入預設值不可唯讀
    begin
      // 環境相關參數
      CLASSPATH := Reg.ReadString('CLASSPATH');
      TEMP := Reg.ReadString('TEMP');          //☆by tonytop add
      DATA_IN := Reg.ReadString('DATA_IN'); // 內定資料存放路徑
      if DATA_IN = '' then//該值不存在寫入預設值
      begin
        DATA_IN := '預設值'; 
        Reg.WriteString('DATA_IN', DATA_IN ); //這樣才對
      end;          //同上判斷處理
      DATA_REPORT := Reg.ReadString('REPORT'); // 報表存放路徑        end
    else
      ShowMessage('環境相關參數 尚未建立,請洽管理人員 !! ');      finally
    Reg.CloseKey;
    Reg.Free;
  end;    end;
忙盲茫
系統時間:2024-05-14 23:27:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!