请教 ClientDataSet--------> AppendData 的奇怪问题

kv2002 2006-04-08 02:19:24
两个TClientDataSet控件
Cds_All,Cds_get : TClientDataSet;
Cds_get的RemoteServer及ProviderName都设置正确
Cds_All的RemoteServer,ProviderName没有设置.

实现目的:
Cds_get调用存储过程获得记录(需要循环去取数据)
Cds_All将Cds_get每次取出的数据Append.

function TForm1.GetAllData: Boolean;
var
i : Integer;
iData : OleVariant;
begin
cds_All.Data := null;
for i:=0 to List.count-1 do
begin
if GetData(List.String[i],iData) then
Cds_All.AppendData(iData,true);
end;
end;
end;

function TForm1.GetData(id:String;var idata : OleVariant): Boolean;
var
sqlstr : String;
i : Integer;
begin
result := false;
try
with Cds_get do
begin
Close;
Params.Clear ;
CommandText := '{call Get_Bill_Data(?)}' ;
Params.CreateParam(ftInteger , 'pid', ptInput).AsString:= id;
Open;
if RecordCount > 0 then
begin
idata := Data;
result := true;
end;
end;
except
Exit;
end;
end;

结果:
发现Cds_get取出的数据 append 到Cds_All中后有个字段值变化了,


F1 F2 F3
Cds_get AA 6 CC
Cds_All AA 31052 CC
...全文
616 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kv2002 2006-04-11
  • 打赏
  • 举报
回复
自己搞定.放分
kv2002 2006-04-10
  • 打赏
  • 举报
回复
1.AlarmXX := ' a.AlarmContentName ';
2.AlarmXX := ' ''基站阻塞'' ';
AlarmXX_sql:=AlarmXX||' as AlarmContentName';
cur_sql := sel_sql||AlarmXX_sql||where_sql||ord_sql;
因为某种条件下我只需返回表中AlarmContentName的真实值即可,
有写条件下这个AlarmContentName值要指定

kv2002 2006-04-10
  • 打赏
  • 举报
回复
存储过程应该没问题的啊.因为cds_get取出的数据是正确的!
存储过程如下:

create or replace procedure Get_Bill_Data(
sSendName in varchar2,--派修员
pbatchid in integer,
P_cursor out pop_refcursor.refCursor )
is
sel_sql varchar2(1000);--查询字段
ord_sql varchar2(5000);--条件sql
where_sql varchar2(1000);
AlarmXX varchar2(200);--告警现象
AlarmXX_sql varchar2(500);
cur_sql varchar2(30000);--游标执行sql
flag number;
AlarmRule number;
pcsid number;
begin
--根据批号获取派单类型及基站ID
select case when alarmstyle is null then -1 else alarmstyle end,
case when csid is null then -1 else csid end into AlarmRule,pcsid from Alarm_Master_Online where batchid = pbatchid;

where_sql:=' from Alarm_Listdetail_View a ,installinfo2 b,pop_cs c,pop_antenna d,Alarm_Content_List e '||
' where a.alarmcontentcode= e.alarmcontentcode and a.csid = c.id and c.Antenna_Id = d.id and a.csid = b.bsid and a.csid = '||pcsid;
sel_sql := 'select a.CSID,a.ALARMID,b.JQID,a.SUBSTATION,a.CSTYPENAME,'||
'a.AlarmKindName,a.CSNAME,a.LEVELFLAG as CSLEVEL,'||--障碍类型,基站名称,基站等级
''''||sSendName||''''||' as SendPerson,'||--派修员
'a.CS_ADDRESS,ZLNUM,HLNUM,'||/*新业务,*/
''' 编号: '''||'||b.JJX1||'||''' 主干: '''||'||b.J1_ZGDLH||'||'''-'''||'||b.XX11||'||
''' 配线: '''||'||b.J1_PXDLH||'||' '||'b.J1_PXXX as J1INFO,'||--交1信息
''' 编号: '''||'||b.JJX2||'||''' 主干: '''||'||b.J2_ZGDLH||'||'''-'''||'||b.XX12||'||
''' 配线: '''||'||b.J2_PXDLH||'||' '||'b.J2_PXXX as J2INFO,'|| --交2信息
'b.J1_DZ,'||''' 编号: '''||'||b.FXH1||'||''' 线对: '''||'||b.XX21 as FXHINFO,'||--分线盒信息
'b.FXX1DZ,to_char(a.CreateTime,''YYYY-MM-DD HH24:MI:SS'') as CreateTime,'||
'to_char(sysdate,''YYYY-MM-DD HH24:MI:SS'') as SendTime,'||
'd.name as Antenna,e.Removelimit, '' '' as POWERNAME, ';--天线类型

case when AlarmRule = 1 then -- 单纯线路告警
AlarmXX := ' a.AlarmContentName ';
AlarmXX_sql:=AlarmXX||' as AlarmContentName';
ord_sql := ' and b.SEQNO in(select alarmcontentcode-20+1 from Alarm_Detail_Online a where a.alarmcontentcode in(20,21,23,22)and csid ='||pcsid||')';
cur_sql := sel_sql||AlarmXX_sql||where_sql||ord_sql;
when AlarmRule = 3 then--基站阻塞无线路告警
AlarmXX := ' ''基站阻塞'' ';
AlarmXX_sql:=AlarmXX||' as AlarmContentName';
ord_sql:= ' and b.SEQNO = 1 and a.ifpresider = 1';
cur_sql := sel_sql||AlarmXX_sql||where_sql||ord_sql;
when AlarmRule = 2 then --基站断电
AlarmXX := ' a.AlarmContentName ';
AlarmXX_sql:=AlarmXX||' as AlarmContentName';
ord_sql := ' and b.SEQNO = 1 and a.alarmcontentcode = 26';
cur_sql := sel_sql||AlarmXX_sql||where_sql||ord_sql;
else
AlarmXX := ' a.AlarmContentName ';
AlarmXX_sql:=AlarmXX||' as AlarmContentName';
ord_sql := ' and b.SEQNO = 1 and a.ifpresider = 1';
cur_sql := sel_sql||AlarmXX_sql||where_sql||ord_sql;

end case;
open P_cursor for cur_sql;
end Get_Bill_Data;
kv2002 2006-04-09
  • 打赏
  • 举报
回复
期待大虾给指点!!
cncharles 2006-04-09
  • 打赏
  • 举报
回复
会不会是你的存储过程中写错了呢?把存储过程中的代码贴出来看看
kv2002 2006-04-08
  • 打赏
  • 举报
回复
自己顶!!!

2,498

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧