发新话题
打印

[已解决] cqperl脚本执行报错,请帮忙看看,谢谢!( 此文章被查看:288次,被回复:2篇!! )

本主题由 yunshan 于 2008-6-19 12:21 关闭

cqperl脚本执行报错,请帮忙看看,谢谢!

脚本实现简单的从cq defect表取出记录数据打印出来的功能
脚本内容如下:
#!D:\Rational\cqperl
use CQPerlExt;

#Start a Rational ClearQuest session
$sessionObj = CQSession::Build();
# 连接数据库
$sessionObj->UserLogon(admin,"","User","Sch");

#查询
# BuildQuery()中的参数是entitydef_name ,指一个record type的名字,即设定查询的记录类别
$qryDef = $sessionObj->BuildQuery("Defect");
$qryDef->BuildField("ucm_project");
$qryDef->BuildField("id");
$qryDef->BuildField("Headline");
$qryDef->BuildField("Owner");
#$qryDef->BuildField("reason");
$qryDef->BuildField("State");
$qryDef->BuildField("Submit_Date");

print "1\$qryDef is $qryDef\n";
# 结果集
$resultsetObj = $sessionObj->BuildResultSet($qryDef);
$resultsetObj->EnableRecordCount();
# 执行查询结果
$resultsetObj->Execute();
print "2\$qryDef is $qryDef\n";
print "\$resultsetObj is $resultsetObj\n";
       
while ($resultsetObj->GetRecordCount()>0 ){
        $resultsetObj->MoveNext();
        my $id = $resultsetObj->GetColumnValue(1);
        my $defectEntity = $sessionObj->GetEntity("Defect",$id);
        my $headline = $defectEntity->GetFieldValue("Headline")->GetValue();
        my $owner = $defectEntity->GetFieldValue("Owner")->GetValue();
        my $state= $defectEntity->GetFieldValue("State")->GetValue();
        my $submit_date= $defectEntity->GetFieldValue("Submit_Date")->GetValue();
        }
print "\$id is $id\n";
print "\$defectEntity is $defectEntity\n";
print "\$headline is $headline\n";
print "\$owner is $owner\n";
print "\$state is $state\n";
print "\$submit_date is $submit_date\n";
               
CQSession::Unbuild($sessionObj);

执行脚本cqperl excel.pl后,报错如下:
1$qryDef is CQQueryDef=HASH(0x190b1ac)
2$qryDef is CQQueryDef=HASH(0x190b1ac)
$resultsetObj is CQResultSet=HASH(0x190b314)
记录标识“Proj”未以已知数据库的名称开始。 at D:/Rational/Common/lib/perl5/5.8.6
/MSWin32-x86-multi-thread/CQPerlExt.pm line 43.

请大家帮忙看看问题在哪里哦,我刚学cq的api,好多不懂的,谢谢哦!

[ 本帖最后由 allm 于 2008-6-17 17:25 编辑 ]


问题已经解决 [打开主题]
本主题的最佳答案为 [ 3 楼].



© 本文为 allmSCMLife 共同所有,未经同意,请勿转载 ©如该文侵犯了您的版权,请联系管理员

TOP

while ($resultsetObj->GetRecordCount()>0 ){
这个while循环的条件可能会造成死循环,因为只要结果集中的记录数>0,那么就会一直循环下去。
可以这样改:
my $status = $resultsetObj->MoveNext();
while ($status == 1) {
...
$status = $resultsetObj->MoveNext();
}



© 本文为 yunshanSCMLife 共同所有,未经同意,请勿转载 ©如该文侵犯了您的版权,请联系管理员

TOP

回复 沙发 的帖子

谢谢yunshan的回复。
while确实是死循环了。
我把它改成
$count = $resultsetObj->GetRecordCount();
while($count>0){
      $resultsetObj->MoveNext();
     。。。。
$count--;
}
脚本还有一个地方错了,就是$qryDef->BuildField(id)必须放$qryDef = $sessionObj->BuildQuery("Defect");后面的第一行,这样后面的
my $id = $resultsetObj->GetColumnValue(1);
my $defectEntity = $sessionObj->GetEntity("Defect",$id);
才正确。否则脚本执行报错。


最佳答案
该回答被楼主/管理员列为正解!



© 本文为 allmSCMLife 共同所有,未经同意,请勿转载 ©如该文侵犯了您的版权,请联系管理员

TOP

发新话题