我在frmMain里声明了一个public的integer变量RoomID,并给了值;但我在一个子窗体里引用的时候为何提示我RoomID没有定义?
以下是在frmMain里的声明:
  public
    RoomID:Integer;  以下是在frmMain里的一个处理过程:
procedure TfrmMain.PopHotelRoom_ModifyClick(Sender: TObject);
var RoomName:String;
begin
  RoomName:=lvwMain.Selected.SubItems.Strings[0];   //取得所选房型的名称
  With qryMain do
  begin
    SQL.Clear;
    SQL.Add('Select * From G_HotelPrice Where P_Room = ''' + RoomName + ''' and P_HotelID = ' + InttoStr(HotelID) + '');
    Open;
    RoomID:=FieldByName('P_ID').AsInteger;                   //取得所选房型的ID
    Close;
  end;
  Application.CreateForm(TfrmModifyHotelRoom, frmModifyHotelRoom);
  frmModifyHotelRoom.ShowModal;
  frmModifyHotelRoom.Free;
end;以下是在一个子窗体里的引用:
procedure TfrmModifyHotelRoom.ModifyHotelRoom_LoadData;
begin
  With frmMain.qryMain do
  begin
    SQL.Clear;
    SQL.Add('Select * From G_HotelPrice Where P_ID = ' + InttoStr(RoomID) + '');
    Open;
    edtRoom.Text:=FieldByName('P_Room').AsString;
    edtMSPrice.Text:=FloattoStr(FieldByName('P_MarketPrice').AsFloat);
    edtMemberPrice.Text:=FloattoStr(FieldByName('P_MemberPrice').AsFloat);
    edtProcotolPrice.Text:=FloattoStr(FieldByName('P_ProtocolPrice').AsFloat);
    edtYJ.Text:=FloattoStr(FieldByName('P_HotelYJ').AsFloat);
    cboIsCommend.Text:=FieldByName('P_NetIndex').AsString;
    edtDate.Text:=FieldByName('P_Time').AsString;
    memPriceMemo.Lines.Add(FieldByName('P_PriceRe').AsString);
    Close;
  end;
end;问题是,程序运行的时候提示:Undeclared identifier: 'RoomID'
不明白,请各位指教,谢谢。

解决方案 »

  1.   

    procedure TfrmModifyHotelRoom.ModifyHotelRoom_LoadData;
    begin
      With frmMain.qryMain do
      begin
        SQL.Clear;
        SQL.Add('Select * From G_HotelPrice Where P_ID = ' + InttoStr(frmMain.RoomID) + '');
        Open;
        //....
        Close;
      end;
    end;
    这下就对了;
    要:
    frmMain.RoomID才可以;
    或者你这样定义:
    Unit FrmMain 所地应的Unit;
    //.....
    //.....
    var
      FrmMain : TFrmMain;
      RoomID : Integer;
    //.....
    这样的话,这儿就可以如你上边那样引用;
      

  2.   

    这个我当然引用了,下面是子窗体的引用,请看:implementation
      uses main;
      

  3.   

    在子窗体implementation后添加:uses frmMain;
      

  4.   

    把ROOMID放在
    VAR
    frmMain:TfrmMain;
    ROOMID:INTEGER;
      

  5.   

    它肯定引用了,不然怎么会有With frmMain.qryMain do而不出错?
    问题是,你引用的话,要带上窗体名:如上边的更正:
    SQL.Add('Select * From G_HotelPrice Where P_ID = ' + InttoStr(frmMain.RoomID) + '');