我的窗体上面是个dbgrid,中间是一堆dbedit,下面有'增加记录''删除记录''保存记录''刷新''关闭'5个按纽.我想判断dbedit1即工号的合法性,要求是'JD0001'格式的,输入的时候只输'0001',自动加上前缀.可现在的问题是老提示,'adoquery 不在edit状态'.这问题以前也碰过,以前解决的时候都把判断放到点击按纽事件里面,现在我想就在输入的时候判断.我的代码如下 unit Unit5;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, DBCtrls, Mask, Grids, DBGrids, DB, ADODB,
jpeg, bsSkinCtrls, bsSkinData, bsdbctrls, bsSkinBoxCtrls, bsSkinGrids,
bsDBGrids;type
TForm5 = class(TForm)
Image1: TImage;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
DBMemo1: TDBMemo;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DBEdit3: TDBEdit;
DBEdit4: TDBEdit;
DBEdit6: TDBEdit;
DBEdit7: TDBEdit;
bsSkinData1: TbsSkinData;
bsCompressedStoredSkin1: TbsCompressedStoredSkin;
bsSkinButton1: TbsSkinButton;
bsSkinButton2: TbsSkinButton;
bsSkinButton3: TbsSkinButton;
bsSkinButton4: TbsSkinButton;
bsSkinButton5: TbsSkinButton;
bsSkinDBNavigator1: TbsSkinDBNavigator;
bsSkinDBComboBox1: TbsSkinDBComboBox;
bsSkinDBGrid1: TbsSkinDBGrid;
bsSkinScrollBar1: TbsSkinScrollBar;
bsSkinScrollBar2: TbsSkinScrollBar;
procedure FormCreate(Sender: TObject);
procedure bsSkinButton1Click(Sender: TObject);
procedure bsSkinButton2Click(Sender: TObject);
procedure bsSkinButton3Click(Sender: TObject);
procedure bsSkinButton4Click(Sender: TObject);
procedure bsSkinButton5Click(Sender: TObject);
// procedure DBEdit1Exit(Sender: TObject);
procedure DBEdit1KeyPress(Sender: TObject; var Key: Char);
procedure DBEdit1Exit(Sender: TObject);
// procedure ADOQuery1AfterScroll(DataSet: TDataSet);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form5: TForm5;implementation{$R *.dfm}procedure TForm5.bsSkinButton1Click(Sender: TObject);
begin
adoquery1.Insert;
dbedit1.SetFocus;
end;procedure TForm5.bsSkinButton2Click(Sender: TObject);
begin
if messagebox(0,'确认要删除?','信息提示!',mb_yesno+mb_iconinformation+mb_taskmodal)=idyes then
adoquery1.Delete;
end;procedure TForm5.bsSkinButton3Click(Sender: TObject);
begin
try
if AdoQuery1.state in [dsinsert,dsEdit] then
begin
if MessageBox(Handle,'是否真要保存修改信息吗?','提示',MB_ICONQUESTION
or MB_YESNO) = idYes then
adoquery1.post;
end;
ADOQuery1.UpdateBatch();
except
raise;end;
end;procedure TForm5.bsSkinButton4Click(Sender: TObject);
begin
adoquery1.Close;
adoquery1.Active:=false;
adoquery1.Open;
adoquery1.Active:=true;
end;procedure TForm5.bsSkinButton5Click(Sender: TObject);
begin
close;
end;procedure TForm5.FormCreate(Sender: TObject);var
loginstr:string;
beginloginstr:='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source='+ExtractFilePath(ParamStr(0)) +'人事管理系统.mdb;Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";';
ADOConnection1.Connected:=false;
ADOConnection1.ConnectionString:=loginstr;
ADOConnection1.Connected:=true;ADOQuery1.Active:=true;
end;
procedure TForm5.DBEdit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9', #13, #8]) then
Key := #0;end;
procedure TForm5.DBEdit1Exit(Sender: TObject);
begin
if (TWinControl(Screen.ActiveControl).Name <> 'bsSkinButton5') then
begin
if Trim(dbedit1.Text)='' then
begin
showmessage('工号不能为空');
dbedit1.SetFocus;endelse if(length(dbedit1.Text)<>4) then
begin
showmessage('请输入四位编号');
dbedit1.SetFocus;
dbedit1.Text:='';
end
else
begin
dbedit1.Text:='JD'+dbedit1.Text;
end;
end;
end;end.还有如何判断它已经是'JD0001'格式了,即已经合法了
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, DBCtrls, Mask, Grids, DBGrids, DB, ADODB,
jpeg, bsSkinCtrls, bsSkinData, bsdbctrls, bsSkinBoxCtrls, bsSkinGrids,
bsDBGrids;type
TForm5 = class(TForm)
Image1: TImage;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
DBMemo1: TDBMemo;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DBEdit3: TDBEdit;
DBEdit4: TDBEdit;
DBEdit6: TDBEdit;
DBEdit7: TDBEdit;
bsSkinData1: TbsSkinData;
bsCompressedStoredSkin1: TbsCompressedStoredSkin;
bsSkinButton1: TbsSkinButton;
bsSkinButton2: TbsSkinButton;
bsSkinButton3: TbsSkinButton;
bsSkinButton4: TbsSkinButton;
bsSkinButton5: TbsSkinButton;
bsSkinDBNavigator1: TbsSkinDBNavigator;
bsSkinDBComboBox1: TbsSkinDBComboBox;
bsSkinDBGrid1: TbsSkinDBGrid;
bsSkinScrollBar1: TbsSkinScrollBar;
bsSkinScrollBar2: TbsSkinScrollBar;
procedure FormCreate(Sender: TObject);
procedure bsSkinButton1Click(Sender: TObject);
procedure bsSkinButton2Click(Sender: TObject);
procedure bsSkinButton3Click(Sender: TObject);
procedure bsSkinButton4Click(Sender: TObject);
procedure bsSkinButton5Click(Sender: TObject);
// procedure DBEdit1Exit(Sender: TObject);
procedure DBEdit1KeyPress(Sender: TObject; var Key: Char);
procedure DBEdit1Exit(Sender: TObject);
// procedure ADOQuery1AfterScroll(DataSet: TDataSet);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form5: TForm5;implementation{$R *.dfm}procedure TForm5.bsSkinButton1Click(Sender: TObject);
begin
adoquery1.Insert;
dbedit1.SetFocus;
end;procedure TForm5.bsSkinButton2Click(Sender: TObject);
begin
if messagebox(0,'确认要删除?','信息提示!',mb_yesno+mb_iconinformation+mb_taskmodal)=idyes then
adoquery1.Delete;
end;procedure TForm5.bsSkinButton3Click(Sender: TObject);
begin
try
if AdoQuery1.state in [dsinsert,dsEdit] then
begin
if MessageBox(Handle,'是否真要保存修改信息吗?','提示',MB_ICONQUESTION
or MB_YESNO) = idYes then
adoquery1.post;
end;
ADOQuery1.UpdateBatch();
except
raise;end;
end;procedure TForm5.bsSkinButton4Click(Sender: TObject);
begin
adoquery1.Close;
adoquery1.Active:=false;
adoquery1.Open;
adoquery1.Active:=true;
end;procedure TForm5.bsSkinButton5Click(Sender: TObject);
begin
close;
end;procedure TForm5.FormCreate(Sender: TObject);var
loginstr:string;
beginloginstr:='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source='+ExtractFilePath(ParamStr(0)) +'人事管理系统.mdb;Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";';
ADOConnection1.Connected:=false;
ADOConnection1.ConnectionString:=loginstr;
ADOConnection1.Connected:=true;ADOQuery1.Active:=true;
end;
procedure TForm5.DBEdit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9', #13, #8]) then
Key := #0;end;
procedure TForm5.DBEdit1Exit(Sender: TObject);
begin
if (TWinControl(Screen.ActiveControl).Name <> 'bsSkinButton5') then
begin
if Trim(dbedit1.Text)='' then
begin
showmessage('工号不能为空');
dbedit1.SetFocus;endelse if(length(dbedit1.Text)<>4) then
begin
showmessage('请输入四位编号');
dbedit1.SetFocus;
dbedit1.Text:='';
end
else
begin
dbedit1.Text:='JD'+dbedit1.Text;
end;
end;
end;end.还有如何判断它已经是'JD0001'格式了,即已经合法了
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, DBCtrls, Mask, Grids, DBGrids, DB, ADODB,
jpeg, bsSkinCtrls, bsSkinData, bsdbctrls, bsSkinBoxCtrls, bsSkinGrids,
bsDBGrids;type
TForm5 = class(TForm)
Image1: TImage;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
DBMemo1: TDBMemo;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DBEdit3: TDBEdit;
DBEdit4: TDBEdit;
DBEdit6: TDBEdit;
DBEdit7: TDBEdit;
bsSkinData1: TbsSkinData;
bsCompressedStoredSkin1: TbsCompressedStoredSkin;
bsSkinButton1: TbsSkinButton;
bsSkinButton2: TbsSkinButton;
bsSkinButton3: TbsSkinButton;
bsSkinButton4: TbsSkinButton;
bsSkinButton5: TbsSkinButton;
bsSkinDBNavigator1: TbsSkinDBNavigator;
bsSkinDBComboBox1: TbsSkinDBComboBox;
bsSkinDBGrid1: TbsSkinDBGrid;
bsSkinScrollBar1: TbsSkinScrollBar;
bsSkinScrollBar2: TbsSkinScrollBar;
procedure FormCreate(Sender: TObject);
procedure bsSkinButton1Click(Sender: TObject);
procedure bsSkinButton2Click(Sender: TObject);
procedure bsSkinButton3Click(Sender: TObject);
procedure bsSkinButton4Click(Sender: TObject);
procedure bsSkinButton5Click(Sender: TObject);
// procedure DBEdit1Exit(Sender: TObject);
procedure DBEdit1KeyPress(Sender: TObject; var Key: Char);
procedure DBEdit1Exit(Sender: TObject);
// procedure ADOQuery1AfterScroll(DataSet: TDataSet);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form5: TForm5;implementation{$R *.dfm}procedure TForm5.bsSkinButton1Click(Sender: TObject);
begin
if AdoQuery1.Active then adoquery1.Insert;
if DBEdit1.canFocus then dbedit1.SetFocus;
end;procedure TForm5.bsSkinButton2Click(Sender: TObject);
begin
if messagebox(0,'确认要删除?','信息提示!',mb_yesno+mb_iconinformation+mb_taskmodal)=idyes then
begin
if not AdoQuery1.IsEmpty then
adoquery1.Delete;
end;
end;{这个你错得太离谱了,注意对比}
procedure TForm5.bsSkinButton3Click(Sender: TObject);
begin
try
if AdoQuery1.state in [dsinsert,dsEdit] then
begin
if MessageBox(Handle,'是否真要保存修改信息吗?','提示',MB_ICONQUESTION
or MB_YESNO) = idYes then
begin
adoquery1.post;
ADOQuery1.UpdateBatch();
end;
end;
except
raise;
end;
end;procedure TForm5.bsSkinButton4Click(Sender: TObject);
begin
adoquery1.Close;
adoquery1.Active:=false;
adoquery1.Open;
adoquery1.Active:=true;
end;procedure TForm5.bsSkinButton5Click(Sender: TObject);
begin
close;
end;procedure TForm5.FormCreate(Sender: TObject);
var
loginstr:string;
beginloginstr:='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source='+ExtractFilePath(ParamStr(0)) +'人事管理系统.mdb;Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";';
ADOConnection1.Connected:=false;
ADOConnection1.ConnectionString:=loginstr;
ADOConnection1.Connected:=true;ADOQuery1.Active:=true;
end;
procedure TForm5.DBEdit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9', #13, #8]) then
Key := #0;end;
procedure TForm5.DBEdit1Exit(Sender: TObject);
begin
if (TWinControl(Screen.ActiveControl).Name <> 'bsSkinButton5') then
begin
if Trim(dbedit1.Text)='' then
begin
showmessage('工号不能为空');
dbedit1.SetFocus;
endelse if(length(dbedit1.Text)<>4) then
begin
showmessage('请输入四位编号');
dbedit1.SetFocus;
dbedit1.Text:='';
end
else
begin
dbedit1.Text:='JD'+dbedit1.Text;
end;
end;
end;end.
处理必须输入6个字符的问题
AdoQuery1.beforepost 中写下面的代码procedure AdoQuery1BeforePost(DataSet: TDataSet);
begin
if AdoQuery1.state in [dsinset,dsEdit] then
begin
//dbedit1指几的字段名我不知道,先这样处理了
if AdoQuery1.fieldbyname(DBEdit1.fieldname).isNull then begin
showMessage('此字段必须输入');
abort;
end;
if length(AdoQuery1.fieldbyname(DBEdit1.fieldname).AsString) <> 6 then begin
showMessage('此字段输入的长度不合法');
abort;
end; if Lowercase(leftstr(AdoQuery1.fieldbyname(DBEdit1.fieldname).AsString,2)) <> 'jd' then
begin
showMessage('前两位字符必须为 JD');
abort;
end;
end;
end;