我使用delphi xe3编写一个程序,可以读取对象的价值,但不知道如何更改它?
单击“保存”按钮以设置新的功率级别值
符号率是只读的
答案 0 :(得分:2)
QuickSend()
仅用于检索值。设置值没有等效QuickSend()
。您必须直接使用SendQuery()
,例如:
procedure TForm1.BtnEnterClick(Sender: TObject);
var
SNMP: TIdSNMP;
dn, PLevel, SRate: string;
p: Extended;
begin
SNMP := TIdSNMP.Create(nil);
try
SNMP.Host := Trim(HostIP.Text);
SNMP.Community := Trim(ComString.Text);
if SNMP.Host = '' then begin
MessageDlg('Chưa nhập IP của thiết bị!', mtError, [mbOK], 0);
Exit;
end;
if SNMP.Community = '' then begin
MessageDlg('Chưa nhập SNMP read community string', mtError, [mbOK], 0);
Exit;
end;
PowerLevelValue.Clear;
SymbolRateValue.Clear;
SNMP.ReceiveTimeout := 1000;
if SNMP.QuickSend('1.3.6.1.2.1.1.1.0', SNMP.Community, SNMP.Host, dn) then
DeviceName.Caption := dn;
if SNMP.QuickSend('1.3.6.1.4.1.6247.24.1.2.2.10.0', SNMP.Community, SNMP.Host, PLevel) then
begin
p := Abs(StrToFloat(Plevel))/10;
Plevel := FloatToStr(p);
PowerLevelValue.Text := Plevel;
end;
if SNMP.QuickSend('1.3.6.1.4.1.6247.24.1.2.2.12.0', SNMP.Community, SNMP.Host, SRate) then
SymbolRateValue.Text := SRate;
finally
SNMP.Free;
end;
end;
procedure TForm1.BtnSaveClick(Sender: TObject);
var
SNMP: TIdSNMP;
PLevel: string;
p: Extended;
begin
Plevel := PowerLevelValue.Text;
p := StrToFloat(Plevel);
PLevel := FloatToStr(Abs(p*10));
SNMP := TIdSNMP.Create(nil);
try
SNMP.Host := Trim(HostIP.Text);
SNMP.Community := Trim(ComString.Text);
if SNMP.Host = '' then begin
MessageDlg('Chưa nhập IP của thiết bị!', mtError, [mbOK], 0);
Exit;
end;
if SNMP.Community = '' then begin
MessageDlg('Chưa nhập SNMP read community string', mtError, [mbOK], 0);
Exit;
end;
SNMP.ReceiveTimeout := 1000;
SNMP.Query.Clear;
SNMP.Query.PDUType := PDUSetRequest;
SNMP.Query.MIBAdd('1.3.6.1.2.1.1.1.0', DeviceName.Caption);
SNMP.Query.MIBAdd('1.3.6.1.4.1.6247.24.1.2.2.10.0', PLevel);
SNMP.Query.MIBAdd('1.3.6.1.4.1.6247.24.1.2.2.12.0', SymbolRateValue.Text);
SNMP.SendQuery;
finally
SNMP.Free;
end;
end;
如您所见,SendQuery()
支持多个OID,因此您可以将QuickSend()
替换为SendQuery()
,因此您只发送1个查询而不是3个查询:
procedure TForm1.BtnEnterClick(Sender: TObject);
var
SNMP: TIdSNMP;
PLevel: string;
p: Extended;
begin
SNMP := TIdSNMP.Create(nil);
try
SNMP.Host := Trim(HostIP.Text);
SNMP.Community := Trim(ComString.Text);
if SNMP.Host = '' then begin
MessageDlg('Chưa nhập IP của thiết bị!', mtError, [mbOK], 0);
Exit;
end;
if SNMP.Community = '' then begin
MessageDlg('Chưa nhập SNMP read community string', mtError, [mbOK], 0);
Exit;
end;
PowerLevelValue.Clear;
SymbolRateValue.Clear;
SNMP.ReceiveTimeout := 1000;
SNMP.Query.Clear;
SNMP.Query.PDUType := PDUGetRequest;
SNMP.Query.MIBAdd('1.3.6.1.2.1.1.1.0', '');
SNMP.Query.MIBAdd('1.3.6.1.4.1.6247.24.1.2.2.10.0', '');
SNMP.Query.MIBAdd('1.3.6.1.4.1.6247.24.1.2.2.12.0', '');
if SNMP.SendQuery then
begin
DeviceName.Caption := SNMP.Reply.MIBGet('1.3.6.1.2.1.1.1.0');
PLevel := SNMP.Reply.MIBGet('1.3.6.1.4.1.6247.24.1.2.2.10.0');
p := Abs(StrToFloat(Plevel))/10;
Plevel := FloatToStr(p);
PowerLevelValue.Text := Plevel;
SymbolRateValue.Text := SNMP.Reply.MIBGet('1.3.6.1.4.1.6247.24.1.2.2.12.0');
end;
finally
SNMP.Free;
end;
end;