求助_耳环大侠进来下_产供销
学习.交流
专业源于专注
www. onlyit. cn   
学习交流 文件下载 手册资料 交流QQ群

    

 9  1/1   1  
作者
内容
cathy  [个人空间]


注册  2007-07-18
发贴数  222
精华数  0
原创贴  0
来自  
状态  正常

级别  会员
#1»发布于2021-03-20 21:28

请教一个小问题啊 
 
在csp报表里,有没办法彻底清空当前检索出来的数据,即当前csp报表的检索结果集的内存空间。 
 
因为,我尝试将MG清空后,再给MG设定行数,输入些数据,再添加xx行,发现前一次检索的结果数据出现在新加的行上了。 
即前面的清空MG操作不是真的清空


        


dragonzsp  [个人空间]
QQ名  十二个耳环(187199580)


注册  2011-03-25
发贴数  183
精华数  0
原创贴  4
来自  温州
状态  正常

级别  贵宾
#2»发布于2021-03-21 07:33

csp报表表格的赋值机制是系统自动根据你当前内存的数据对象内容,根据列名自动赋值的,所以你想让当前MG表的数据清空,只能对检索结果集对象操作: 
1方法:创建一条返回结果集为空的sql语句,db_run下,比如sql="select * from emp where 1=2" 
2方法,切换当前数据集区域,db_select_area,切换到空的数据集区域去 
 
执行前自己测试下,2种方法返回的结果集的列名是否要和MG的列名保持一致


        




官方认证第三方服务团队   QQ:187199580
收费教程地址链接:http://www.onlyit.cn/topic_list_detail?subject_id=7&topic_id=102140&topic_page_id=1
手机收费版本地址链接:http://www.onlyit.cn/topic_list_detail?subject_id=3&topic_id=103479&topic_page_id=1

cathy  [个人空间]


注册  2007-07-18
发贴数  222
精华数  0
原创贴  0
来自  
状态  正常

级别  会员
#3»发布于2021-03-21 13:19

第一个方法是无法清空数据的。 
v测试脚本如下 
 
 
int ad00(); 

  //执行sql方式进行当前脚本报表的数据清空 
  grid_set_opt("MG", "editing.on"); 
  int a, b; 
  string sql; 
  sql = "select res_id,res_name from res where 1=2"; 
  db_run(sql); 
  grid_show_db("MG"); 
  //当前无数据,似乎是隐藏了,执行下面的加行数,则前面的数据出现了。 
  //那就进行另外一种清空方式 
  b = grid_row_num("MG"); 
  for (a = 1; a <= b; a++) 
  { 
    grid_clear_row("MG", a); 
  } 
  //再删除它 
  for (a = 1; a <= b; a++) 
  { 
    if (b > 1 && a > 1) 
    { 
      grid_del_row("MG", a); 
      a--; 
      b--; 
    } 
  } 
  return 1; 

 
int ad01(); 

  grid_add_row_num("MG", 100); 
  return 1; 

 
int main() 

  call_str("view_csp_rep.ds_001"); 
  gui_create_speedbutton("Panel_Func", "ad0", 400, 2, 45, 25, "清空", "call_csp.test.ad00"); 
  gui_create_speedbutton("Panel_Func", "ad1", 460, 2, 45, 25, "加行", "call_csp.test.ad01"); 
  return 1; 
};



        


dragonzsp  [个人空间]
QQ名  十二个耳环(187199580)


注册  2011-03-25
发贴数  183
精华数  0
原创贴  4
来自  温州
状态  正常

级别  贵宾
#4»发布于2021-03-21 15:49

我以为你说的是报表的int func_query()函数里面把直接把结果集清空,让MG不显示呢..... 
你这种是MG表已经赋值情况下的表格行的增减,这种情况暂时好像只能遍历行做行数据清除,老孟的MG相关函数的设置行数grid_set_row_num如果是原始行数大于设定行数,函数内部只是做了一个最大行标记数据的更改,并没有对MG本身的数据对象的行对象集做清除工作,而grid_add_row_num内部也只是做了2部,1是对最大行标记数据的更改,2是对MG本身的数据对象遍历,如果数据对象的行对象集行数少于最大行数,就增加缺少的空白行数据到行对象集中.所以会造成冗余旧数据的显示.


        




官方认证第三方服务团队   QQ:187199580
收费教程地址链接:http://www.onlyit.cn/topic_list_detail?subject_id=7&topic_id=102140&topic_page_id=1
手机收费版本地址链接:http://www.onlyit.cn/topic_list_detail?subject_id=3&topic_id=103479&topic_page_id=1

007  [个人空间]


注册  2021-01-14
发贴数  31
精华数  0
原创贴  0
来自  
状态  正常

级别  会员
#5»发布于2021-03-21 21:06

三楼,有遍历清过数据了。 
 
b = grid_row_num("MG");  
  for (a = 1; a <= b; a++)  
  {  
    grid_clear_row("MG", a);  
  }  
  //再删除它  
  for (a = 1; a <= b; a++)  
  {  
    if (b > 1 && a > 1)  
    {  
      grid_del_row("MG", a);  
      a--;  
      b--;  
    }  
 
这代码测试确实清不干净,何解。


        于 2021-03-21 21:06 被 007 修改


dragonzsp  [个人空间]
QQ名  十二个耳环(187199580)


注册  2011-03-25
发贴数  183
精华数  0
原创贴  4
来自  温州
状态  正常

级别  贵宾
#6»发布于2021-03-22 07:25

 sql = "select res_id,res_name from res where 1=2";  
  db_run(sql);  
  grid_show_db("MG");  
这段要删除,因为这段执行后,相当于把MG的行数设定成1行了; 
int ad00();  
{  
  //执行sql方式进行当前脚本报表的数据清空  
  grid_set_opt("MG", "editing.on");  
  int a, b;  
  string sql;  
  //那就进行另外一种清空方式  
  b = grid_row_num("MG");  
  for (a = 1; a < b; a++)  
  {  
    grid_clear_row("MG", a);  
  }  
  grid_set_row_num("MG",2); 
  return 1;  
}






官方认证第三方服务团队   QQ:187199580
收费教程地址链接:http://www.onlyit.cn/topic_list_detail?subject_id=7&topic_id=102140&topic_page_id=1
手机收费版本地址链接:http://www.onlyit.cn/topic_list_detail?subject_id=3&topic_id=103479&topic_page_id=1

justin  [个人空间]


注册  2021-02-24
发贴数  17
精华数  0
原创贴  0
来自  
状态  正常

级别  会员
#7»发布于2021-03-22 16:42

数量多的时候,这个遍历清除再删除,会导致程序卡死。 
 
有没办法一个函数直接 清空指定 GRID 的内存区域数据(不是指 db_select_area 里的 30个区域)




xwb514  [个人空间]
QQ名  福建流浪(340298101)


注册  2010-03-19
发贴数  575
精华贴  7
原创贴  7
来自  
状态  正常

级别  会员
#8»发布于2021-03-22 16:58

回楼上,应当可以把这个GRID给删除再建一个GRID,也就是说把创建GRID的过程写个函数,当删除后再调用这个函数生成新的GRID,我想小服所要的功能也可以实现。






官方认证第三方服务团队  徐文标(福建-流浪) QQ:340298101 V&P :177-5046-4787
服务介绍:http://www.onlyit.cn/onlyit_service.html

dragonzsp  [个人空间]
QQ名  十二个耳环(187199580)


注册  2011-03-25
发贴数  183
精华数  0
原创贴  4
来自  温州
状态  正常

级别  贵宾
#9»发布于2021-03-22 17:51

int ad00();   
{   
  //执行sql方式进行当前脚本报表的数据清空   
  grid_set_opt("MG", "editing.on");   
  grid_set_row_num("MG",2);  
  grid_clear_row("MG", 1);   
  return 1;   

int ad01();  
{  
  int count,i; 
  count= grid_row_num("MG");  
  grid_add_row_num("MG", 100);  
  for(i=count;i<count+100;i++){ 
  grid_clear_row("MG", i);   
  } 
  return 1;  
}  
 
转换下思路呗,清空可以在增加行的逻辑代码中,这样就不会卡了






官方认证第三方服务团队   QQ:187199580
收费教程地址链接:http://www.onlyit.cn/topic_list_detail?subject_id=7&topic_id=102140&topic_page_id=1
手机收费版本地址链接:http://www.onlyit.cn/topic_list_detail?subject_id=3&topic_id=103479&topic_page_id=1


 9  1/1   1  

登录后方可发贴


[ 电话: 0571-85462761 王先生 QQ: 124520435 加入软件QQ群 - 杭州 - 浙ICP备19051128号-1 网安 33010402003225 ]