📄 selffunc.pas
字号:
unit SelfFunc;
interface
uses DB,ADODB,Windows,Classes,SysUtils,Messages,Dialogs,DBCtrls,Controls,DBGridEh,
DBGridEhImpExp,Variants,ComObj;
// 自定义个查询
function myquery(Asql:string;ADataset:TADODataSet):TADODataSet;
//DBGridEh导出到execl文件去
procedure DBGridEhToXLS(ADBGridEh:TDBGridEh);
function GetPYIndexChar( hzchar:string):char;
function CheckNotisnull( AComponent:TComponent):Boolean;
function BarCodeIsValid(ABarCode:string):boolean;//检查条码是否是数字
//DBGrid标题排序函数
procedure DBGridTitleSort(Column: TColumnEh);
//设置标题的函数 (若排过序,重新查询后调用此方法清除排序标记。)
procedure SetTitle(Column: TColumnEh);
//判决数据在数据库中是否存在
procedure checkexist(aField,aTable:string;aDataSet:TADODataSet);
//ADOdataset排序
procedure ADODataSetSort(aField:string;aDataSet:TADODataSet);
// 压缩 Access数据库
procedure CompressAccess(const FileFrom, FileTo: string);
implementation
function BarCodeIsValid(ABarCode:string):boolean;
var
i:integer;
begin
Result:=true;
for i:=1 to length(ABarCode) do
if not ((ABarCode[i]>='0') and (ABarCode[i]<='9')) then //因为条码是0-9
begin
Result:=false;
break;
end;
end;
function myquery(Asql:string;ADataset:TADODataSet):TADODataSet;
begin
ADataset.Close;
ADataset.CommandText:='';
ADataset.CommandText:= Asql;
ADataset.Open;
Result:=ADataset;
end;
procedure DBGridEhToXLS(ADBGridEh:TDBGridEh);
var
myDialog:TSaveDialog;
begin
//需要引用DBGridEhImpExp单元
myDialog:=TSaveDialog.Create(nil);
try
myDialog.DefaultExt:='XLS';
myDialog.Filter:='XLS';
if myDialog.Execute then
begin
SaveDBGridEhToExportFile(TDBGridEhExportAsXLS,ADBGridEh,myDialog.FileName,true);
end;
finally
myDialog.Free;
end;
end;
function GetPYIndexChar( hzchar:string):char;
begin //的到一个汉字的拼音头个字母
case WORD(hzchar[1]) shl 8 + WORD(hzchar[2]) of
$B0A1..$B0C4 : result := 'A';
$B0C5..$B2C0 : result := 'B';
$B2C1..$B4ED : result := 'C';
$B4EE..$B6E9 : result := 'D';
$B6EA..$B7A1 : result := 'E';
$B7A2..$B8C0 : result := 'F';
$B8C1..$B9FD : result := 'G';
$B9FE..$BBF6 : result := 'H';
$BBF7..$BFA5 : result := 'J';
$BFA6..$C0AB : result := 'K';
$C0AC..$C2E7 : result := 'L';
$C2E8..$C4C2 : result := 'M';
$C4C3..$C5B5 : result := 'N';
$C5B6..$C5BD : result := 'O';
$C5BE..$C6D9 : result := 'P';
$C6DA..$C8BA : result := 'Q';
$C8BB..$C8F5 : result := 'R';
$C8F6..$CBF9 : result := 'S';
$CBFA..$CDD9 : result := 'T';
$CDDA..$CEF3 : result := 'W';
$CEF4..$D188 : result := 'X';
$D1B9..$D4D0 : result := 'Y';
$D4D1..$D7F9 : result := 'Z';
else
result := char(0);
end;
end;
function CheckNotisnull( AComponent:TComponent):Boolean;
begin
if AComponent is TDBLookupComboBox then
begin
if TDBLookupComboBox(AComponent).KeyValue = null then
Result:=False
else
Result:=True;
end;
end;
//DBGrid标题排序函数
//要在数据集的AfterOpen事件中设定标题为汉字或其他,这样才能正常显示
procedure DBGridTitleSort(Column: TColumnEh);
var
DataSet: TDataSet;
sFieldName: string;
sSort: string;
i: integer;
begin
SetTitle(Column);
DataSet := Column.Field.DataSet;
if DataSet.IsEmpty then
Exit;
sFieldName := Column.FieldName;
if (Column.Field.FieldKind = fkLookup) or (Column.Field.FieldKind = fkCalculated) then
sFieldName := Column.Field.KeyFields;
if DataSet is TCustomADODataSet then
begin
sSort := TCustomADODataSet(DataSet).Sort;
sSort := sFieldName;
TCustomADODataSet(DataSet).sort := sSort;
end;
end;
//设置标题的函数
procedure SetTitle(Column: TColumnEh);
var
iCount: integer;
sCaption: string;
begin
for iCount := 0 to TDBGridEh(Column.Grid).Columns.Count - 1 do
begin
sCaption := TDBGridEh(Column.Grid).Columns[iCount].Title.Caption;
end;
end;
//判决数据在数据库中是否存在
procedure checkexist(aField,aTable:string;aDataSet:TADODataSet);
var
TempDataSet:TADODataSet;
sql:string;
begin
TempDataSet := TADODataSet.Create(nil);
try
sql:='SELECT * FROM '+ aTable + ' WHERE '+ aField+ '='+QuotedStr(trim(aDataSet.FieldByName(aField).AsString));
TempDataSet.Connection:=aDataSet.Connection;
TempDataSet.Close;
TempDataSet.CommandText:='';
TempDataSet.CommandText:=sql;
TempDataSet.Open;
if TempDataSet.RecordCount>0 then
if MessageDlg('此记录已经存在,或现在正在修改是否保存',mtWarning,[mbYes, mbNo],0) <> mrYes then
abort;
finally
TempDataSet.Free;
end;
end;
procedure ADODataSetSort(aField:string;aDataSet:TADODataSet);
begin
aDataSet.Sort:=aField;
end;
procedure CompressAccess(const FileFrom, FileTo: string);
var
Dao: Variant;
begin
Dao := CreateOleObject('DAO.DBEngine.36');//access2000要用dao3.6,在access97上用35和36都可以
Dao.CompactDatabase(FileFrom, FileTo);
Showmessage('本地数据库压缩完成');
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -