起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 398|回复: 21

【搞定】使用表格文档时出现的问题**

[复制链接]
发表于 2007-10-23 15:01:36 | 显示全部楼层 |阅读模式
代码如下
  with QueryPole do
  begin
    close;
    commandText := 'select count(*) DGZSL,sStuff,sum(sStuff) DGCZSL from pd_d_hvolpole where sFeederName1='''+sLineSid+''' group by sStuff';
    try
      open;
      //first;
      while not eof do
      begin
        tempSQLStr := 'select sPoleTextrue from PD_P_POLETEXTURE where sId='''+FieldByName('sStuff').AsString+'''';
        Dialogs.ShowMessage(FieldByName('DGZSL').AsString);
        Dialogs.ShowMessage(FieldByName('sStuff').AsString);
        if ReturnSQLValue(Query1,tempSQLStr,'sPoleTextrue') <> '' then
        begin
          DGCZ := ReturnSQLValue(Query1,tempSQLStr,'sPoleTextrue');
        end
        else
        begin
          DGCZ := 'δ&#1450;';
        end;
        Dialogs.ShowMessage(FieldByName('DGCZSL').AsString);
        DGCZSL := DGCZSL+StoI(FieldByName('DGCZSL').AsString);
        DGZSL := StoI(FieldByName('DGZSL').AsString);
        with TSQLDataSet(DataSetBroker1.DataSet) do
        begin
          if Active then close;
          open;
          edit;
          FieldByName('DGCZ').AsString := DGCZ;
          FieldByName('DGCZSL').AsInteger := DGCZSL;
          FieldByName('DGZSL').AsInteger := DGZSL;
          post;
        end;
        next;
      end
    finally
      close;
    end;
  end;
想法是动态的修改数据集中的字段值,最后在表格文档中显示出来。
问题图片如图
问题时:为什么每次数据只显示在第一行,而不修改次行显示。
我在程序中打开了数据集,是不是还要将游标next到下一条记录上。请求给点代码提示

1.jpg

6.93 KB, 下载次数: 186

回复

使用道具 举报

发表于 2007-10-23 15:38:47 | 显示全部楼层
数据集一打开如果没有任何代码操作,那么光标肯定会停在第一条,至于哪个是第一条,就看数据集是否设置排序,如果没有就按数据库得默认顺序出来了。

如果想打开停到某一条,一个是用数据集.locate方法,如果就是取出来得数据第二条,那直接在窗体得OnShow事件上,执行数据集.next,就可以了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-23 16:07:38 | 显示全部楼层
好,多谢指点!
回复 支持 反对

使用道具 举报

发表于 2007-10-23 16:54:18 | 显示全部楼层
还有问题吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-24 10:47:25 | 显示全部楼层
还是有问题
代码如下:
  with QueryPole do
  begin
    close;
    commandText := 'select count(*) DGZSL,sStuff from pd_d_hvolpole where sFeederName1='''+sLineSid+''' group by sStuff';
    try
      open;
      //first;
      while not eof do
      begin
        tempSQLStr := 'select sPoleTextrue from PD_P_POLETEXTURE where sId='''+FieldByName('sStuff').AsString+'''';
        //Dialogs.ShowMessage(FieldByName('DGZSL').AsString);
        //Dialogs.ShowMessage(FieldByName('sStuff').AsString);
        if ReturnSQLValue(Query1,tempSQLStr,'sPoleTextrue') <> '' then
        begin
          DGCZ := ReturnSQLValue(Query1,tempSQLStr,'sPoleTextrue');
        end
        else
        begin
          DGCZ := '未知';
        end;
        DGCZSL := StoI(FieldByName('DGZSL').AsString);
        DGZSL := DGZSL+StoI(FieldByName('DGZSL').AsString);
        with TSQLDataSet(DataSetBroker1.DataSet) do
        begin
          if Active then close;
          try
            open;
            edit;
            FieldByName('DGCZ').Value := DGCZ;
            FieldByName('DGCZSL').Value := DGCZSL;
            FieldByName('DGZSL').Value := DGZSL;
          finally
            post;
            next;
            ApplyUpdates;
          end;
        end;
        next;
      end
    finally
      close;
    end;
  end;
图片如下:
我在程序中打开数据集,post了edit后,已经显式next了,为什么结果在表格文档显示还只修改了表格的第一行,应该有5行数据才正确,程序循环了5次都修改了表格的第一行,麻烦您帮看看代码,哪里出了问题,谢谢@

1.jpg

14.3 KB, 下载次数: 178

回复 支持 反对

使用道具 举报

发表于 2007-10-24 11:25:45 | 显示全部楼层
刷新下docview试试
DocViewSL.Doc.Close;
DocViewSL.OpenView(TDocMode.dmEdit, DocViewSL);
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-24 13:05:49 | 显示全部楼层
我试了下 没有解决问题 可能是我方法不对
请问一下 在哪里执行刷新这个文档 是每次post之后吗
这种方式刷新文档和DocViewSL.RefreshDoc(true)是不是等效的?
还有 为什么我在运行状态每次关闭都提示我文档已经改变,询问是否保存,怎么样设置能略去这个提示信息。谢谢!
回复 支持 反对

使用道具 举报

发表于 2007-10-24 13:36:35 | 显示全部楼层
你刷新你那个文档链接的那个数据集。
还有 为什么我在运行状态每次关闭都提示我文档已经改变,询问是否保存,怎么样设置能略去这个提示信息。谢谢!
需要提交数据才不提示,ApplyUpdates
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-24 14:29:25 | 显示全部楼层
按照您的方法试了 就是在文档链接的那个数据集处刷新的文档 可问题还是那样 每次循环得到的值都显示在表格文档的第一行了 还有我已经写ApplyUpdates 关闭文档时还是有那个提示 请问可不可以在代码是实现关闭这一提示并且选择不保存文档
回复 支持 反对

使用道具 举报

发表于 2007-10-24 15:09:52 | 显示全部楼层
1、关闭文档时还是有那个提示
把原始的提示信息帖出来看看。

2、为什么结果在表格文档显示还只修改了表格的第一行,应该有5行数据才正确,程序循环了5次都修改了表格的第一行,
自己设置断点跟踪,肯定是逻辑出问题了。
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-6-29 06:06 , Processed in 0.045662 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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