今天遇到一个怪问题,在Delphi中,运行如下程序,正常
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids, DBClient, DB; type TForm1 = class(TForm) dbgrd1: TDBGrid; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var TitleNames:array of String; I:integer; DStTemp: TClientDataSet; fldsTemp:array of TStringField; dsTemp:TDataSource; begin Setlength(TitleNames,2); // 长度为31 TitleNames[0] := '1234567890123456789012345678901'; TitleNames[1] := '这是一个测试标题宽度的实验程序'; DStTemp := TClientDataSet.Create(dbgrd1); SetLength(fldsTemp,2); for I:=0 to 1 do begin fldsTemp[I]:=TStringField.Create(dbgrd1); dbgrd1.FindComponent('Field'+IntToStr(I)).Free; fldsTemp[I].Name:='Field'+IntToStr(I); fldsTemp[I].Name:='Field'+IntToStr(I); fldsTemp[I].FieldName:=TitleNames[I]; fldsTemp[I].Size:=10; fldsTemp[I].Index:=I; fldsTemp[I].DataSet:=DStTemp; end; DStTemp.CreateDataSet; { 对DataSet赋值 } dsTemp := TDataSource.Create(dbgrd1); dsTemp.DataSet := DStTemp; dbgrd1.DataSource := dsTemp; end; end.
但是,当TitleNames[0]='12345678901234567890123456789012',也就是说长度大于31的时候,就会发生错误,不知道为什么??