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

請問:下面一維陣列保存資料的一段程式,爲什麼出錯?

尚未結案
wnnnnnn6
一般會員


發表:5
回覆:11
積分:3
註冊:2004-11-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-24 17:19:30 IP:61.182.xxx.xxx 未訂閱
我想定義一個一維陣列來保存幾個DBEdit裡面的資料,然後在窗體重新顯示的時候再用一維陣列把儲存的資料指派給那幾個DBEdit,結果我儲存的資料只能在第一個DBEdit中顯示。下面是我的程式,大家幫我看看吧,哪裡出了問題了? var myfile:textfile; myarray:array[1..6]of string; i:integer; begin if opendialog1.Execute then assignfile(myfile,opendialog1.FileName); reset(myfile); i:=0; for i:=1 to 6 do begin read(myfile,myarray[i]); fileseek(handle,0,0); adotable1.Close; adotable1.open; adotable1.Edit; dbedit1.Text:=myarray[1]; dbedit2.Text:=myarray[2]; dbedit3.Text:=myarray[3]; dbedit4.Text:=myarray[4]; dbedit5.Text:=myarray[5]; dbedit6.Text:=myarray[6]; end; closefile(myfile); end;
allenchan
資深會員


發表:10
回覆:306
積分:283
註冊:2004-01-06

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-24 17:35:30 IP:203.70.xxx.xxx 未訂閱
var
  myfile:textfile;
  myarray:array[1..6]of string;
  i:integer;
begin
  if opendialog1.Execute then
  assignfile(myfile,opendialog1.FileName);
  reset(myfile);  
  i:=0;
  for i:=1 to 6 do
  begin
    read(myfile,myarray[ i ]);
    fileseek(handle,0,0);
  end;
  adotable1.Close;
  adotable1.open;
  adotable1.Edit;
  dbedit1.Text:=myarray[1];
  dbedit2.Text:=myarray[2];
  dbedit3.Text:=myarray[3];
  dbedit4.Text:=myarray[4];
  dbedit5.Text:=myarray[5];
  dbedit6.Text:=myarray[6];
  end;
  closefile(myfile);
end;
基本上應該長這樣,再來就是讀檔的部份,你檔案儲存的格式是如何?讀檔案的地方看起來怪怪的 一一a
tonytop
中階會員


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-24 18:04:01 IP:210.64.xxx.xxx 未訂閱
的確要提供妳opendialog1.FileName的檔案格式, 若妳是用一行一行的存法,可改為下列程式:  
  if opendialog1.Execute then
    assignfile(myfile, opendialog1.FileName);
  reset(myfile);
  //i := 0; //這行不需要了
  for i := 1 to 6 do
  begin
    Readln(myfile, myarray[i]);
  end;
  //這段拿到迴圈外run起來較快
  adotable1.Close;
  adotable1.open;
  adotable1.Edit;
  dbedit1.Text := myarray[1];
  dbedit2.Text := myarray[2];
  dbedit3.Text := myarray[3];
  dbedit4.Text := myarray[4];
  dbedit5.Text := myarray[5];
  dbedit6.Text := myarray[6];      closefile(myfile);
 
若妳檔案格式是存在同一行,那要另一種作法了。
wnnnnnn6
一般會員


發表:5
回覆:11
積分:3
註冊:2004-11-24

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-24 18:15:07 IP:61.182.xxx.xxx 未訂閱
不行呀!按照您的方法做,還是那樣的結果。 我“保存”的程式碼是: procedure TForm1.N2Click(Sender: TObject); //保存 var myfile:textfile; myarray:array[1..6] of string; i:integer; begin if savedialog1.Execute then begin assignfile(myfile,savedialog1.FileName); rewrite(myfile); for i:=1 to 6 do begin adotable1.Open; adotable1.Edit; myarray[1]:=dbedit1.Text;//.Field.AsString; myarray[2]:=dbedit2.Text;//.Field.AsString; myarray[3]:=dbedit3.Text;//.Field.AsString; myarray[4]:=dbedit4.Text;//.Field.AsString; myarray[5]:=dbedit5.Text;//.Field.AsString; myarray[6]:=dbedit6.Text;//.Field.AsString; write(myfile,myarray[i]); end; fileseek(handle,0,0); closefile(myfile); end; end;
allenchan
資深會員


發表:10
回覆:306
積分:283
註冊:2004-01-06

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-24 18:27:55 IP:203.70.xxx.xxx 未訂閱
procedure TForm1.N2Click(Sender: TObject); //保存
var
  myfile:textfile;
  myarray:array[1..6] of string;
  i:integer;
begin
  if savedialog1.Execute then
  begin        myarray[1]:=dbedit1.Text;//.Field.AsString;
    myarray[2]:=dbedit2.Text;//.Field.AsString;
    myarray[3]:=dbedit3.Text;//.Field.AsString;
    myarray[4]:=dbedit4.Text;//.Field.AsString;
    myarray[5]:=dbedit5.Text;//.Field.AsString;
    myarray[6]:=dbedit6.Text;//.Field.AsString;        assignfile(myfile,savedialog1.FileName);
    rewrite(myfile);  
    for i:=1 to 6 do
    begin
      writeln(myfile,myarray[i]);
    end;        closefile(myfile);
  end;
end;    
我想改成這樣 tonytop 大大的 code 你就可以用了吧。 看起來你 myarray 保存起來並無他用,還是直接一點:
procedure TForm1.N2Click(Sender: TObject); //保存
var
  myfile:textfile;    begin
  if savedialog1.Execute then
  begin        assignfile(myfile,savedialog1.FileName);
    rewrite(myfile);          writeln(myfile,dbedit1.Text);
    writeln(myfile,dbedit2.Text);
    writeln(myfile,dbedit3.Text);
    writeln(myfile,dbedit4.Text);
    writeln(myfile,dbedit5.Text);
    writeln(myfile,dbedit6.Text);        closefile(myfile);
  end;
end;
發表人 - allenchan 於 2004/11/24 18:32:52
wnnnnnn6
一般會員


發表:5
回覆:11
積分:3
註冊:2004-11-24

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-11-25 14:25:51 IP:61.182.xxx.xxx 未訂閱
謝謝allenchan和tonytop: 依你們的建議,我把程式做了如下的修改,當關閉表ADOTable後,按一下“開啓”按鈕時,結果還是隻能在第一個DBEdit中顯示。不知道程式到底是哪裡出錯了? procedure TForm1.N2Click(Sender: TObject); //保存 var myfile:textfile; myarray:array[1..6] of string; i:integer; begin savedialog1.Filter:='招標檔案(*.erc)|*.erc'; savedialog1.DefaultExt:='erc'; if savedialog1.Execute then begin assignfile(myfile,savedialog1.FileName); rewrite(myfile); adotable1.Open; myarray[1]:=dbedit1.Text; myarray[2]:=dbedit2.Text; myarray[3]:=dbedit3.Text; myarray[4]:=dbedit4.Text; myarray[5]:=dbedit5.Text; myarray[6]:=dbedit6.Text; for i:=1 to 6 do begin write(myfile,myarray[i]); end; { writeln(myfile,dbedit1.Text); writeln(myfile,dbedit2.Text); writeln(myfile,dbedit3.Text); writeln(myfile,dbedit4.Text); writeln(myfile,dbedit5.Text); writeln(myfile,dbedit6.Text); } closefile(myfile); end; end; procedure TForm1.N3Click(Sender: TObject); //打开 var myfile:textfile; myarray:array[1..6]of string; i:integer; begin opendialog1.Filter:='招標檔案(*.erc)|*.erc'; opendialog1.DefaultExt:='erc'; if opendialog1.Execute then begin assignfile(myfile,opendialog1.FileName); reset(myfile); for i:=1 to 6 do begin readln(myfile,myarray[i]); end; fileseek(handle,0,0); adotable1.Close; //adotable1.open; dbedit1.Text:=myarray[1]; dbedit2.Text:=myarray[2]; dbedit3.Text:=myarray[3]; dbedit4.Text:=myarray[4]; dbedit5.Text:=myarray[5]; dbedit6.Text:=myarray[6]; closefile(myfile); end; end;
allenchan
資深會員


發表:10
回覆:306
積分:283
註冊:2004-01-06

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-11-25 15:42:01 IP:61.222.xxx.xxx 未訂閱
procedure TForm1.N2Click(Sender: TObject); //保存
var
  myfile : TStringList;
  
begin
  savedialog1.Filter:='招標檔案(*.erc)|*.erc';
  savedialog1.DefaultExt:='erc';
  if savedialog1.Execute then
  begin
    adotable1.Open;
    myfile := TStringList.Create;
    myfile.Add(dbedit1.Text);
    myfile.Add(dbedit2.Text);
    myfile.Add(dbedit3.Text);
    myfile.Add(dbedit4.Text);
    myfile.Add(dbedit5.Text);
    myfile.Add(dbedit6.Text);
    myfile.SaveToFile(savedialog1.FileName);   
    myfile.Destory;
  end;
end;    procedure TForm1.N3Click(Sender: TObject); //打?
var
  myfile : TStringList;
  myarray:array[1..6]of string;
  i:integer;
begin
  opendialog1.Filter:='招標檔案(*.erc)|*.erc';
  opendialog1.DefaultExt:='erc';
  if opendialog1.Execute then
  begin
    myfile := TStringList.Create;
    myfile.LoadFromFile(opendialog1.FileName);
    for i := 1 to myfile.count do
    begin
      myarray[ i ] := myfile.Strings[ i - 1 ];
    end;
    myfile.Destory;        adotable1.Close;
    //adotable1.open;
    dbedit1.Text := myarray[ 1 ];
    dbedit2.Text := myarray[ 2 ];
    dbedit3.Text := myarray[ 3 ];
    dbedit4.Text := myarray[ 4 ];
    dbedit5.Text := myarray[ 5 ];
    dbedit6.Text := myarray[ 6 ];
  end;    end;
我沒有 Delphi,所以這段碼只用我的小腦袋 compile 過。
wnnnnnn6
一般會員


發表:5
回覆:11
積分:3
註冊:2004-11-24

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-11-26 09:16:11 IP:61.182.xxx.xxx 未訂閱
謝謝allenchan!非常謝謝您! 按照您的方法,我做出結果了。 也感謝tonytop!
系統時間:2024-05-17 11:35:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!