起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 576|回复: 13

【搞定】DataSet查询后恢复所有数据**

[复制链接]
发表于 2007-5-10 13:48:18 | 显示全部楼层 |阅读模式
表: A  ID  DESC
           1   AAA
           2   BBB

当我DataSetBroker1.DataSet.Locate('ID' ,1, []);
之后,想用ID =2 就提示,图片的错误. (ID唯一的错误)

我认为应该是过滤后,DataSet只有ID=1,所以ID=2就不能用,请问有什么能刷DataSet,得到所有的值的方法

a.jpg

10.26 KB, 下载次数: 217

回复

使用道具 举报

发表于 2007-5-10 14:17:27 | 显示全部楼层
1、报错跟你使用 DataSetBroker1.DataSet.Locate('ID' ,1, []); 这个没有关系,不信,你可以去掉这段代码看看
2、DataSetBroker1.DataSet.Locate('ID' ,1, []); 这个是定位数据集,不是过滤。

所以不明白楼主的意思?请明示
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-10 14:34:00 | 显示全部楼层
一个TDataEdit,引用DataSetBroker1的DESC
第一次使用:
DataSetBroker1.DataSet.Locate('ID' ,1, []);
提示: ID := 1
DESC := AAA
第2次使用:
DataSetBroker1.DataSet.Locate('ID' ,2, []);
提示: ID := 2
提示我图片的错误
如果还用id=1,则没有问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-10 14:34:54 | 显示全部楼层
一个TDataEdit,引用DataSetBroker1的DESC
第一次使用:
DataSetBroker1.DataSet.Locate('ID' ,1, []);
提示: ID := 1
DESC := AAA
第2次使用:
DataSetBroker1.DataSet.Locate('ID' ,2, []);
提示我图片的错误
如果还用id=1,则没有问题
回复 支持 反对

使用道具 举报

发表于 2007-5-10 14:39:18 | 显示全部楼层
你跟踪了吗?是DataSetBroker1.DataSet.Locate('ID' ,2, []);  是这段代码报出来的。

请把你的所以代码贴出来看看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-10 14:58:23 | 显示全部楼层
{打开WORD 合同}
procedure TNDFDHTCT.EditModle(dataSet : TSQLDataSet);
Var
    selectedModel : String;
    selectedDoc : String;
    newWordName : String;
    mID : Integer;
    isSelectModel, isSelectDoc : boolean;
    atts : TStrings;
    lBizURL : TBizURL;
begin
    WebB_Word.Navigate('about:blank');

    selectedModel := DEdit_CModel.Text.Trim();
    selectedDoc := Edit_Name.Text.Trim();
    //JSDialogs.ShowMsg(selectedName,'提示:');
    //word Operater
    if FWordOleExtend <> nil then
      TUnStructureDocUtils.DestroyWordOleExtend(FWordOleExtend);

    FWordOleExtend := TUnStructureDocUtils.CreateWordOleExtend('');
    //create file directory
    if not DirectoryExists(rootPath) then
    begin
        if not DirectoryExists(rootPath ) then
          CreateDir(rootPath ) ;
    end;

    if trim(selectedModel) = '' then
        isSelectModel := false
    else
        isSelectModel := True;

    if trim(selectedDoc) = '' then
        isSelectDoc := false
    else
        isSelectDoc := True;

    if isSelectModel and isSelectDoc then
    begin
      newWordName := rootPath + '\' + selectedDoc +'.doc';

      if FileExists(newWordName)  then
          //delete word
          TUnStructureDocUtils.DelExistFile(newWordName);

      //download word
      if not DataSetBrokerHTMB.DataSet.Active then
          DataSetBrokerHTMB.DataSet.Open;

      mID := DataSetBrokerHTMB.DataSet.FieldByName('MID').AsInteger;
      //JSDialogs.ShowMsg(SysUtils.IntToStr(mID),''); 都能提示!!!!!!!!
      //下面抛的异常 ,如果第一次选id=1的话,第2次为2就错误,为1 就没有任何问题
      DataSetBrokerHTMB.DataSet.Locate('MID' ,mID, []);

      TBlobField(DataSetBrokerHTMB.DataSet.FieldByName('ContractContent')).SaveToFile(newWordName);
      //给宏赋值
      atts := TStringList.Create;
      lBizURL := TBizURL.Create;
      lBizURL.URL := cTableURL;
      atts := getAttName((DataSetBrokerJBXX.DataSet as TSQLDataSet), lBizURL);
      TUnStructureDocUtils.OpenWordDoc(FWordOleExtend, newWordName, False);

      getAttValue(atts , selectedDoc, FWordOleExtend);

      TUnStructureDocUtils.ShowWordFieldCodes(FWordOleExtend, False);
      TUnStructureDocUtils.SaveWordDoc(FWordOleExtend);
      TUnStructureDocUtils.CloseWordDoc(FWordOleExtend);
      TUnStructureDocUtils.DestroyWordOleExtend(FWordOleExtend);
      atts.Clear;

      //upcase word
      dataSet.Edit;
      TBlobField(dataSet.FieldByName('ContractContent')).LoadFromFile(newWordName);
      dataSet.FieldByName('wordflag').AsInteger := 1;
      dataSet.ApplyUpdates;
      //open word
      //TUnStructureDocUtils.OpenWordDoc(FWordOleExtend, newWordName, True); //way 1
      WebB_Word.Navigate(newWordName);  //way 2

      //TUnStructureDocUtils.ShowWordFieldCodes(FWordOleExtend, True);
    end
    else
      JSDialogs.ShowMsg('请选择合同模版名称和选择合同名称!','提示:');

end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-10 15:00:31 | 显示全部楼层
我要出去开个会, 如果这个方式不好解决,可以用其他方式解决
DataSetBrokerHTMB.DataSet.Locate('MID' ,mID, []); 就是想定位.不做什么操作
先谢谢了. 急用
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-10 15:31:58 | 显示全部楼层
我不去开会了,这个还是比较急,能 帮我想想还有什么解决办法吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-10 16:14:00 | 显示全部楼层
我用了你说的方式 Edit1 , Button1
第2次操作时先输入另外一个号按一下BUTTON1,然后在按一下入库就可以

b.jpg

4.84 KB, 下载次数: 197

回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-10 17:02:52 | 显示全部楼层
附件是工程

合同生成_0510不能重复的bug.rar

843.61 KB, 下载次数: 114

回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-1-10 03:36 , Processed in 0.041258 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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