⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 特别方便的工具程序
💻 PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Db, BDE, ShellAPI, DBTables;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Table1: TTable;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}
procedure UpdateFieldLen(Table: TTable; sFieldName: String; iFieldLen : integer);
var
  Props: CURProps;
  hDb: hDBIDb;
  TableDesc: CRTblDesc;
  pFields: pFLDDesc;
  pOp: pCROpType;
  N: Byte;
begin
  Table.Close;
  Table.Exclusive := True; //独占方式打开表
  Table.Open;
  Check(DbiSetProp(hDBIObj(Table.Handle), curxltMODE, Integer(xltNONE)));//检查
  Check(DbiGetCursorProps(Table.Handle, Props));//获取数据表句柄
  if (Props.szTableType <> szPARADOX) and (Props.szTableType <> szDBASE) then
    raise EDatabaseError.Create('只是针对: Paradox');

  pFields := AllocMem(Table.FieldCount * sizeof(FLDDesc));
  pOp := AllocMem(Table.FieldCount * sizeof(CROpType));
  try
    pOp^ := crMODIFY;
    Check(DbiGetFieldDescs(Table.Handle, pFields));
    for N := 1 to Table.FieldCount do
    begin
      if sFieldName = pFields.szName then
      begin
//        pFields.iLen := iFieldLen;
        pFields.iUnits1 := 10;
      end;
      Inc(pFields,1);
    end;
    Dec(pFields, Table.FieldCount);
    FillChar(TableDesc, sizeof(TableDesc), #0);
    Check(DbiGetObjFromObj(hDBIObj(Table.Handle), objDATABASE, hDBIObj(hDb)));

    StrPCopy(TableDesc.szTblName, Table.TableName);
    StrPCopy(TableDesc.szTblType, Props.szTableType);
    TableDesc.iFldCount := Table.FieldCount;
    TableDesc.pecrFldOp := pOp;
    TableDesc.pFldDesc := pFields;
    Table.Close;
    Check(DbiDoRestructure(hDb, 1, @TableDesc, nil, nil, nil, False));
  finally
    if pOp <> nil then FreeMem(pOp);
    if pFields <> nil then FreeMem(pFields);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Table1.TableName := 'MyTable.DB';
  UpdateFieldLen(Table1,'AAAA',18);
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -