dbedit显示和保存不一样
我的要求是:dbedit连接临时表的某个字段field,在我输入0-1之间的数字,离开的时候,显示为 *100后的数字,比如输入0.5,离开时显示为50,但是临时表中还是保存为0.5。有什么好办法吗?求指教
[解决办法]
可以增加一算字段,作乘以100後的示。
[解决办法]
你可以参照一下Lookup控件
有Value和DisplayText
参照一下处理方法
[解决办法]
可以这样,不过如果是用表格控件(比如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:
- Delphi(Pascal) code
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.