Конференция ".Net" » Что за ошбка? [D2005, WinXP]
 
  • nap<> (07.02.06 09:34) [0]
    Object reference not set anstance of an object
  • k2 © (07.02.06 09:45) [1]
    ссылка на несуществующий объект
    обращение к объекту, экземпляр которого либо не создан, либо уже удален
  • nap<> (07.02.06 10:05) [2]
    А как с ней бороться если я его создал
  • k2 © (07.02.06 10:09) [3]
    а код показать как минимум
  • nap<> (07.02.06 13:04) [4]
    type
     TEmployeeContent = record
       id : integer;
       name : String;
    end;

    type
    TEmployee = class(TObject)
      id_employee : integer;
      emp: array of TEmployeeContent;
      function GetEmployeeIdByName(Name: String): integer;
    //   constructor Create;

     private
       procedure SetEmployeeByName(id: integer);
       procedure SetEmployeeById(id: integer);
     public
       Name : String;
       Group : String;
       EmpName : TStrings;
       procedure GetEmployeesNames;
    end;

  • k2 © (07.02.06 13:06) [5]
    и што мы тут видим? :) только объявление класса, никаких созданий экземпляров и строки с ошибкой
  • nap<> (07.02.06 13:17) [6]
    employee := TEmployee.Create;

    employee.GetEmployeesNames;-- здесь она возникает
  • k2 © (07.02.06 13:22) [7]
    попробуйте закомментировать //emp: array of TEmployeeContent; и весь код в GetEmployeesNames
  • nap<> (07.02.06 16:57) [8]

    procedure TEmployee.GetEmployeesNames;
    var id:integer;
    begin
    with MastData.EmployeeTable do begin
    first;
    repeat
     id := fieldbyname('id').AsInteger;
     emp[id].name := fieldbyname('name').AsString;
     empname.Add(emp[id].name);
    until Eof;

    end;
    end;

  • ИА (08.02.06 08:41) [9]
    Не понимаю, причем тут .NET, но я бы за такой код отпинал ногами на check-in review и никуда бы дальше он не пошел. Не вдаваясь в логику которая на мой взгляд тоже нуждается в улучшении, а просто за качество того, как написано.

    MastData проверить на null, кинуть exception.
    MastData.EmployeeTable проверить на null, кинуть exception.
    проверить на наличие поля id, кинуть exception.
    emp проверить на null, создать.
    emp проверить на наличие emp[id], нет - добавить, есть - кинуть exception или наоборот. Тут смысл опять ускользает.
    проверить на наличие поля name, кинуть exception.

    Опционально empname проверить на дубликать имени, кинуть exception
    Опционально по окончанию empname проверить на наличии хотя бы родного имени, если нет - кинуть exception

    В таком варианте у вас просто не возникло бы начального вопроса.
  • k2 © (08.02.06 08:44) [10]
    во-первых, класс TStrings не следует использовать напрямую, большинство его методов абстрактные или виртуальные, используются его наследники, например TStringList, безусловно перед обращением следует его создать
    например в конструкторе класса TEmployee.
    во-вторых, нигде не видно штобы вы установили длину массива emp,и вообще нужен ли он, вместо него можно использовать списки из модуля Borland.Vcl.Contnrs (TObjectList,etc)
    и в-третьих, по видимому это vcl-application, тот код што вы привели я имею в виду объявление класса даже не компилируется
    может вы потрудитесь привести реальный код, реальные описания и какая задача ставиться перед классом TEmployee
    если все слишком секретно, то возможно стоит посмотреть в сторону коллекций, за сим откланиваюсь
  • nap<> (08.02.06 10:55) [11]
    спасибо. .net тут действительно не причем.
    Я давно не программил вот и забыл создать emp.
 
Конференция ".Net" » Что за ошбка? [D2005, WinXP]
Есть новые Нет новых   [120081   +34][b:0][p:0.001]