首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

dbedit展示和保存不一样

2012-09-01 
dbedit显示和保存不一样我的要求是:dbedit连接临时表的某个字段field,在我输入0-1之间的数字,离开的时候,

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. 

热点排行