回复人: ahlian(阿连) (2001-12-19 16:26:22)  得0分 
procedure TForm1.Button1Click(Sender: TObject);
var
  a:array of string; //定义变长
  b:array of real;
  i:integer;
begin
  table1.Open;
  table1.first;
  if table1.recordcount>0 then
    for i:=0 to table1.recordcount-1 do
      begin
        a[i]:=table1.fieldbyname('kmdm').asstring;
        b[i]:=strtofloat(table1.fieldbyname('kmdm').asstring);
        table1.Next;
        i:=i+1;
      end;
end;  
****************也不行**************************
******************出错信息如下***********************
Project project1.exe raised exception class EAccessViolation with
message 'access violation at address 00403b10 in module
'project1.exe'. Read of address FFFFFFFF'. process stopped. Use
step or Run to continue.
******************end*******************************

解决方案 »

  1.   

    我直接用DBDEMOS下的Master表, Table1的databasename:=DBDEMOS; Table1的tablename
    :=master ; field1 为co_name; field2 为cur_pric.
      

  2.   

    Azz1()  
    setlength(a,5);
    setlength(b,5);   是什么意思? 有什么作用?
      

  3.   

    改为动态数组就没问题了,而且好用!
    看:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      a:array of string;
      b:array of real;
      i:integer;
    begin
      table1.Open;
      table1.first;
      
      setlength(a,0);
      setlength(b,0);  while not table1.Eof do
      begin
            setlength(a,length(a)+1);
            setlength(b,length(b)+1);        a[high(a)]:=table1.fieldbyname('kmdm').asstring;
            a[high(b)]:=strtofload(table1.fieldbyname('kmdm').asstring);        table1.Next;
      end;end;
      

  4.   

    单步执行一下,看看循环多少次,或者执行到那一句出错。看代码应该没有什么问题的。要么可以这样试试:var
      v : variant;
    begin
      .....
      v := recordset.fieldvalue('kmdm');
      a[i] := v;
      .....
    end;
      
      

  5.   

    改为动态数组就没问题了,而且好用!
    看:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      a:array of string;
      b:array of real;
      i:integer;
    begin
      table1.Open;
      table1.first;
      
      setlength(a,0);
      setlength(b,0);  while not table1.Eof do
      begin
            setlength(a,length(a)+1);
            setlength(b,length(b)+1);        a[high(a)]:=table1.fieldbyname('kmdm').asstring;
            a[high(b)]:=strtofload(table1.fieldbyname('kmdm').asstring);        table1.Next;
      end;end;
      

  6.   

    各位请用
         DBDEMOS下的Master表, Table1的databasename:=DBDEMOS; Table1的tablename
         :=master ; field1 为co_name; field2 为cur_pric. 
    试一下, 真行了再把代码写出来好吗?  
    对了一定给分,并受本人三拜!
      

  7.   

    : nne998(上上下下左右左右BABA) 
       对了, 为什么执行到a[high(b)]:=strtofload(table1.fieldbyname'kmdm').asstring);
    时提示: [Error] Unit1.pas(46): Incompatible types: 'String' and 'Extended'        
      

  8.   

    那是你的变量类型不对,
    我一般都是这样用的:浮点用 Extended,这样把程序改为:procedure TForm1.Button1Click(Sender: TObject);
    var
      a:array of string;
      b:array of Extended;   // <----begin
      table1.Open;
      table1.first;
      
      setlength(a,0);
      setlength(b,0);  while not table1.Eof do
      begin
            setlength(a,length(a)+1);
            setlength(b,length(b)+1);        a[high(a)]:=table1.fieldbyname('kmdm').asstring;
            a[high(b)]:=table1.fieldbyname('kmdm').asfloat;    //  <-----
     
            table1.Next;
      end;end;
      

  9.   

    更正:procedure TForm1.Button1Click(Sender: TObject);
    var
      a:array of string;
      b:array of Extended;  // <----begin
      table1.Open;
      table1.first;
      
      setlength(a,0);
      setlength(b,0);  while not table1.Eof do
      begin
            setlength(a,length(a)+1);
            setlength(b,length(b)+1);        a[high(a)]:=table1.fieldbyname('kmdm').asstring;
            b[high(b)]:=table1.fieldbyname('kmdm').asfloat;    //  <-----  //是b        table1.Next;
      end;end; 
      

  10.   

    nne998(上上下下左右左右BABA) 
      你可真行, 好像可以了, 我再试一下。
      

  11.   

    对了, 是可以, 
    但是如果我想把a[i]的值赋给如edit1.text等, 我如何去确定 i 呢? 也就是说假如我知道了数组a中每第 i 个的值, 然后再把数组b中每第 i 个的值
    赋给edit1, 如何?
      

  12.   

    tongki_8():你说清楚一点,不大明白你的意思
      

  13.   

    什么??是不是这样??var
    i:integer
    a,b ...........begin
        .......   for i:=low(a) to high(a) do
       begin
              if a[i]='abc' then
              begin
                   edit1.text:=floattostr(b[i]);
                   break;
              end;
       end;
      

  14.   

    nne998(上上下下左右左右BABA):    对对对,不过你的代码行吗??
      

  15.   

    如果你要在不同的过程中访问 a,b, 那a,b一定要定义为
    窗体的成员变量或者全局变量。