Ошибка чтение данных из объекта

patrick1968
Дата: 29.10.2019 16:24:43
Добрый день. Появилась у меня ошибка, которую не могу понять, итак
объявляю объект

  TInfo = record
      sInt : integer;
      sStr : string;
  end;


 TSPInfoObj = class(TObject)
  private
    sStructure : TInfo;
    function GetValue : TInfo;
  public
    constructor Create(ID : string; ID_1 : integer);
    property pValue : TInfo read GetValue;
  end;

...

constructor TSPInfoObj.Create(ID : string; ID_1 : integer);
 begin
    inherited Create;
    sStructure.sStr := ID;
    sStructure.sInt := ID_1;
 end;

function TSPInfoObj.GetValue : TInfo;
 begin
  Result := sStructure;
 end;


Далее заполняю Combobox из запроса

var vInfo_1 : TSPInfoObj;
...

    fAddData.cbSP.Clear;
    if UniMainModule.qPlaces.Active then UniMainModule.qPlaces.Close;
    UniMainModule.qPlaces.Prepared := true;
    UniMainModule.qPlaces.Parameters.ParamByName('pID_FILIAL').Value := UniMainModule.qFilials.FieldByName('ID').AsInteger;
    UniMainModule.qPlaces.Open;
    vInfo_1 := TSPInfoObj.Create( '' , -1);
    fAddData.cbSP.Items.AddObject('<без объекта>',vInfo_1);
    while not UniMainModule.qPlaces.Eof do begin
      vInfo_1 := TSPInfoObj.Create(UniMainModule.qPlaces.FieldByName('AddressID').asString, UniMainModule.qPlaces.FieldByName('ID').AsInteger);
      fAddData.cbSP.Items.AddObject(UniMainModule.qPlaces.FieldByName('SUBDIVISION').AsString,vInfo_1);
      UniMainModule.qPlaces.Next;
    end;
    UniMainModule.qPlaces.Close;


и фрагмент чтения из Combobox
  if (cbSP.Items.Objects[cbSP.ItemIndex] as TSPInfoObj).sStructure.sStr = ''
     then ...


и на этой строке исключение "invalid object typecast" - не могу понять причину. Заранее спасибо.
Dimitry Sibiryakov
Дата: 29.10.2019 16:29:52

patrick1968
не могу понять причину

Ну так выведи перед ней .ClassName и посмотри что именно у тебя там. Скорее всего мусор.

Posted via ActualForum NNTP Server 1.5

patrick1968
Дата: 29.10.2019 16:38:09
ShowMessage((cbSP.Items.Objects[cbSP.ItemIndex] as TSPInfoObj).ClassName);
Выдает ту же самую ошибку
Dimitry Sibiryakov
Дата: 29.10.2019 16:40:00

Включи мозг: эта ошибка выкидывается из оператора "as".

Posted via ActualForum NNTP Server 1.5

wadman
Дата: 29.10.2019 16:41:31
patrick1968
vInfo_1 := TSPInfoObj.Create(UniMainModule.qPlaces.FieldByName('AddressID').asString, UniMainModule.qPlaces.FieldByName('ID').AsInteger);
fAddData.cbSP.Items.AddObject(UniMainModule.qPlaces.FieldByName('SUBDIVISION').AsString,vInfo_1);
И стоит городить объекты, если можно сделать так?
fAddData.cbSP.Items.AddObject(UniMainModule.qPlaces.FieldByName('SUBDIVISION').AsString,TObject(UniMainModule.qPlaces.FieldByName('ID').AsInteger));


Кстати, тут утечка, если заполнять более одного раза:
patrick1968
fAddData.cbSP.Clear;
patrick1968
Дата: 29.10.2019 16:55:02
Мне нужен объект из двух значений, а Classname выдает TSPInfoObj
Dimitry Sibiryakov
Дата: 29.10.2019 17:07:11

patrick1968
Classname выдает TSPInfoObj

Значит ты чего-то недоговариваешь или творишь какую-о чушь типа использования DLL и
передачи туда классов.

Posted via ActualForum NNTP Server 1.5

Polesov
Дата: 29.10.2019 17:20:09
patrick1968
  if (cbSP.Items.Objects[cbSP.ItemIndex] as TSPInfoObj).sStructure.sStr = ''
     then ...


и на этой строке исключение "invalid object typecast" - не могу понять причину. Заранее спасибо.


А чему равен cbSP.ItemIndex ?
patrick1968
Дата: 29.10.2019 17:23:13
Разобрался, всем спасибо за участие