📄 f007unit.pas
字号:
unit F007Unit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Buttons, StdCtrls, Grids, DBGrids, Db, DBTables, ADODB;
type
TF007Frm = class(TForm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
codeGrd: TDBGrid;
fieldCbx: TComboBox;
signCbx: TComboBox;
ValueEdt: TEdit;
queryBtn: TBitBtn;
codeDt: TDataSource;
codeAQey: TADOQuery;
procedure FormShow(Sender: TObject);
procedure queryBtnClick(Sender: TObject);
procedure codeGrdTitleClick(Column: TColumn);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure ValueEdtKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
procedure GetGrid(striniFileName:String;strViewName:String;AdoQuery:TAdoQuery;DBGrid:TDBGrid);
procedure SetGrid(striniFileName:String;strViewName:String;AdoQuery:TAdoQuery;DBGrid:TDBGrid);
public
{ Public declarations }
sqlText:string; // 原始SQL.TEXT
strResult:string; //返回值
fieldName:string; //要返回的字段名称
strSort:string; //排序的字段
queryText:string; //查询内容
striniHelpName:string; //Grid设置文件查询
strViewName:string; //查询的数据表
intFieldNum:integer;//默认的查询设置
arrayResult:array of string;//查询结果
procedure CallCodeHelp(strViewText:string;intFieldNum:integer;striniHelpName,strViewName:string;var arrResult:array of string);
end;
var
F007Frm: TF007Frm;
implementation
uses datalinkunit;
{$R *.DFM}
procedure TF007Frm.GetGrid(striniFileName:String;strViewName:String;
AdoQuery:TAdoQuery;DBGrid:TDBGrid);
var
i,j:integer;
strReturned:array[0..20] of char;//
strContent:string;//
strDivideFlag:string;//
intPosition:integer;//
strVisible:string;//
strLength:string;//
begin
strDivideFlag:='/';
for i:=0 to AdoQuery.Fields.Count -1 do
begin
GetPrivateProfileString(PChar(strViewName),
pchar(AdoQuery.Fields[i].FieldName),
'',strReturned,255,pchar(striniFileName));
j:=0;
strContent:='';
while strReturned[j]<>'' do
begin
strContent:=strContent+strReturned[j];
j:=j+1;
end;
intPosition:=Pos(strDivideFlag,strContent);
strVisible:=Copy(strContent,1,intPosition-1);
Delete(strContent,1,intPosition);
intPosition:=Pos(strDivideFlag,strContent);
strLength:=Copy(strContent,1,intPosition-1);
if strVisible='1' then
DBGrid.columns[i].Visible:=True
else
DBGrid.columns[i].Visible:=False;
if strLength<>'' then
DBGrid.columns[i].width:=StrToInt(strLength);
end;
end;
////////////////////////////////////////////////////////////////
//函数功能;保存DBGrid的状态 //
//输入参数:StrIniFilePath,配置文件完全文件名 //
// strViewName, 表名 //
// AdoQuery, AdoQuery组件名 //
// DBGrid, DBGrid组件名 //
//输出参数:无 //
//编写人:李刚 //
//编写时间:2001年9月7日 //
////////////////////////////////////////////////////////////////
procedure TF007Frm.SetGrid(striniFileName:String;strViewName:String;
AdoQuery:TAdoQuery;DBGrid:TDBGrid);
var
i:integer;
strFields:pChar;//
StrStr:PChar;//
strVisible:string;//
strLength:string;//
strDivideFlag:string;//
begin
strDivideFlag:='/';
for i:=0 to AdoQuery.Fields.Count -1 do
begin
strfields:= PChar(AdoQuery.Fields[i].FieldName);
if DBGrid.columns[i].Visible=true then
strVisible:='1'
else
strVisible:='0';
strLength:=IntToStr(DBGrid.columns[i].width);
StrStr:=PChar(strVisible+strDivideFlag+strLength+strDivideFlag);
WritePrivateProfileString(PChar(strViewName),strFields,StrStr,
pChar(striniFileName));
end;
end;
procedure TF007Frm.FormShow(Sender: TObject);
var
i:integer;
totalWidth:integer;
begin
GetGrid(striniHelpName,strViewName,codeAQey,codeGrd);//调用DBGrid配置参数函数
//初始化字段列表
fieldCbx.items:=codeDt.DataSet.FieldList;
fieldCbx.Text:='助记码';//fieldCbx.items[intFieldNum];
signCbx.ItemIndex:=6; // 默认包含
//初始化界面
totalWidth:=0;
for i:=0 to codeGrd.Columns.Count-1 do
begin
totalWidth:=totalWidth+codeGrd.Columns[i].Width;
end;
if totalWidth>GetSystemMetrics(SM_CXSCREEN)-80 then
totalWidth:=GetSystemMetrics(SM_CXSCREEN)-80;
if totalWidth<444 then totalWidth:=444;
self.Width :=totalWidth;
codeGrd.Width :=totalWidth-40;
valueEdt.Width :=self.Width - valueEdt.Left - queryBtn.Width-20;
queryBtn.Left := valueEdt.left+valueEdt.Width +5;
//初始化变量
sqlText:=codeAQey.SQL.Text;
if strpos(pChar(sqlText),' where ')=nil then
sqlText:=sqlText+' where 1=1';
queryText:='';
strSort:='';
end;
procedure TF007Frm.queryBtnClick(Sender: TObject);
var
sResult:string; //储存查询串
begin
sResult:=fieldCbx.Text;
case signCbx.ItemIndex+1 of
1: sResult:=sResult+'=';
2: sResult:=sResult+'<>';
3: sResult:=sResult+' > ';
4: sResult:=sResult+'<';
5: sResult:=sResult+'<=';
6: sResult:=sResult+' >= ';
7: sResult:=sResult+' like ';
else sResult:=sResult+'=';
end;
if signCbx.ItemIndex+1<>7 then //如果是LIKE需要特殊处理
sResult:=sResult+''''+valueEdt.Text+''''
else
sResult:=sResult+'''%'+valueEdt.text+'%''';
queryText:=' and '+sResult; //保存查询内容
//更新查询
codeAQey.Close;
codeAQey.SQL.Text:=sqlText+queryText+strSort;
codeAQey.Open;
GetGrid(striniHelpName,strViewName,codeAQey,codeGrd);//调用DBGrid配置参数函数
end;
procedure TF007Frm.codeGrdTitleClick(Column: TColumn);
begin
try
//按点击的列排序
strSort:=' order by '+Column.Title.Caption;
codeAQey.Close;
codeAQey.SQL.Text:=sqlText+queryText+strSort;
codeAQey.Open
except
end;
end;
procedure TF007Frm.BitBtn2Click(Sender: TObject);
begin
tag:=0; //tag为0代表没有正确的返回值
close;
end;
procedure TF007Frm.BitBtn1Click(Sender: TObject);
Var
i:Integer;
begin
tag:=0; //tag为1代表有正确的返回值
// if not codeAQey.Eof then
// begin
tag:=1;
SetLength(arrayResult,codeAQey.FieldCount);
For i:=0 to codeAQey.FieldCount-1 do
arrayResult[i]:=codeAQey.Fields[i].AsString;
// end;
close;
end;
////////////////////////////////////////////////////////////////
//函数名称:function TF007Frm.CallCodeHelp //
//函数功能;通过用户选择,返回编码 //
//输入参数:strViewText 视图查询串 //
// retField 要返回值的字段名称 //
//输出参数:指定字段的值 //
//编写人:陈宇 //
//编写时间:2001年9月21日 //
////////////////////////////////////////////////////////////////
procedure TF007Frm.CallCodeHelp(strViewText:string;intFieldNum:integer;
striniHelpName,strViewName:string;var arrResult:array of string);
Var
i:Integer;
begin
//进行ADOQUERY的初始化
codeAQey.SQL.Text :=strViewText;
//打开查询
codeAQey.Open;
//出示窗体
F007Frm.strViewName:=strViewName;
F007Frm.intFieldNum:=intFieldNum;
F007Frm.striniHelpName:=striniHelpName;
F007Frm.ShowModal;
//返回结果
if tag=1 then
begin
For i:=0 to codeAQey.FieldCount-1 do
arrResult[i]:=arrayResult[i];
end
else
arrResult[0]:='-1';
//关闭查询
codeAQey.Close;
end;
procedure TF007Frm.ValueEdtKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
//在此按下回车键完成与单击查询按钮同样的功能
if key=13 then
begin
queryBtn.Click;
end;
end;
procedure TF007Frm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
SetGrid(striniHelpName,strViewName,codeAQey,CodeGrd);//调用DBGrid参数保存函数
Action:=caFree;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -