错误如题
代码如下:
  function TGlobalData.fGetCameraInformation(lTerID,lCamIndex: Integer): Boolean;
var
   sql: string;
   i: Integer;
begin
   Result := False;
      qryAlarm.Close;
      sql := ' select top 1 Area.IID as uAreaID,Area.sName as uAreaName,'+
             ' Ter.iid as uTerID,Ter.iParentID as uTerParentID,Ter.sName as uTerName,'+
             ' Ter.sIPAddr as uTerIP,Ter.sLoginTag as uTerLoginTag,Ter.sLoginPWD as uTerLoginPWD, '+
             ' Ter.sLinkAddr as uTerLinkAddr,Ter.sLinkTel as uTerLinkTel,Ter.sManager as uTerLinkMaster,'+
             ' Cam.iid as uCameraID,Cam.iParentID as uCamParentID, Cam.sName as uCameraName,Cam.iCameraIndex as uCameraIndex'+
             ' from TTMain as Area,TTMain as Ter, TTmain as Cam'+
             ' where Ter.iParentID=Area.iid and Cam.iParentID=Ter.iid and'+
             ' Area.iobjtype=7 and Ter.iobjtype=50 and Cam.iobjtype=8 and '+
             ' Ter.iid='+inttostr(lTerID)+' and Cam.iCameraIndex ='+inttostr(lCamIndex);      qryAlarm.Recordset := Connect.GetRecordset(sql);
      qryAlarm.Open;
      if qryAlarm.RecordCount > 0 then
      begin
        Main.uAreaName := qryAlarm.FieldByName('uAreaName').AsString;
        Main.uAreaID := qryAlarm.FieldByName('uAreaID').AsInteger;
       Result := True;
      end;
end;procedure TGlobalData.ConnectStreamMsg(Sender: TObject; streamID: Integer; buf: PAnsiChar; bufLen: Integer);
var
  i: Integer;
  qry: TADOQuery;
begin
  try
    if StreamID = MSG_ALARM_HAPPENALARM then
    begin
      if not Main.showVideoProcess then
        Main.tbAbout.Click;
      Application.ProcessMessages;
      iDeviceProcess.pnlLog.Visible := True;
      AlarmItem := PIVSAlarmUpLoadInfo(Integer(Buf) + 70);
     if not fGetCameraInformation(integer(AlarmItem.Data),AlarmItem.CameraIndex) then
             Exit;
    try
          qry := TADOQuery.Create(nil);
            sql := ' select iid from TTMain where iobjtype=18 and iParentID='+inttostr(Main.uAreaID);
            Main.uGisID := -1;
            qry.Recordset := Connect.GetRecordset(sql);
            if qry.RecordCount > 0 then
            begin
               Main.uGisID := qry.FieldS[0].AsInteger;
            end;
          finally
            qry.Free;
          end;
        end;
    end;
end;

解决方案 »

  1.   

     try
      qry := TADOQuery.Create(nil);
      sql := ' select iid from TTMain where iobjtype=18 and iParentID='+inttostr(Main.uAreaID);
      Main.uGisID := -1;
      qry.Recordset := Connect.GetRecordset(sql);
      if qry.RecordCount > 0 then
      begin
      Main.uGisID := qry.FieldS[0].AsInteger;
      end;
      finally
      qry.Free;
      end;
    没有后面的这个查询,没有出现任何问题
    这个问题困恼了我很久了
    有了这个查询,又在前面的那个函数出现那个Bug
      

  2.   

    提示多明显,缺少qryVideo字段,你看看你的sql中是否select出这个字段了
      

  3.   

    因为有正确的时候,有正确显示的时候,所以这个提示缺少qryVideo字段不是很对
    而且我上面的sql语句明显有那个字段
      

  4.   

    这个Adoquery如果同时用于几个表的数据查询,在重复几次后列名会被修改掉。所以反复几次后,出现字段丢失的错误
    例如:
       A  中:
           myQry对应查询  s1  s2  s3   s4列
       b中
           myQry对应查询  s44  s55  s66  列
       procedure  b
       begin
          if  myqry..  then
           begin
              myqry....
              a();//调用a过程,其中会再次使用myqry 
           end;
       end;