我的程序如下,我需要在列离开时,用HAVE函数判断输入的编码是否存在,不存在时返回空赋到当前字段,所以必须用EDIT,如果不用,总提示DATASET不处于修改和插入状态!procedure TFrmGetpayment.DBGrid1ColExit(Sender: TObject); begin DM.TblGetpayment.Edit; if DBGrid1.SelectedField.FieldName = 'InOutMode' then DBGrid1.SelectedField.Value := Have('InOutFile','InOutCode',DBGrid1.SelectedField.Value,'And InOutType=''InOutMode'' And StopFlag = False'); end;
我的问题自己解决了,谢谢peacock的答复! 我把程序修改如下 procedure TFrmGetpayment.DBGrid1ColExit(Sender: TObject); begin if( DBGrid1.SelectedField.FieldName = 'InOutMode')And (TblGetPayment.Stat = dsInsert or TblGetPayment.Stat = dsEdit) then DBGrid1.SelectedField.Value := Have('InOutFile','InOutCode',DBGrid1.SelectedField.Value,'And InOutType=''InOutMode'' And StopFlag = False'); end;
我就是将 LockType设置成ltBatchOptimistic,可是不灵
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, Db, Grids, DBGrids, ADODB;type
TForm1 = class(TForm)
ADOTable1: TADOTable;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
BitBtnAdd: TBitBtn;
BitBtnSave: TBitBtn;
procedure BitBtnAddClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BitBtnSaveClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}procedure TForm1.BitBtnAddClick(Sender: TObject);
begin
ADOTable1.Append;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
ADOTable1.ConnectionString := 'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=YourDBName;Data Source=SERVER';
ADOTable1.TableName := 'YourTableNanme';
ADOTable1.Open;
end;procedure TForm1.BitBtnSaveClick(Sender: TObject);
begin
ADOTable1.UpdateBatch;
end;end.
我在DBGRID的列离开事件里,有TABLE.EDIT,有这段代码后,上下左右反复移动记录,记录就会消失,重新输入一条记录,以前记录又会显示出来。
希望高手在百忙中帮忙给予解答,小弟万分感激!!!
begin
DM.TblGetpayment.Edit;
if DBGrid1.SelectedField.FieldName = 'InOutMode' then
DBGrid1.SelectedField.Value := Have('InOutFile','InOutCode',DBGrid1.SelectedField.Value,'And InOutType=''InOutMode'' And StopFlag = False');
end;
我把程序修改如下
procedure TFrmGetpayment.DBGrid1ColExit(Sender: TObject);
begin
if( DBGrid1.SelectedField.FieldName = 'InOutMode')And (TblGetPayment.Stat = dsInsert or TblGetPayment.Stat = dsEdit) then
DBGrid1.SelectedField.Value := Have('InOutFile','InOutCode',DBGrid1.SelectedField.Value,'And InOutType=''InOutMode'' And StopFlag = False');
end;