看一下代码有什么问题.(查询结果出来以后,dbgrideh不是按照YSFGPL这个表的宽度和标题进行排列)
with unit2.Data.adoymsx do
   begin
    close;
    sql.Clear;
    sql.Add('select id as 序号,name as 项目名称,kjf as 可见否,width as 宽度 from YSFGPL');
    open;
    unit2.Data.adoymsx.First;
    i:=0;
    while not unit2.Data.adoymsx.Eof do
      begin
           i:=i;
          edit1.text:=unit2.Data.adoymsx.FieldByName('可见否').Asstring;
          kd:=unit2.Data.adoymsx.fieldbyname('宽度').AsInteger;
          name:=unit2.Data.adoymsx.fieldbyname('项目名称').AsString;          if edit1.text='False' then
           begin
           DBGridEh1.Columns[i].Title.Caption:=name;
           DBGRIDEH1.Columns[i].Width:=0;
           DBGRIDEH1.Columns[i].Visible:=false;           end;
          if edit1.text='True'  then
           begin
            DBGridEh1.Columns[i].Title.Caption:=name;
            DBGRIDEH1.Columns[i].Width:=kd;
            end;
          i:=i+1;
          unit2.Data.adoymsx.Next;
      end;
   end;