Шаришь! ничё ни скажешь.
но я все же немного про другое, до своего 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.