📄 unit1.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 + -