我在做一个程序,是MDI结构的,也就是说程序在大多数情况下是这样的:一个窗口在不关闭的情况下,可以再打开另外一个功能窗口。
    这个程序是一个信息维护程序,我将个人信息、单位信息等的Query放在了DataModal中,以备后用。在程序中有信息维护和信息查询两个功能窗口,他们的结构大致相同,所以都使用了DataModal中的Query,我现在费解的是,当这两个窗口都打开时,一个窗口的记录指针移动就会改变另一个窗口的记录指针,这可不是程序所希望的啊?
    如果为每一个窗口建一个Query,势必很麻烦,那怎样做能解决这种问题呢?希望大家指教!

解决方案 »

  1.   

    I think tow querys is ok,it will not be some difficult.
      

  2.   

    可以先保存记录标记,需要的时候再反回:
    saveplace:=adoquery1.getBook; //保存记录标记对记录进行操作
    Adoquery1.gotoBook(saveplac......//反回
      

  3.   

    何必麻烦,不就两个query,一切就ok!
      

  4.   

    你用的是同一个数据集,当然会这样啦,要么就以动态创建的方式,要么就不用,
    共用同一数据集一般用在多处使用而又不理会其指针的情况,比如数据集的LookUp字段,某个字段的下拉选择框中等等。象你所说的情况,如可实现的话数据库控件就不能称为数据感应控件了.
      

  5.   

    你可以Select * into #tmptable from table然后以后的查询就在各自的tmptable里面找不就可以了啊。query还是可以用同一个的啊
      

  6.   

    procedure TFareFram.fcShapeBtn3Click(Sender: TObject);
    var
       Query,Query1:TADOQuery;
       ID :String;
       InID:String;
       i,AppState,Invoiced :Integer;
       lo_bm : TBookMark;
    begin
       if not Assigned(DMFreights) then  exit;
        inherited;
        with DMFreights.Queryfreight do
        begin
           lo_bm := GetBook;
           DisableControls;
           for I:=0 to slkDBGrid1.SelectedList.Count -1 do
           begin
              GotoBook(slkDBGrid1.SelectedList.Items[I]);
              inid:=trim(FieldByName('InID').AsString);          if (inid <> '') then
              begin
                 Query1:=TADOQuery.Create(self);
                  try
                    with Query1 do
                    begin
                       Connection:=GetConnection;
                       Close;
                       with SQL do
                       begin
                          Clear;
                          Add('select Invoiced,AppState from T_Freight where InID='''+InID+'''');
                       end;
                       open;
                    end;
                    AppState:=Query1.FieldByName('AppState').AsInteger;
                    Invoiced:=Query1.FieldByName('Invoiced').AsInteger;
                  finally
                    freeAndNil(Query1);
                  end;
                 if DMFreights.Queryfreight.FieldByName('Beconfirm').AsBoolean = true then  ID:='0'
                  else  ID:='1';
                  if (AppState > 0) or (Invoiced > 0 )then
                  begin
                     ShowMessage('费用已经申请或打票,不能进行反确认!');
                  end
                  else
                  begin
                      Query:=TADOQuery.Create(self);
                      try
                        with Query do
                        begin
                          Connection:=GetConnection;
                          SQL.Add('UPDATE  T_Freight ');
                          SQL.Add('set beconfirm='+ID);
                          SQL.Add('where InID = '''+InID+'''');
                          ExecSQL;
                        end;
                      finally
                        FreeAndNil(Query)
                      end;
                  end;
                  DMFreights.Queryfreight.Refresh;   
              end
              else
                  ShowMessage('没有费用确认!');
              end;
          if BookValid(lo_bm) then
           begin
              GotoBook(lo_bm);
              FreeBook(lo_bm);
           end;
           EnableControls;
       end;
      //added by jxp
      //实现费用表格中不同的费用是否能修改
      if not slkDBGrid1.ReadOnly then
        SetFareIfReadOnly(slkDBGrid1);end;书签