📄 ufrmquerytop.~pas
字号:
PFilterSQLGetDBData();
end;
procedure TFrmQueryTop.N3Click(Sender: TObject);
begin
if sQueryFZID = '' then Exit;
iSureORCancel:=0;
FrmFilterSQL:=TFrmFilterSQL.Create(Self);
FrmFilterSQL.ShowModal;
if iSureORCancel = 100 then begin
PAddNodeToTrvFilter();
PFilterSQLGetDBData();
PInitFilterTree();//Add 20030418 任富 检测指针错误 没有保存以前 指针没有初始化
end;
end;
{*******************************************************************************
* 根据定制的SQL 从数据库中提取数据
* 只能用 单引号问题 在Oracle 中
*******************************************************************************}
procedure TFrmQueryTop.PFilterSQLGetDBData;
var
sSQL:String;
I:Integer;
begin
if sQueryFZID = '' then Exit;
if sQueryFZIDSQL = '' then Exit;
for I:=dxDBGrid1.DataSource.DataSet.FieldCount-1 Downto 0 do begin
dxDBGrid1.Columns[I].Destroy;
end;
if sQueryFZIDSQL = '' then Exit;
sSQL:=' Select 9999 FZINTID,T.* From ('+sQueryFZIDSQL+') T' ;
if not bSYSDBORCorSQL then
sSQL:='Select RowNum FZINTID,T.* From ('+sQueryFZIDSQL+') T' ;
if Trim(MemoFilterSQL.Text) <> '' then
sSQL:=sSQL+' Where '+MemoFilterSQL.text;
ClientDataSet1.DisableControls;
sSQL:=MyReplaceStrA(sSQL,'"',''''); //只能用 单引号问题 在Oracle 中
FCarryOutSQL(ClientDataSet1,sSQL,True,True);
{****加上网格序号*****这样会变慢速度 Oracle 可以用 Rownum属性}
if bSYSDBORCorSQL then begin
ClientDataSet1.First;I:=0;
while not ClientDataSet1.Eof do begin
I:=I+1;
ClientDataSet1.Edit; //这个循环的代码速度很慢//
ClientDataSet1.FieldByName('FZINTID').AsString:=IntToStr(I);
ClientDataSet1.Post;
ClientDataSet1.Next;
end;
end;
ClientDataSet1.EnableControls;
dxDBGrid1.CreateDefaultColumns(dxDBGrid1.DataSource.DataSet, dxDBGrid1);
ActChineseToGridExecute(nil);
ActSetSumToGridExecute(nil);//给表格加上合计
end;
{*******************************************************************************
* 删除树中的节点
*******************************************************************************}
procedure TFrmQueryTop.PDelNldeToTrvFilter;
var
sSQL,Str:String;
begin
if iCurrentTrvFilterIndex <=1 then Exit;
PInitFilterTree();
if Pos(sConstNoSave,TrvQueryFilter.Items[iCurrentTrvFilterIndex].Text) > 0 then
begin
TrvQueryFilter.Items[iCurrentTrvFilterIndex].Delete;
Exit;
end;
Str:=String(TrvQueryFilter.Items[iCurrentTrvFilterIndex].data^);
sSQL:='Delete From TSY52013_ChaXun where FZID='+''''+Str+'''';
if not bSYSDBORCorSQL then sSQL:=sSQL+';';
if not FCarryOutSQL(DM.CDSSysA,sSQL,False,False) then begin
DlgWarningA('删除数据出错');
Exit;
end;
TrvQueryFilter.Items[iCurrentTrvFilterIndex].Delete;
end;
procedure TFrmQueryTop.N5Click(Sender: TObject);
var
Str:String;
begin
if TrvQueryFilter.Selected.AbsoluteIndex <=1 then Exit;
iSureORCancel:=50;
FrmFilterSQL:=TFrmFilterSQL.Create(Self);
FrmFilterSQL.ShowModal;
if iSureORCancel = 100 then begin
Str:=MyCutString(True,TrvQueryFilter.Items[iCurrentTrvFilterIndex].Text);
Str:=Str+sConstNoSave+' '+MyCutString(False,TrvQueryFilter.Items[iCurrentTrvFilterIndex].Text);
TrvQueryFilter.Items[iCurrentTrvFilterIndex].Text:=Str;
PFilterSQLGetDBData();
end;
end;
procedure TFrmQueryTop.PopupMenu1Popup(Sender: TObject);
begin
if dxDBGrid1.DataSource.DataSet.Active then begin
N3.Enabled:=True;
N4.Enabled:=True;
N5.Enabled:=True;
end else begin
N3.Enabled:=False;
N4.Enabled:=False;
N5.Enabled:=False;
end;
if TrvQueryFilter.Selected.AbsoluteIndex = 1 then begin
N5.Enabled:=False;
N4.Enabled:=False;
end;
if TrvQueryFilter.Selected.AbsoluteIndex <=1 then begin
N7.Enabled:=False;
end else N7.Enabled:=True;
end;
procedure TFrmQueryTop.SpbtnSaveClick(Sender: TObject);
begin
inherited;
PSaveCurrentNode();
end;
{*******************************************************************************
* 从数组中找到相应的记录 更新
* 用于过滤条件设 定 后的确认
*******************************************************************************}
procedure TFrmQueryTop.PFindarrayToEdit;
var
I:integer;
Str:String;
begin
for I:=0 to High(raFZIDAndFilterSQL) do begin
Str:=String(TrvQueryFilter.Items[iCurrentTrvFilterIndex].data^);
if raFZIDAndFilterSQL[I].sFZID=Str then begin
raFZIDAndFilterSQL[I].sFilterE:=MemoFilter.Text;
raFZIDAndFilterSQL[I].sFilterSQL:=MemoFilterSQL.Text;
end;
end;
end;
procedure TFrmQueryTop.N1Click(Sender: TObject);
begin
{**从数据库中提取数据**}
PFilterSQLGetDBData();
end;
procedure TFrmQueryTop.N4Click(Sender: TObject);
begin
inherited;
PDelNldeToTrvFilter();
end;
procedure TFrmQueryTop.SpbtnDelClick(Sender: TObject);
begin
inherited;
PDelNldeToTrvFilter();
end;
procedure TFrmQueryTop.N7Click(Sender: TObject);
begin
inherited;
PSaveCurrentNode();
end;
procedure TFrmQueryTop.SpbtnExportClick(Sender: TObject);
begin
if DgS_ExprotExecl.Execute then
dxDBGrid1.SaveToXLS(DgS_ExprotExecl.FileName, True);
end;
{*******************************************************************************
* ** 为了操作方便 TrvMoKuaiKeyDown
* ActSaveCtrlSExecute ActEditCtrlEExecute
* TrvQueryFilterKeyDown
*******************************************************************************}
procedure TFrmQueryTop.TrvMoKuaiKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
inherited;
{** 为了操作方便 回车就是双击 }
end;
procedure TFrmQueryTop.ActSaveCtrlSExecute(Sender: TObject);
begin
PSaveCurrentNode();
end;
procedure TFrmQueryTop.ActEditCtrlEExecute(Sender: TObject);
begin
N5.OnClick(Sender);
end;
procedure TFrmQueryTop.TrvQueryFilterKeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
if Key = 13 then TrvQueryFilter.OnDblClick(Sender); //回车
if Key = 46 then SpbtnDel.OnClick(Sender); //Delete 键
end;
procedure TFrmQueryTop.ActAddCtrlAExecute(Sender: TObject);
begin
N3Click(Sender);
end;
{*******************************************************************************
*
*******************************************************************************}
procedure TFrmQueryTop.ActGetDataCtrlQExecute(Sender: TObject);
begin
{***从数据库中提取数据***}
PFilterSQLGetDBData();
end;
{*******************************************************************************
* 数量不大 只加不删除
*******************************************************************************}
function TFrmQueryTop.FGetFilterArrayID: Integer;
var
I:Integer;
begin
for I:=0 to High(saFilter) do begin
if Trim(saFilter[I]) = '' then begin
Result:=I;
Exit;
end;
end;
Result:=0;
DlgWarningA('系统过滤条件只能设置100个,如果需要更大的设置,请和供货商联系');
end;
{*******************************************************************************
* 初始话 查询调价过滤树的节点 把 X=1 +' ' + FZID
* FZID 转移到指针上
*******************************************************************************}
procedure TFrmQueryTop.PInitFilterTree;
var
I,K:integer;
Str:String;
begin
for I:=2 to TrvQueryFilter.Items.Count-1 do begin
Str:=TrvQueryFilter.Items[I].Text;
{**没有初始话指针的节点**}
if MyCutString(False,Str) <> '' then begin
K:=FGetFilterArrayID();
saFilter[K]:=MyCutString(False,Str);
TrvQueryFilter.Items[I].Data:=@saFilter[K];
TrvQueryFilter.Items[I].Text:=Trim(MyCutString(True,Str));
end;
end;
end;
{*******************************************************************************
* 200304019 有错误的改动
*******************************************************************************}
procedure TFrmQueryTop.TrvQueryFilterClick(Sender: TObject);
begin
if TrvQueryFilter.Selected = nil then Exit;
iCurrentTrvFilterIndex:=TrvQueryFilter.Selected.AbsoluteIndex;
end;
procedure TFrmQueryTop.SpbtnEditClick(Sender: TObject);
begin
inherited;
N5Click(Sender);
end;
procedure TFrmQueryTop.SpeedButton2Click(Sender: TObject);
begin
inherited;
end;
{ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
* 全部收缩
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo}
procedure TFrmQueryTop.SpbtnFirstClick(Sender: TObject);
var
TempNode:TdxTreeListNode;
begin
//dxDBGrid1.FullCollapse;
dxDBGrid1.GotoFirst;
Exit;
{///保留做参考//}
if not dxDBGrid1.DataSource.DataSet.Active then Exit;
if dxDBGrid1.DataSource.DataSet.RecordCount <= 0 then Exit;
TempNode:=dxDBGrid1.Items[0]; // Collapse
TempNode.Collapse(True);
while (True) do begin
if TempNode = dxDBGrid1.LastNode then Exit;
TempNode:=TempNode.GetNext;
TempNode.Collapse(True);
end;
end;
{ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
* 全部展开
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo}
procedure TFrmQueryTop.SpbtnLastClick(Sender: TObject);
var
TempNode:TdxTreeListNode;
begin
//dxDBGrid1.FullExpand;
dxDBGrid1.GotoLast(True);
//下保留 做参考
if not dxDBGrid1.DataSource.DataSet.Active then Exit;
if dxDBGrid1.DataSource.DataSet.RecordCount <= 0 then Exit;
TempNode:=dxDBGrid1.Items[0]; // Collapse
TempNode.Expand(True);
while (True) do begin
if TempNode = dxDBGrid1.LastNode then Exit;
TempNode:=TempNode.GetNext;
TempNode.Expand(True);
end;
end;
procedure TFrmQueryTop.SpbtnPrivorClick(Sender: TObject);
begin
if not dxDBGrid1.DataSource.DataSet.Active then Exit;
if dxDBGrid1.DataSource.DataSet.RecordCount <= 0 then Exit;
dxDBGrid1.GotoPrev(False);
end;
procedure TFrmQueryTop.SpbtnNextClick(Sender: TObject);
begin
if not dxDBGrid1.DataSource.DataSet.Active then Exit;
if dxDBGrid1.DataSource.DataSet.RecordCount <= 0 then Exit;
dxDBGrid1.GotoNext(False);
end;
{*******************************************************************************
* 给表格自动合计 只有是数字的就合计 总合计 分组小合计
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
* Acess的 货币型 不能检测到 20030422
*******************************************************************************}
procedure TFrmQueryTop.ActSetSumToGridExecute(Sender: TObject);
var
I:Integer;
TempType:TFieldType;
tempgrp:TdxDBGridSummaryGroup;
tempitem:TdxDBGridSummaryItem;
sFDName:String;
begin
{*****************************************************************************}
tempgrp:=dxDBGrid1.SummaryGroups.Add;
tempgrp.DefaultGroup:=True;
//**********Acess的 货币型 不能检测到***********************************
for I:=0 to dxDBGrid1.ColumnCount-1 do begin //**第一列 不算在里面**
TempType:=dxDBGrid1.Columns[I].Field.DataType;
sFDName:=dxDBGrid1.Columns[I].Field.FieldName;//**注意 FieldName***;
if sFDName = 'FZINTID' then Continue;
if (temptype = ftInteger) or (temptype = ftWord) or
(temptype = ftSmallint) or (temptype = ftFloat) or
(temptype = ftCurrency) or (temptype = ftFloat) then
begin
dxDBGrid1.Columns[I].SummaryFooterType:=cstSum;
dxDBGrid1.Columns[I].SummaryFooterField:=sFDName;
tempitem:=tempgrp.SummaryItems.Add;
tempitem.SummaryType:=cstSum;
tempitem.SummaryField:=sFDName;
tempitem.ColumnName:=dxDBGrid1.Columns[I].Name;
end;
end;
{******************************************************************************}
end;
{ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
* 添加新的数据 对应的查询结果
* 1 首先 看是否允许添加数据 2 看是否有这个权限
* --------------------------------------------
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo}
procedure TFrmQueryTop.SPbtnNewDataClick(Sender: TObject);
begin
inherited;
//
end;
{ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
* 设置用户 查询模块 所有的 模块 减去没有的
* -------------------------------------------
* 在选种 当前 sQueryFZID 的模块
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo}
procedure TFrmQueryTop.N8Click(Sender: TObject);
begin
inherited;
{**从数据库中提取数据**}
PFilterSQLGetDBData();
end;
procedure TFrmQueryTop.MenuItem3Click(Sender: TObject);
begin
inherited;
dxDBGrid1.FullExpand;
end;
procedure TFrmQueryTop.MenuItem4Click(Sender: TObject);
begin
inherited;
dxDBGrid1.FullCollapse;
end;
procedure TFrmQueryTop.dxDBGrid1DblClick(Sender: TObject);
begin
inherited;
N5Click(Sender);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -