可以这样,不过如果是用表格控件(比如DBGrid),则不能这样做;改用计算字段吧,但计算字段不能編輯procedure TForm1.ADOQuery1AfterOpen(DataSet: TDataSet); var F:TField; begin F:=DataSet.FieldByName('字段名'); TFloatField(F).DisplayFormat:=FloatToStr(F.AsFloat*100); TFloatField(F).EditFormat:='#.#'; end;
新建工程、双击窗体,用下列代码覆盖你的unit1: unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, StdCtrls, Mask, DBCtrls, Grids, DBGrids, ADODB, DBClient, Provider;type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } procedure CDSetCalcFields(DataSet: TDataSet); procedure DBEditExit(Sender: TObject); procedure DBEditEnter(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure DBEditKeyPress(Sender: TObject; var Key: Char); public { Public declarations } end;var Form1: TForm1;implementationuses ComObj; var DSProvider:TDataSetProvider; CDSet: TClientDataSet; DSource:TDataSource; DBGrid: TDBGrid; DBEdit: TDBEdit; ADOQry: TADOQuery; {$R *.dfm}procedure TForm1.FormCreate(Sender: TObject); const ConnectionStr:string='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;' +'Data Source=.\db2.mdb;Mode=Share Deny None;Extended Properties="";' +'Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database ' +'Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet ' +'OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;' +'Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;' +'Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don'+#39+'t Copy Locale on Compact=False;' +'Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False';//连接串 var AccessDB:OleVariant; tmpField:TField; i:integer; begin //窗体设置: Height:=360; Width:=480; Caption:='让数据增大100倍在DBEdit显示'; Position:=poScreenCenter; OnCloseQuery:=FormCloseQuery; //表格设置: DBGrid:=TDBGrid.Create(self); try DBGrid.Parent:=Form1; DBGrid.Align:=alTop; DBGrid.Height:=260; except FreeAndNil(DBGrid); close; exit; end; //输入框设置: DBEdit:=TDBEdit.Create(self); try DBEdit.Parent:=Form1; DBEdit.Left:=168; DBEdit.Top:=280; DBEdit.OnEnter:=DBEditEnter; DBEdit.OnExit:=DBEditExit; DBEdit.OnKeyPress:=DBEditKeyPress; except FreeAndNil(DBEdit); close; exit; end; //数据集设置: ADOQry:=TADOQuery.Create(self); if not FileExists('.\db2.mdb')then begin //如果文件db2.mdb不在当前位置 //建立库文件: try AccessDB:=CreateOleObject('ADOX.Catalog'); AccessDB.Create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\db2.mdb'); finally AccessDB:=VarNull; end; //建立表Tab1 try with ADOQry do begin ConnectionString:=ConnectionStr; SQL.Text:='Create Table Tab1(ID Counter,项目 string,数据 numeric(10,3))'; ExecSQL; for i:=1 to 10 do begin ADOQry.Close; SQL.Text:='INSERT INTO Tab1 (项目,数据) VALUES ('+QuotedStr('第'+IntToStr(i)+'笔')+','+FloatToStr(i*1.5)+')'; ExecSQL; end; end; except FreeAndNil(ADOQry); close; exit; end; end; try with ADOQry do begin Close; ConnectionString:=ConnectionStr;//连接db2.mdb SQL.Text:='select * from Tab1';//打开表Tab1 Open; end; except FreeAndNil(ADOQry); close; exit; end; DSProvider:=TDataSetProvider.Create(self); DSProvider.Name:='DSProvider'; DSProvider.DataSet:=ADOQry; CDSet:=TClientDataSet.Create(self); CDSet.ProviderName:='DSProvider'; //固定字段: tmpField:=TAutoIncField.Create(CDSet); tmpField.FieldName:='ID'; tmpField.DataSet:=CDSet; tmpField.FieldKind:=fkData; tmpField:=TWideStringField.Create(CDSet); tmpField.FieldName:='项目'; tmpField.DataSet:=CDSet; tmpField.FieldKind:=fkData; tmpField:=TBCDField.Create(CDSet); tmpField.FieldName:='数据'; tmpField.Size:=ADOQry.FieldByName('数据').Size; tmpField.DataSet:=CDSet; tmpField.FieldKind:=fkData; //计算字段: tmpField:=TBCDField.Create(CDSet); tmpField.FieldName:='用于显示'; tmpField.DataSet:=CDSet; tmpField.FieldKind:=fkInternalCalc; //数据关联: CDSet.OnCalcFields:=CDSetCalcFields; CDSet.Open; DSource:=TDataSource.Create(self); DSource.DataSet:=CDSet; DBEdit.DataField:='用于显示'; DBEdit.DataSource:=DSource; DBGrid.DataSource:=DSource; end;procedure TForm1.CDSetCalcFields(DataSet: TDataSet); begin CDSet.FieldByName('用于显示').AsFloat:=CDSet.FieldByName('数据').AsFloat*100; end;procedure TForm1.DBEditExit(Sender: TObject); begin CDSet.FieldByName('数据').AsFloat:=CDSet.FieldByName('用于显示').AsFloat; CDSet.Post; CDSet.ApplyUpdates(0);//将数据的变化反映到数据库 end;procedure TForm1.DBEditEnter(Sender: TObject); begin CDSet.Edit; CDSet.FieldByName('用于显示').AsFloat:=CDSet.FieldByName('数据').AsFloat; end;procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin //释放控件: if DBGrid<>nil then DBGrid.Free; if DBEdit<>nil then DBEdit.Free; DSource.Free; CDSet.Free; DSProvider.Free; if ADOQry<>nil then ADOQry.Free; end;procedure TForm1.DBEditKeyPress(Sender: TObject; var Key: Char); begin if key=#13 then perform(wm_nextdlgctl,0,0);//当按回车时,焦点移到下一可获焦点的控件 end;end.
有Value和DisplayText
参照一下处理方法
var
F:TField;
begin
F:=DataSet.FieldByName('字段名');
TFloatField(F).DisplayFormat:=FloatToStr(F.AsFloat*100);
TFloatField(F).EditFormat:='#.#';
end;
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, StdCtrls, Mask, DBCtrls, Grids, DBGrids, ADODB, DBClient,
Provider;type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure CDSetCalcFields(DataSet: TDataSet);
procedure DBEditExit(Sender: TObject);
procedure DBEditEnter(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure DBEditKeyPress(Sender: TObject; var Key: Char);
public
{ Public declarations }
end;var
Form1: TForm1;implementationuses ComObj;
var DSProvider:TDataSetProvider;
CDSet: TClientDataSet;
DSource:TDataSource;
DBGrid: TDBGrid;
DBEdit: TDBEdit;
ADOQry: TADOQuery;
{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
const ConnectionStr:string='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;'
+'Data Source=.\db2.mdb;Mode=Share Deny None;Extended Properties="";'
+'Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database '
+'Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet '
+'OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;'
+'Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;'
+'Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don'+#39+'t Copy Locale on Compact=False;'
+'Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False';//连接串
var AccessDB:OleVariant;
tmpField:TField;
i:integer;
begin
//窗体设置:
Height:=360;
Width:=480;
Caption:='让数据增大100倍在DBEdit显示';
Position:=poScreenCenter;
OnCloseQuery:=FormCloseQuery;
//表格设置:
DBGrid:=TDBGrid.Create(self);
try
DBGrid.Parent:=Form1;
DBGrid.Align:=alTop;
DBGrid.Height:=260;
except
FreeAndNil(DBGrid);
close;
exit;
end;
//输入框设置:
DBEdit:=TDBEdit.Create(self);
try
DBEdit.Parent:=Form1;
DBEdit.Left:=168;
DBEdit.Top:=280;
DBEdit.OnEnter:=DBEditEnter;
DBEdit.OnExit:=DBEditExit;
DBEdit.OnKeyPress:=DBEditKeyPress;
except
FreeAndNil(DBEdit);
close;
exit;
end;
//数据集设置:
ADOQry:=TADOQuery.Create(self);
if not FileExists('.\db2.mdb')then begin //如果文件db2.mdb不在当前位置
//建立库文件:
try
AccessDB:=CreateOleObject('ADOX.Catalog');
AccessDB.Create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\db2.mdb');
finally
AccessDB:=VarNull;
end;
//建立表Tab1
try
with ADOQry do begin
ConnectionString:=ConnectionStr;
SQL.Text:='Create Table Tab1(ID Counter,项目 string,数据 numeric(10,3))';
ExecSQL;
for i:=1 to 10 do begin
ADOQry.Close;
SQL.Text:='INSERT INTO Tab1 (项目,数据) VALUES ('+QuotedStr('第'+IntToStr(i)+'笔')+','+FloatToStr(i*1.5)+')';
ExecSQL;
end;
end;
except
FreeAndNil(ADOQry);
close;
exit;
end;
end;
try
with ADOQry do begin
Close;
ConnectionString:=ConnectionStr;//连接db2.mdb
SQL.Text:='select * from Tab1';//打开表Tab1
Open;
end;
except
FreeAndNil(ADOQry);
close;
exit;
end;
DSProvider:=TDataSetProvider.Create(self);
DSProvider.Name:='DSProvider';
DSProvider.DataSet:=ADOQry;
CDSet:=TClientDataSet.Create(self);
CDSet.ProviderName:='DSProvider';
//固定字段:
tmpField:=TAutoIncField.Create(CDSet);
tmpField.FieldName:='ID';
tmpField.DataSet:=CDSet;
tmpField.FieldKind:=fkData;
tmpField:=TWideStringField.Create(CDSet);
tmpField.FieldName:='项目';
tmpField.DataSet:=CDSet;
tmpField.FieldKind:=fkData;
tmpField:=TBCDField.Create(CDSet);
tmpField.FieldName:='数据';
tmpField.Size:=ADOQry.FieldByName('数据').Size;
tmpField.DataSet:=CDSet;
tmpField.FieldKind:=fkData;
//计算字段:
tmpField:=TBCDField.Create(CDSet);
tmpField.FieldName:='用于显示';
tmpField.DataSet:=CDSet;
tmpField.FieldKind:=fkInternalCalc;
//数据关联:
CDSet.OnCalcFields:=CDSetCalcFields;
CDSet.Open;
DSource:=TDataSource.Create(self);
DSource.DataSet:=CDSet;
DBEdit.DataField:='用于显示';
DBEdit.DataSource:=DSource;
DBGrid.DataSource:=DSource;
end;procedure TForm1.CDSetCalcFields(DataSet: TDataSet);
begin
CDSet.FieldByName('用于显示').AsFloat:=CDSet.FieldByName('数据').AsFloat*100;
end;procedure TForm1.DBEditExit(Sender: TObject);
begin
CDSet.FieldByName('数据').AsFloat:=CDSet.FieldByName('用于显示').AsFloat;
CDSet.Post;
CDSet.ApplyUpdates(0);//将数据的变化反映到数据库
end;procedure TForm1.DBEditEnter(Sender: TObject);
begin
CDSet.Edit;
CDSet.FieldByName('用于显示').AsFloat:=CDSet.FieldByName('数据').AsFloat;
end;procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
//释放控件:
if DBGrid<>nil then DBGrid.Free;
if DBEdit<>nil then DBEdit.Free;
DSource.Free;
CDSet.Free;
DSProvider.Free;
if ADOQry<>nil then ADOQry.Free;
end;procedure TForm1.DBEditKeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then perform(wm_nextdlgctl,0,0);//当按回车时,焦点移到下一可获焦点的控件
end;end.