unit KategorieBild;
type
{ ID_Bild = 0 entspricht dem Nullzustand = Verknüpfung nicht vorhanden }
TKategorieBild =
class(TObject)
private
FID: Integer;
FName
string;
FID_Bild: Integer;
public
property ID: Integer
read FID
write FID;
property Name;
string read FName
write FName;
property ID_Bild: Integer
read FID_Bild;
end;
TKategorieBildList =
class(TObjectList<TKategorieBild>)
type
TParams =
record
ID_Bild;
end;
public
{ Parameter zum Laden und Speichern der Liste }
Params: TParams;
end;
TDataRepository =
class()
public
procedure ReadKategorieBildList(AList: TKategorieBildList);
procedure SaveKategorieBildList(Alist: TKategorieBildList);
end;
implementation
const
CRLF = #13#10;
CSQL_KategorieBild_Read =
'
select a.id, a.name, b.id_bild' + CRLF +
'
from T_Kategorien a' + CRLF +
'
left join T_Zwischentabelle b on (b.id_bild = :id_bild) and (b.id_Kategorie = a.id)' + CRLF +
'
order by a.name';
CSQL_KategorieBild_Insert =
'
insert or update into T_Zwischentabelle (id_bild, id_kategorie) values (:id_bild, :id)';
CSQL_KategorieBild_Delete =
'
delete from T_Zwischentabelle where (id_bild = :id_bild) and (id_kategorie = :id)';
procedure TDataRepository.ReadKategorieBildList(AList: TKategorieBildList);
var
Query: TQuery;
{konkreten Typ angeben}
Item: TKategorieBild;
begin
AList.Clear;
Query := TQuery.Create;
{konkreten Typ angeben, bzw. Erzeugen und Initialisieren}
try
Query.SQLText := CSQL_KategorieBild_Read;
Query.Prepare;
Query.ParamByName('
ID_BILD').AsInteger := AList.Params.ID_Bild;
Query.First;
while not Query.EOF
do
begin
Item := AList.Insert;
Item.ID := FieldByName('
ID').AsInteger;
Item.
Name := FieldByName('
Name').AsString;
Item.ID_Bild := FieldByName('
ID_Bild').AsInteger;
Query.Next;
end;
Query.Close;
finally
Query.Free;
end;
end;
procedure TDataRepository.SaveKategorieBildList(AList: TKategorieBildList);
var
DSql: TDSql;
{konkreten Typ angeben}
Item: TKategorieBild;
begin
DSql := TDSql.Create;
{konkreten Typ angeben, bzw. Erzeugen und Initialisieren}
try
DSql.SQLText := CSQL_KategorieBild_Delete;
DSql.Prepare;
DSql.ParamByName('
ID_BILD').AsInteger := AList.Params.ID_Bild;
for Item
in AList
do
begin
if Item.ID_Bild = 0
then
begin
DSql.ParamByName('
ID_BILD').AsInteger := Item.ID;
DSql.Execute;
end;
end;
DSql.SQLText := CSQL_KategorieBild_Insert;
DSql.Prepare;
DSql.ParamByName('
ID_BILD').AsInteger := AList.Params.ID_Bild;
for Item
in AList
do
begin
if Item.ID_Bild <> 0
then
begin
DSql.ParamByName('
ID_BILD').AsInteger := Item.ID;
DSql.Execute;
end;
end;
finally
DSql.Free;
end;
end;