起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 139|回复: 8

关于列表出现空行的问题**

[复制链接]
发表于 2008-3-13 15:45:42 | 显示全部楼层 |阅读模式
将QUERY查出的数据放入到一个自定义数据集中;再将自定义数据通过datagrid展现。但是总是有两个空行出现,请帮忙看看代码是哪里出的问题?空行现象如图
query代码:
Query.Close;
    Query.CommandText:='';
    sql:=
     'select distinct H.Day,H.PZ_ID, V.sumjje,Z.ZY,f.finished from'
     +' (select Day,PZ_ID from voucher_head'
     +' where pz_id in'
     +' (select pz_id from voucher where kmdm in'
     +' (select subject_id from subject_list '
     +' where payment=''1'''+GetSubject_ID(DataSetSubject)
     +  IsDateLegitimacy(GetStatDate(DataSetDateSelect),GetEndDate(DataSetDateSelect))
     +' ) H '
     +' left join '
     +' (select PZ_ID,isnull(Sum(JJE),0) as sumjje '
     +' from voucher group by pz_id) V '
     +' on V.PZ_ID=H.PZ_ID '
     +' left join'
     +' (select ZY ,PZ_ID from voucher where flh=''01'') Z'
     +' on V.PZ_ID=Z.PZ_ID';
×××××××××××××××××××××××××如果注释掉以下代码就没空行了,但是在SQLServer查询分析器中执行全部sql也没有空行出现
     if CheckBoxShowUnDecompose.Checked then
       sql := sql + ' right join (select  distinct PZ_ID ,0 as finished'
              +' from voucher where ( finished=0 or finished is null )'
              +' and pz_id not in (select distinct PZ_ID from voucher where finished=''1'' '
              +' and kmdm in (select subject_id from subject_list  where Payment=''1'') )'
              +' and kmdm in (select subject_id from subject_list  where Payment=''1'')) F'
              +' ON H.PZ_ID=F.PZ_ID'
     else
       sql := sql + ' right join (select distinct PZ_ID ,1 as finished'
              +' from voucher where finished=''1'''
              +' and kmdm in (select subject_id from subject_list  where Payment=''1'')'
              +' union  select  distinct PZ_ID ,0 as finished from voucher where ( finished=0 or finished is null )'
              +' and pz_id not in (select distinct PZ_ID from voucher where finished=''1'' '
              +' and kmdm in (select subject_id from subject_list  where Payment=''1'') )'
              +' and kmdm in (select subject_id from subject_list  where Payment=''1'')) F'
              +' ON H.PZ_ID=F.PZ_ID';


//将QUERY中的数据导入到自定义数据集中的代码如下:
procedure TMAINFORM.SetDataSetValue(DataSet:TDataSet;Query:TQuery);
var lFieldName:String;
    I:Integer;
begin
//将query的数据倒入到数据集里
  DataSet.Open;
  DataSet.EmptyDataSet;
  Query.Open;
  Query.First;
  while not Query.Eof do
  begin
  DataSet.Append;
   for I:= 0 to Query.FieldCount-1 do
   begin
     lFieldName := Query.Fields[I].FieldName;
       DataSet.FieldByName(lFieldName).assign(Query.FieldByName(lFieldName)) ;
     //DataSet.FieldByName(lFieldName).assign:=
     //Query.FieldByName(lFieldName).assign ;
   end;
   DataSet.Post;
   Query.Next;
  end;
  DataSet.ApplyUpdates;
end;

konghang.jpg

158.43 KB, 下载次数: 101

回复

使用道具 举报

 楼主| 发表于 2008-3-13 16:05:51 | 显示全部楼层
D
回复 支持 反对

使用道具 举报

发表于 2008-3-13 16:08:33 | 显示全部楼层
是每次都是有空行么?空行的数量是不是不确定?

从代码上来看,是没有问题的,估计就是sql返回的数据有问题引起的。
你可以把Query数据集用datagrid表现一下,看是否有空行!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-13 16:13:18 | 显示全部楼层
空行总是两行
回复 支持 反对

使用道具 举报

发表于 2008-3-13 16:17:22 | 显示全部楼层
你可以把Query数据集用datagrid表现一下,看是否有空行!
按这个检查下看看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-13 16:28:30 | 显示全部楼层
同样有两个空行
回复 支持 反对

使用道具 举报

发表于 2008-3-13 16:37:06 | 显示全部楼层
那就请检查你的sql语句了
你看左联右联用的是否正确
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-13 16:39:27 | 显示全部楼层
SQL在SQLServer中查询是没问题的
回复 支持 反对

使用道具 举报

发表于 2008-3-13 16:58:25 | 显示全部楼层
那你把TQuery.CommandText得到,然后放到sqlserver中执行一下,看是否正确
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-8 14:41 , Processed in 0.047394 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表