📄 pz_dmdic.pas
字号:
unit PZ_DmDic;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ToolWin, ComCtrls, ExtCtrls, DBCtrls, Grids, DBGrids,
DB, ADODB;
type
TFrmPZ_DmDic = class(TForm)
Bevel1: TBevel;
ToolBar1: TToolBar;
DBNavigator1: TDBNavigator;
DataSource1: TDataSource;
ADOQuery1: TADOQuery;
GroupBox1: TGroupBox;
DBGrid1: TDBGrid;
procedure FormShow(Sender: TObject);
procedure DBGrid1DblClick(Sender: TObject);
procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
procedure ADOQuery1BeforePost(DataSet: TDataSet);
private
{ Private declarations }
public
{ Public declarations }
FieldName, CardLx, CardValue: string;
lxh: integer;
procedure SzCheckRule;
procedure SzLength(lxh: integer; var FirChar, SecChar: string; var CharLen:
integer);
procedure GetIcKh(var First: integer; var Second: integer; ValLen: integer);
function CheckVald: Boolean;
end;
function SetWork(AFieldName: string; var Bm: string; Lx: integer; ACardLx,
ACardValue: string): Boolean;
function SetWork1(ADBGrid: TDBGrid; ADBEdit: TDBEdit; AIdentifyString: string;
AFieldName: string; var Bm: string; Lx: integer; ACardLx, ACardValue: string):
Boolean;
implementation
uses main;
{$R *.dfm}
function SetWork(AFieldName: string; var Bm: string; Lx: integer; ACardLx,
ACardValue: string): Boolean;
var
FrmPZ_DmDic: TFrmPZ_DmDic;
begin
Result := False;
Application.CreateForm(TFrmPZ_DmDic, FrmPZ_DmDic);
with FrmPZ_DmDic do
begin
FieldName := AFieldName;
CardLx := ACardLx;
CardValue := ACardValue;
lxh := Lx;
if ShowModal = mrOK then
begin
if lxh = 6 then
bm := FloatToStr(ADOQuery1.Fields[1].AsFloat)
else if lxh = 10 then
bm := Trim(ADOQuery1.Fields[1].AsString)
else
bm := IntToStr(ADOQuery1.Fields[1].AsInteger);
ADOQuery1.Close;
Result := True;
end;
Free;
end;
end;
function SetWork1(ADBGrid: TDBGrid; ADBEdit: TDBEdit; AIdentifyString: string;
AFieldName: string; var Bm: string; Lx: integer; ACardLx, ACardValue: string):
Boolean;
var
FrmPZ_DmDic: TFrmPZ_DmDic;
begin
Result := False;
Application.CreateForm(TFrmPZ_DmDic, FrmPZ_DmDic);
with FrmPZ_DmDic do
begin
FieldName := AFieldName;
CardLx := ACardLx;
CardValue := ACardValue;
lxh := Lx;
if ShowModal = mrOK then
begin
if AIdentifyString = 'DBGrid' then
ADBGrid.SelectedField.AsVariant := ADOQuery1.Fields[1].AsVariant
else if AIdentifyString = 'DBEdit' then
ADBEdit.Field.AsVariant := ADOQuery1.Fields[1].AsVariant;
Result := True;
ADOQuery1.Close;
end;
Free;
end;
end;
procedure TFrmPZ_DmDic.FormShow(Sender: TObject);
begin
with ADOQuery1 do
begin
ConnectionString := 'Provider=SQLOLEDB.1;Persist Security Info=False;User ID='
+ FrmMain.DbUser + ';Password=' + FrmMain.DbPass + ';Initial Catalog=' +
FrmMain.DbName + ';Data Source=' + FrmMain.ServerName;
Sql.Add('Select * ');
Sql.Add('From Dic_' + Trim(FieldName));
try
Open;
except
ShowMessage('浏览编号数据库错误!');
Exit;
end;
end;
end;
procedure TFrmPZ_DmDic.DBGrid1DblClick(Sender: TObject);
begin
case lxh of
1, 2, 3, 4, 6, 10: if DBGrid1.Fields[1].AsString = '' then
begin
ShowMessage('号码字段不能为空!');
Exit;
end;
5: if DBGrid1.Fields[1].AsInteger = 0 then
begin
ShowMessage('号码字段不能为空!');
Exit;
end;
end;
ModalResult := mrOk;
end;
procedure TFrmPZ_DmDic.SzCheckRule;
var
First1, Second1, ValLen: integer;
begin
with ADOQuery1 do
case lxh of
1: Fields[1].EditMask := '2000';
2: Fields[1].EditMask := '3000';
3: Fields[1].EditMask := '500';
4: Fields[1].EditMask := '900';
5: Fields[1].EditMask := '5000';
6: Fields[1].EditMask := '10000';
10:
begin
GetIcKh(First1, Second1, ValLen);
Fields[1].EditMask := IntToStr(First1) + IntToStr(Second1) + '000000';
end;
end;
DBGrid1.Fields[0].FocusControl;
end;
procedure TFrmPZ_DmDic.SzLength(lxh: integer; var FirChar, SecChar: string; var
CharLen: integer);
var
First, Second: integer;
begin
case lxh of
1:
begin
FirChar := '2';
CharLen := 4;
Exit;
end;
2:
begin
FirChar := '3';
CharLen := 4;
end;
3:
begin
FirChar := '5';
CharLen := 3;
end;
4:
begin
FirChar := '9';
CharLen := 3;
end;
5:
begin
FirChar := '5';
CharLen := 4;
end;
6:
begin
FirChar := '1';
CharLen := 5;
end;
10:
begin
GetIcKh(First, Second, 0);
FirChar := IntToStr(First);
SecChar := IntToStr(Second);
CharLen := 8;
end;
end;
end;
procedure TFrmPZ_DmDic.DBNavigator1Click(Sender: TObject;
Button: TNavigateBtn);
begin
//if Button=nbInsert then SzCheckRule;
SzCheckRule;
end;
procedure TFrmPZ_DmDic.GetIcKh(var First: integer; var Second: integer; ValLen:
integer);
var
CardValue1: integer;
begin
if CardLx = 'A' then
First := 1;
if CardLx = 'B' then
First := 2;
if CardLx = 'C' then
First := 3;
if CardLx = 'D' then
First := 4;
CardValue1 := StrToInt(CardValue);
case CardValue1 of
20: Second := 1;
30: Second := 2;
50: Second := 3;
100: Second := 4;
end;
ValLen := 8;
end;
procedure TFrmPZ_DmDic.ADOQuery1BeforePost(DataSet: TDataSet);
begin
if not CheckVald then
Abort;
end;
function TFrmPZ_DmDic.CheckVald: Boolean;
var
First, Second, Hm, AFirst, ASecond: string;
ValueLen, AValLen: integer;
begin
Result := False;
case lxh of
6: Hm := Trim(FloatToStr(ADOQuery1.Fields[1].AsFloat));
10: Hm := Trim(ADOQuery1.Fields[1].AsString);
else
Hm := Trim(IntToStr(ADOQuery1.Fields[1].AsInteger));
end;
First := Trim(copy(Hm, 1, 1));
Second := Trim(copy(Hm, 2, 1));
ValueLen := Length(Hm);
SzLength(lxh, AFirst, ASecond, AValLen);
case lxh of
10: if (First <> AFirst) or (Second <> ASecond) or (ValueLen <> AValLen)
then
begin
ShowMessage('号码的第一位应为' + AFirst + ',号码的第二位应为' + ASecond
+
',号码的长度应为' + IntToStr(AValLen) + ',请重新输入!');
Exit;
end;
else if (First <> AFirst) or (ValueLen <> AValLen) then
begin
ShowMessage('号码的第一位应为' + AFirst + ',号码的长度应为' +
IntToStr(AValLen) + ',请重新输入!');
Exit;
end;
end;
Result := True;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -