其中DateTimeToSql 需要引用gDateFunc单元 ShowWarning对话框需要引用,SynchReadData需要引用MTSCommon单元,SearchFieldNameValue需要引用
//查询:按支付时间查询,按运单号码查询
procedure TBalanceStatWSJ_payForm.RzBitBtnSearchSQLClick(Sender: TObject);
var
StartTime:String;//开始时间
EndTime:string; //结束时间
MSQLSTR:string;//SQL语句
MSQLTerm:string;//拼接语句
MErrorInfoStr:string;//错误语句
i :Integer;
begin
inherited;
MSQLSTR := '';
MSQLTerm:='';
MErrorInfoStr := '查询MPOS支付结果查询出错,请重新查询!!!';
//获取开始时间和结束时间,需要注意的是,转为浮点型是因为数据库有可能是繁体或者是简体的,
//是因为他们的显示格式不一样,但是都是浮点型转换过来的,所以需要先将日期格式转换为datatime类型
//再将datatime转换为浮点型进行运算,调用 gDateFunc单元的两个方法,MergeDataTime ,先合并时间,再用DATETIMETOSQL转成浮点型字符串
//语句一定是字符串才能拼起来的,都是它已经转为546546.121这个格式的了,不是‘2013-02-06 05:55:00’,所以加入where条件是不需要加单引号了
//命名的时候,注意命名规范如MSQLSTR是M开头 ,当我们通过对象点属性时,有时无法提示,如果编译通过说明这是正常的,直接用手敲就是了
//写注释的时候要注意注释中有特殊字符,注释下面第一行的代码被当做注释使用了,所以无法取到值
//获取开始时间
StartTime:= DateTimeToSql(MergeDateTime(RzDateTimePickerDateStart.Date,RzDateTimePickerTimeStart.Time));
//获取结束时间
EndTime:=DateTimeToSql(MergeDateTime(RzDateTimePickerDateEnd.Date,RzDateTimePickerTimeEnd.Time));
//拼接SQL语句
MSQLSTR := MSQLSTR + 'select ti.BusinessTime, ti.BarCode, m.SDShipp, ti.CardNo, ti.TerminalDealID,' + #13
+'ti.UnionpayDealID, ti.TotalPayment, bs.StateName, bu.UntreadReasonName,ti.Commoditys,' + #13
+'ti.Remark from tiInADCPOS_EX_Sign_Result ti ' + #13;
case RzPageControlSearchTerm.ActivePageIndex of
0:
begin
MSQLSTR := MSQLSTR
+'left outer join mManifest m on ti.BarCode = m.Jobno ' + #13
+'left outer join bState bs on ti.State = bs.statecode ' + #13
+'left outer join bUntreadReasonCode bu on ti.UntreadReasoncode = bu.UntreadReasonCode where ' + #13
//添加条件 开始时间和结束时间
+' BusinessTime between ' + startTime + ' and '+EndTime ;
//如果终端ID不为空
if RzEditterminal_id.text <> '' then
begin
MSQLSTR := MSQLSTR + ' and TerminalDealID ='+quotedstr(RzEditterminal_id.text);
end;
// 如果客户不为空
if RzButtonEditSearchSearchSDShipp.text <> '' then
begin
MSQLSTR := MSQLSTR + ' and SDShipp ='+quotedstr(RzButtonEditSearchSearchSDShipp.Text);
end;
// 如果银联ID不为空
if edtUnionpayDealID.Text <> '' then
begin
MSQLSTR := MSQLSTR + ' and UnionpayDealID ='+quotedstr(edtUnionpayDealID.Text);
end;
end;
1:
begin
MSQLSTR := MSQLSTR
+'left outer join mManifest m on ti.BarCode = m.Jobno ' + #13
+'left outer join bState bs on ti.State = bs.statecode ' + #13
+'left outer join bUntreadReasonCode bu on ti.UntreadReasoncode = ' + #13
+'bu.UntreadReasonCode ' + #13;
for i:=0 to RzMemoNO.Lines.Count -1 do
begin
//如果运单号不为空,循环添加运单号进行查询
if trim(RzMemoNO.Lines.Strings[i]) <> '' then
begin
if MSQLTerm = '' then
begin
MSQLTerm :='where ((ti.BarCode = ' + QuotedStr(trim(RzMemoNO.Lines.Strings[i])) + ') ' + #13;
end else begin
MSQLTerm := MSQLTerm + 'or (ti.BarCode = ' + QuotedStr(Trim(RzMemoNO.Lines.Strings[i])) + ')' + #13;
end;
end;
end;
if MSQLTerm = '' then
begin
//MessageBox();舍弃掉,使用gFunction中的新方法
ShowWarning('请输入运单号码!!!');
RzMemoNO.SetFocus;
exit;
end;
MSQLSTR :=MSQLSTR+ MSQLTerm + ')' + #13;
end;
end;
//参数如下:当前句柄,SQL语句,DataSource中的数据集DataSet属性值,错误信息,SynchReadData需要引入单元文件 MTSCommon
if SynchReadData(Handle, MSQLSTR, ClientDataSet, MErrorInfoStr) then
begin
end;
//总结
end;
//总结
(*
只要是带金额的列都需要统计还有统计记录数 ,双击网格,显示所有列的信息
每一列都需要设置类型 ,像时间列的属性设置 ckDateTime显示日期和时间
货币类型的列设置,需要格式化成货币类型
*)
end;
//inherited 在前说明先调用父类的方法,在执行父类之后的方法,反之亦然
procedure TBalanceStatWSJ_payForm.RzButtonEditSearchSearchSDShippButtonClick(
Sender: TObject);
begin
inherited;
//RzButtonEditSearchSearchSDShipp,这个是控件名,'bCust'是表名 通过下载数据库表的数据转换为xml文件,在 E:\SOS\IntelinkGroup\Datas目录
SearchFieldNameValue(Self,
RzButtonEditSearchSearchSDShipp,
'bCust',
True);
end;
procedure TBalanceStatWSJ_payForm.RzButtonEditSearchSearchSDShippExit(
Sender: TObject);
begin
RzButtonEditSearchSearchSDShipp.IsError := not SearchFieldNameValue(Self,
RzButtonEditSearchSearchSDShipp,
'bCust',
False);
inherited;
end;
//inherited 在前说明先调用父类的方法,在执行父类之后的方法,反之亦然
//RzButtonEditSearch控件中的事件,实现选择客户等信息
procedure TBalanceStatWSJ_payForm.RzButtonEditSearchSearchSDShippButtonClick(
Sender: TObject);
begin
inherited;
//RzButtonEditSearchSearchSDShipp,这个是控件名,'bCust'是本地表名,这种控件是可以复制的,包括里面的事件,不过这种控件一般是用改列对应的代号查询,只需要修改本地表名和控件名称就可以了,当然还有个需要修改的,当我们输入错误时要提示,所以得设置EditContent属性的值为该列显示的值,像交易状态的本地表名就是bstate 通过下载数据库表的数据转换为xml文件,在 E:\SOS\IntelinkGroup\Datas目录
SearchFieldNameValue(Self,
RzButtonEditSearchSearchSDShipp,
'bCust',
True);
end;
procedure TBalanceStatWSJ_payForm.RzButtonEditSearchSearchSDShippExit(
Sender: TObject);
begin
RzButtonEditSearchSearchSDShipp.IsError := not SearchFieldNameValue(Self,
RzButtonEditSearchSearchSDShipp,
'bCust',
False);
inherited;
end;
总结
其中DateTimeToSql 需要引用gDateFunc单元 ShowWarning对话框需要引用,SynchReadData需要引用MTSCommon单元,SearchFieldNameValue需要引用
//查询:按支付时间查询,按运单号码查询 procedure TBalanceStatWSJ_payForm.RzBitBtnSearchSQLClick(Sender: TObject); var StartTime:String;//开始时间 EndTime:string; //结束时间 MSQLSTR:string;//SQL语句 MSQLTerm:string;//拼接语句 MErrorInfoStr:string;//错误语句 i :Integer; begin inherited; MSQLSTR := ''; MSQLTerm:=''; MErrorInfoStr := '查询MPOS支付结果查询出错,请重新查询!!!'; //获取开始时间和结束时间,需要注意的是,转为浮点型是因为数据库有可能是繁体或者是简体的, //是因为他们的显示格式不一样,但是都是浮点型转换过来的,所以需要先将日期格式转换为datatime类型 //再将datatime转换为浮点型进行运算,调用 gDateFunc单元的两个方法,MergeDataTime ,先合并时间,再用DATETIMETOSQL转成浮点型字符串 //语句一定是字符串才能拼起来的,都是它已经转为546546.121这个格式的了,不是‘2013-02-06 05:55:00’,所以加入where条件是不需要加单引号了 //命名的时候,注意命名规范如MSQLSTR是M开头 ,当我们通过对象点属性时,有时无法提示,如果编译通过说明这是正常的,直接用手敲就是了 //写注释的时候要注意注释中有特殊字符,注释下面第一行的代码被当做注释使用了,所以无法取到值 //获取开始时间 StartTime:= DateTimeToSql(MergeDateTime(RzDateTimePickerDateStart.Date,RzDateTimePickerTimeStart.Time)); //获取结束时间 EndTime:=DateTimeToSql(MergeDateTime(RzDateTimePickerDateEnd.Date,RzDateTimePickerTimeEnd.Time)); //拼接SQL语句 MSQLSTR := MSQLSTR + 'select ti.BusinessTime, ti.BarCode, m.SDShipp, ti.CardNo, ti.TerminalDealID,' + #13 +'ti.UnionpayDealID, ti.TotalPayment, bs.StateName, bu.UntreadReasonName,ti.Commoditys,' + #13 +'ti.Remark from tiInADCPOS_EX_Sign_Result ti ' + #13; case RzPageControlSearchTerm.ActivePageIndex of 0: begin MSQLSTR := MSQLSTR +'left outer join mManifest m on ti.BarCode = m.Jobno ' + #13 +'left outer join bState bs on ti.State = bs.statecode ' + #13 +'left outer join bUntreadReasonCode bu on ti.UntreadReasoncode = bu.UntreadReasonCode where ' + #13 //添加条件 开始时间和结束时间 +' BusinessTime between ' + startTime + ' and '+EndTime ; //如果终端ID不为空 if RzEditterminal_id.text <> '' then begin MSQLSTR := MSQLSTR + ' and TerminalDealID ='+quotedstr(RzEditterminal_id.text); end; // 如果客户不为空 if RzButtonEditSearchSearchSDShipp.text <> '' then begin MSQLSTR := MSQLSTR + ' and SDShipp ='+quotedstr(RzButtonEditSearchSearchSDShipp.Text); end; // 如果银联ID不为空 if edtUnionpayDealID.Text <> '' then begin MSQLSTR := MSQLSTR + ' and UnionpayDealID ='+quotedstr(edtUnionpayDealID.Text); end; end; 1: begin MSQLSTR := MSQLSTR +'left outer join mManifest m on ti.BarCode = m.Jobno ' + #13 +'left outer join bState bs on ti.State = bs.statecode ' + #13 +'left outer join bUntreadReasonCode bu on ti.UntreadReasoncode = ' + #13 +'bu.UntreadReasonCode ' + #13; for i:=0 to RzMemoNO.Lines.Count -1 do begin //如果运单号不为空,循环添加运单号进行查询 if trim(RzMemoNO.Lines.Strings[i]) <> '' then begin if MSQLTerm = '' then begin MSQLTerm :='where ((ti.BarCode = ' + QuotedStr(trim(RzMemoNO.Lines.Strings[i])) + ') ' + #13; end else begin MSQLTerm := MSQLTerm + 'or (ti.BarCode = ' + QuotedStr(Trim(RzMemoNO.Lines.Strings[i])) + ')' + #13; end; end; end; if MSQLTerm = '' then begin //MessageBox();舍弃掉,使用gFunction中的新方法 ShowWarning('请输入运单号码!!!'); RzMemoNO.SetFocus; exit; end; MSQLSTR :=MSQLSTR+ MSQLTerm + ')' + #13; end; end; //参数如下:当前句柄,SQL语句,DataSource中的数据集DataSet属性值,错误信息,SynchReadData需要引入单元文件 MTSCommon if SynchReadData(Handle, MSQLSTR, ClientDataSet, MErrorInfoStr) then begin end; //总结 end; //总结 (* 只要是带金额的列都需要统计还有统计记录数 ,双击网格,显示所有列的信息 每一列都需要设置类型 ,像时间列的属性设置 ckDateTime显示日期和时间 货币类型的列设置,需要格式化成货币类型 *) end; //inherited 在前说明先调用父类的方法,在执行父类之后的方法,反之亦然 procedure TBalanceStatWSJ_payForm.RzButtonEditSearchSearchSDShippButtonClick( Sender: TObject); begin inherited; //RzButtonEditSearchSearchSDShipp,这个是控件名,'bCust'是表名 通过下载数据库表的数据转换为xml文件,在 E:\SOS\IntelinkGroup\Datas目录 SearchFieldNameValue(Self, RzButtonEditSearchSearchSDShipp, 'bCust', True); end; procedure TBalanceStatWSJ_payForm.RzButtonEditSearchSearchSDShippExit( Sender: TObject); begin RzButtonEditSearchSearchSDShipp.IsError := not SearchFieldNameValue(Self, RzButtonEditSearchSearchSDShipp, 'bCust', False); inherited; end;
//inherited 在前说明先调用父类的方法,在执行父类之后的方法,反之亦然
//RzButtonEditSearch控件中的事件,实现选择客户等信息
procedure TBalanceStatWSJ_payForm.RzButtonEditSearchSearchSDShippButtonClick(
Sender: TObject);
begin
inherited;
//RzButtonEditSearchSearchSDShipp,这个是控件名,'bCust'是本地表名,这种控件是可以复制的,包括里面的事件,不过这种控件一般是用改列对应的代号查询,只需要修改本地表名和控件名称就可以了,当然还有个需要修改的,当我们输入错误时要提示,所以得设置EditContent属性的值为该列显示的值,像交易状态的本地表名就是bstate 通过下载数据库表的数据转换为xml文件,在 E:\SOS\IntelinkGroup\Datas目录
SearchFieldNameValue(Self,
RzButtonEditSearchSearchSDShipp,
'bCust',
True);
end;
procedure TBalanceStatWSJ_payForm.RzButtonEditSearchSearchSDShippExit(
Sender: TObject);
begin
RzButtonEditSearchSearchSDShipp.IsError := not SearchFieldNameValue(Self,
RzButtonEditSearchSearchSDShipp,
'bCust',
False);
inherited;
end;
1、 当我们需要禁止CSGrid自动通过数据集修改数据时,将关联的ADOQuery中的LockType属性改为 ltBatchoptimistic,加一个确定按钮,确定提交修改数据
2、 DB类型的控件必须设置数据集DataSource属性,因为它是根据数据集进行呈现数据的
3、 如果显示在表格中的数据一般是一个ADOQuery对应一个DataSource
4、当我们点击某列需要显示下拉框是 点击该列,将Properties设置ComboBox
5、当需要用到单元格的点击事件或双击事件是,需要先将单元格设置为不可编辑,将两个属性设置为false
一个是OptionsBehavior下的ImmediateEditor设置为false
一个是OptionsData下的Editing设置为false
6、当我们在代码中需要激活单元格编辑时,CXGrid 下有两个属性中的cxGrid1DBTableView进行设置,设置方法如下
//单元格设置为可编辑
cxGrid1DBTableView1.OptionsBehavior.ImmediateEditor:=True
cxGrid1DBTableView1.OptionsData.Editing:=true
代码
//总结
只要是带金额的列都需要统计还有统计记录数
每一列都需要设置类型 ,像时间列的属性设置
货币类型的列设置,需要格式化成货币类型
先设置网格中的列的属性,fieldname与数据库字段名相同

每一列都需要设置类型 ,像时间列的属性设置 ckDateTime显示日期和时间

货币类型的列设置,需要格式化成货币类型

只要是带金额的列都需要统计还有统计记录数 ,双击网格,显示所有列的信息


最后
