Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите разобраться с ООП [D6, MSSQL]


ZDenis ©   (2004-09-07 13:55:00) 

Есть описание класса TPrinter и пара методов как правильней использовать эти методы:например сначала заполнять скажем поля объекта Printer,а затем вызывать метод AddItem
Printer:=TPrinter.Create;
Printer.name:='HP';
Printer.SerN:=='bnnmbb'
......
Printer.Add;
или как в приведенном коде.
unit uPrinter;

interface
uses
 SysUtils, Classes;
Type
 TPrinter=class
private
 fid:integer;
 fName:string;
 fSerN:string;
 fInvN:string;
 fUserid:integer;
 fStatusid:smallint;
 fPrim:string;
 fKomnataId:integer;
 public
  constructor Create;
  procedure addItem(name,SerN,InvN,Komnata,Prim:string);
  procedure EditItem(Id:integer;NewName,NewSerN,NewInvN,NewKomnata,NewPrim:string) ;
end;
implementation
uses UDm;
constructor TPrinter.Create;
 begin
 end;
procedure TPrinter.addItem(Name,SerN,InvN,Komnata,prim:string);
 begin
  with DM1.SP1 do begin
   ProcedureName :='AddPrinter';
   Parameters.Refresh;
   Parameters.ParamByName('@PrinterName').Value :=name;
   Parameters.ParamByName('@PrinterSerN').Value :=SerN;
   Parameters.ParamByName('@PrinterInvN').Value :=InvN;
   Parameters.ParamByName('@Komnata').Value :=Komnata;
   Parameters.ParamByName('@prim').Value :=prim;
   ExecProc;
  end;
  Dm1.SPqPrinter.Close;
  Dm1.SPqPrinter.open;
end;
procedure TPrinter.EditItem(Id:integer;NewName,NewSerN,NewInvN,NewKomnata,NewPrim:string)  ;
begin
 with DM1.SP1 do begin
  close;
  ProcedureName :='EditPrinter';
  Parameters.Refresh;
  Parameters.ParamByName('@PrinterName').Value :=NewName;
  Parameters.ParamByName('@PrinterSerN').Value :=NewSerN;
  Parameters.ParamByName('@PrinterInvN').Value :=NewInvN;
  Parameters.ParamByName('@Komnata').Value :=NewKomnata;
  Parameters.ParamByName('@prim').Value :=NewPrim;
  Parameters.ParamByName('@PrinterID').Value :=ID;
  ExecProc;
 end;
dm1.SPqPrinter.Close;
dm1.SPqPrinter.open;
end;
end.


Defunct   (2004-09-08 03:08:00) [1]

С чем возникли трудности? С описанием класса или с реализацией?

Пока что таблицы у вас нет. В приведенном коде есть только одна запись.

Вместо EditItem, сделайте Item доступным.
Вместо AddItem, cделайте функцию Add, которая возвращает вновь созданный объект.

TPrinterTable = class
private
  FItems  : Array of TPrinterTable;
  fid        : integer;
  fName      : string;
  fSerN      : string;
  fInvN      : string;
  fUserid    : integer;
  fStatusid  : smallint;
  fPrim      : string;
  fKomnataId : integer;
  FCount     : Integer;

  Procedure SetItem( Index: Integer; ATable: TPrinterTable);
  Function  GetItem( Index: Integer):TPrinterTable;
public
  Property Count: Integer Read FCount;
  Property Items[Index: Integer]:TPrinterTableRead GetItem Write SetItem;
  Property  Id:Integer Read FId Write SetId;
  ...
  ...
  ...
  < все поля данных вынести как свойства>
  ...

  Function    Add:TPrinterTable;
  Function    Delete(ItemIndex):Boolean;
  Function    Select(ItemIndex):Boolean;
  .. и т.п.

  Constructor Create;
  Destructor  Destroy;
End;

Function TPrinterTable.Add;
Begin
 Inc(FCount);
 SetLength(FItems, FCount);
 Result := TPrinterTable.Create;
 FItems[ FCount -1] := Result;
End;


ZDenis   (2004-09-07 15:05:00) [2]

>Skyle ©
TPrinter должен реализовывать возможность добавления,редактирования и удаления записи из таблици Printer.
Например
var Printer:Trinter;
begin
.....
Printer.addItem;
.....
end;


Skyle   (2004-09-07 14:54:00) [3]


> [2] ZDenis ©   (07.09.04 14:52)

А что этот TPrinter должен делать?
И какое это отношение имеет к БД, таблицам и прочей нечисти?


ZDenis   (2004-09-07 14:52:00) [4]

есть БД,таблица скажем Printer,хранимые процедуры реализующие добавление,редактирование,удаление записи и т.п.
Нужно написать клиентскую часть с использованием ООП.
Как правильно описать класс и методы класса например TPrinter?


Rem   (2004-09-07 14:35:00) [5]

Правильно, скорее всего, так:
Printer:=TPrinter.Create;
Printer.Add;
Printer.name:='HP';
Printer.SerN:=='bnnmbb'
......


Но вообще, вопрос поставлен некорректно:
1. Используется класс TPrinter, реализованный также в модуле Printers. Какое отношение между ними?
2. Речь, судя по всему, идет про базы данных, а в вопросе - про ООП.
Поэтому могу ошибиться с ответом, так как, признаюсь, не совсем его понял.
Прежде чем задавать вопрос - сформулируйте его правильно.

"Правильно заданный вопрос - половина ответа" (С)...


Наверх

Титульная страница Поиск, карта сайта Написать письмо