Тема: ООП и БД
Показать сообщение отдельно
  #15  
Старый 18.02.2009, 15:01
Аватар для chetaykin
chetaykin chetaykin вне форума
Прохожий
 
Регистрация: 15.02.2009
Сообщения: 13
Репутация: 10
По умолчанию

Шаришь! ничё ни скажешь.
но я все же немного про другое, до своего ADO или dbExpress я еще не дорос
лучше будет если я покажу код, а ты скажешь что в нем не верно

Код:
unit ObjectAdress;

interface

uses ADODB, Contnrs;

type
  TMunicList = class;
  TTownList = class;
  TStreetList = class;

  TAdrObj = class
  private
    FName: string;
    FParent: integer;
    FConnection: TADOConnection;
    FID: integer;
    procedure SetConnection(const Value: TADOConnection);
    procedure SetID(const Value: integer);
    procedure SetName(const Value: string);
    procedure SetParent(const Value: integer);
  public
    property ID: integer read FID write SetID;
    property Name: string read FName write SetName;
    property Connection: TADOConnection read FConnection write SetConnection;
    property Parent: integer read FParent write SetParent;
  end;

  TMunicTown = class(TAdrObj)
  private
    FKadastralNumber: string;
    FOKATO: string;
    procedure SetKadastralNumber(const Value: string);
    procedure SetOKATO(const Value: string);
  public
    property OKATO: string read FOKATO write SetOKATO;
    property KadastralNumber: string read FKadastralNumber write SetKadastralNumber;
  end;

  TAdrList = class(TObjectList)
  private
    DataSet: TADODataSet;
    FParent: integer;
    FConnection: TADOConnection;
    procedure SetConnection(const Value: TADOConnection);
    procedure SetParent(const Value: integer);
  public
    constructor Create;
    property Connection: TADOConnection read FConnection write SetConnection;
    property Parent: integer read FParent write SetParent;
  end;

  TRaion = class(TAdrObj)
  private
    FMunicList: TMunicList;
    procedure SetMunicList(const Value: TMunicList);
    function GetMunicList: TMunicList;
  public
    procedure CreateMunicList;
    property MunicList: TMunicList read GetMunicList write SetMunicList;
  end;

  TMunic = class(TMunicTown)
  private
    FTownList: TTownList;
    procedure SetTownList(const Value: TTownList);
    function GetTownList: TTownList;
  public
    procedure CreateTownList;
    property TownList: TTownList read GetTownList write SetTownList;
  end;

  TTown = class(TMunicTown)
  private
    FStreetList: TStreetList;
    FPrefix: string;
    procedure SetStreetList(const Value: TStreetList);
    procedure SetPrefix(const Value: string);
    function GetStreetList: TStreetList;
  public
    procedure CreateStreetList;
    property Prefix: string read FPrefix write SetPrefix;
    property StreetList: TStreetList read GetStreetList write SetStreetList;
  end;

  TStreet = class(TAdrObj)
  private
    FDocument: string;
    FPrefix: string;
    procedure SetDocument(const Value: string);
    procedure SetPrefix(const Value: string);
  public
    property Document: string read FDocument write SetDocument;
    property Prefix: string read FPrefix write SetPrefix;
  end;

  TRaionList = class(TAdrList)
  protected
    procedure Put(Index: integer; Item: TRaion);
    function Get(Index: integer): TRaion;
  public
    property Items[Index: integer]: TRaion read Get write Put; default;
    function Add(Raion: TRaion): integer;
    procedure ReadFromDB;
  end;

  TMunicList = class(TAdrList)
  protected
    procedure Put(Index: integer; Item: TMunic);
    function Get(Index: integer): TMunic;
  public
    property Items[Index: integer]: TMunic read Get write Put; default;
    function Add(Munic: TMunic): integer;
    procedure ReadFromDB;
  end;

  TTownList = class(TAdrList)
  protected
    procedure Put(Index: integer; Item: TTown);
    function Get(Index: integer): TTown;
  public
    property Items[Index: integer]: TTown read Get write Put; default;
    function Add(Town: TTown): integer;
    procedure ReadFromDB;
  end;

  TStreetList = class(TAdrList)
  protected
    procedure Put(Index: integer; Item: TStreet);
    function Get(Index: integer): TStreet;
  public
    property Items[Index: integer]: TStreet read Get write Put; default;
    function Add(Street: TStreet): integer;
    procedure ReadFromDB;
  end;

implementation

{ TRaionList }

const
  cSQL_GetRaion: string =
    'SELECT id, name FROM adr WHERE lvl = 1';

function TRaionList.Add(Raion: TRaion): integer;
begin
  Result := inherited Add(Raion);
end;

function TRaionList.Get(Index: integer): TRaion;
begin
  if Count -1 >= Index then
    Result := TRaion(inherited Items[Index])
  else
    Result := nil;
end;

procedure TRaionList.Put(Index: integer; Item: TRaion);
begin
  inherited Items[Index] := Item;
end;

procedure TRaionList.ReadFromDB;
var i: integer;
begin
  Clear;
  DataSet.Connection := Self.Connection;
  DataSet.CommandText := cSQL_GetRaion;
  DataSet.Open;
    while not DataSet.Eof do
    begin
      i := Add(TRaion.Create);
      Items[i].Id := DataSet.FieldByName('id').AsInteger;
      Items[i].Name := DataSet.FieldByName('name').AsString;
      Items[i].Connection := Self.Connection;
      Items[i].Parent := Parent;
      Items[i].CreateMunicList;
      DataSet.Next
    end;
  DataSet.Close;
end;

{ TAdrObj }

procedure TAdrObj.SetConnection(const Value: TADOConnection);
begin
  FConnection := Value;
end;

procedure TAdrObj.SetID(const Value: integer);
begin
  FID := Value;
end;

procedure TAdrObj.SetName(const Value: string);
begin
  FName := Value;
end;

procedure TAdrObj.SetParent(const Value: integer);
begin
  FParent := Value;
end;

{ TAdrList }

constructor TAdrList.Create;
begin
  DataSet := TADODataSet.Create(nil);
  self.FParent := 0;
end;

procedure TAdrList.SetConnection(const Value: TADOConnection);
begin
  FConnection := Value;
end;

procedure TAdrList.SetParent(const Value: integer);
begin
  FParent := Value;
end;

{ TMunicTown }

procedure TMunicTown.SetKadastralNumber(const Value: string);
begin
  FKadastralNumber := Value;
end;

procedure TMunicTown.SetOKATO(const Value: string);
begin
  FOKATO := Value;
end;

{ TMunicList }

const
  cSQL_GetMunicFromParent: string =
    'SELECT id, name, okato, kadastr FROM adr WHERE lvl = 2 AND' +
     ' parent_id = :parent_id';

//реализация методов аналогично TRaionList
function TMunicList.Add(Munic: TMunic): integer;

function TMunicList.Get(Index: integer): TMunic;

procedure TMunicList.Put(Index: integer; Item: TMunic);

procedure TMunicList.ReadFromDB;

{ TRaion }

procedure TRaion.CreateMunicList;
begin
  FMunicList := TMunicList.Create;
  FMunicList.Connection := Self.Connection;
  FMunicList.Parent := Self.ID;
end;

function TRaion.GetMunicList: TMunicList;
begin
  if FMunicList.Count = 0 then
    FMunicList.ReadFromDB;
  Result := FMunicList;
end;

procedure TRaion.SetMunicList(const Value: TMunicList);
begin
  FMunicList := Value;
end;

{ TTownList }

const
  cSQL_GetTownFromParent: string =
    'SELECT id, pref, name, okato, kadastr FROM adr WHERE lvl = 3 AND' +
                                            ' parent_id = :parent_id';

//реализация методов аналогично TRaionList
function TTownList.Add(Town: TTown): integer;

function TTownList.Get(Index: integer): TTown;

procedure TTownList.Put(Index: integer; Item: TTown);

procedure TTownList.ReadFromDB;


{ TMunic }

procedure TMunic.CreateTownList;
begin
  FTownList := TTownList.Create;
  FTownList.Connection := Self.Connection;
  FTownList.Parent := Self.ID;
end;

function TMunic.GetTownList: TTownList;
begin
  if FTownList.Count = 0 then
    FTownList.ReadFromDB;
  Result := FTownList
end;

procedure TMunic.SetTownList(const Value: TTownList);
begin
  FTownList := Value;
end;

{ TStreet }

procedure TStreet.SetDocument(const Value: string);
begin
  FDocument := Value;
end;

procedure TStreet.SetPrefix(const Value: string);
begin
  FPrefix := Value;
end;

{ TStreetList }

const
  cSQL_GetStreetFromParent: string =
    'SELECT adr.id, pref, adr.name, doc.name ' +
    'FROM adr INNER JOIN doc ON doc.id = adr.id_doc ' +
    'WHERE lvl = 4 AND parent_id = :parent_id';

//реализация методов аналогично TRaionList
function TStreetList.Add(Street: TStreet): integer;

function TStreetList.Get(Index: integer): TStreet;

procedure TStreetList.Put(Index: integer; Item: TStreet);

procedure TStreetList.ReadFromDB;


{ TTown }

procedure TTown.CreateStreetList;
begin
  FStreetList := TStreetList.Create;
  FStreetList.Connection := Self.Connection;
  FStreetList.Parent := Self.ID;

end;

function TTown.GetStreetList: TStreetList;
begin
  if FStreetList.Count = 0 then
    FStreetList.ReadFromDB;
  Result := FStreetList
end;

procedure TTown.SetPrefix(const Value: string);
begin
  FPrefix := Value;
end;

procedure TTown.SetStreetList(const Value: TStreetList);
begin
  FStreetList := Value;
end;

end.
Ответить с цитированием