Konu başlığının Attibute kısmına her ne kadar uymasada, yazının devamı niteliğinde olabilecek, bir arkadaşın sorusu üzerine record tipi için map örneğini paylaşmak isterim.
Record tipi :
Map işlemi yapan method.
Kullanımı:
Ek olarak Delphi deki record tiplerinin C/C++ daki struct tipine karşılık geldiğini belirtmekte fayda var.
Her zaman dediğim gibi eksikler/yanlışlar var.
Geliştirmesi size kalmış...
Record tipi :
TBL_STOK_KART = record ID: Int64; // bigint KODU: string; // varchar ADI: string; // varchar TUR: Byte; // tinyint BIRIMTUR: SmallInt; // smallint BIRIM: string; // varchar KDVTUR: SmallInt; // smallint KDVORAN: Currency; // money OTVTUR: SmallInt; // smallint OTVORAN: Currency; // money ABF1: Currency; // money ABF1KDVDHL: Boolean; // bit ABF2: Currency; // money ABF2KDVDHL: Boolean; // bit SBF1: Currency; // money SBF1KDVDHL: Boolean; // bit SBF2: Currency; // money SBF2KDVDHL: Boolean; // bit BARKOD: string; // varchar BARKODTUR: string; // varchar BARKODTARTILI: Boolean; // bit KRITIKMIKTAR: Currency; // money GRUP_KODU: string; // varchar ALTGRUP_KODU: string; // varchar MARKA: string; // varchar PLU: string; // varchar ABF3: Currency; // money ABF3KDVDHL: Boolean; // bit ABF4: Currency; // money ABF4KDVDHL: Boolean; // bit SBF3: Currency; // money SBF3KDVDHL: Boolean; // bit SBF4: Currency; // money SBF4KDVDHL: Boolean; // bit end;
Map işlemi yapan method.
procedure Map(AInstance: Pointer; ATypeInfo: PTypeInfo; ADataset: TDataSet); overload;
var
DbValue: TValue;
context: TRttiContext;
rttiField: TRttiField;
rttiFields: TArray<TRttiField>;
begin
if not ADataset.Active then
raise Exception.Create('Bağlantıyı aç uleyn');
context := TRttiContext.Create;
rttiFields := context.GetType(ATypeInfo).GetFields;
if not Assigned(rttiFields) then
Exception.Create('Field Bilgileri alınamadı');
for rttiField in rttiFields do
begin
DbValue := TValue.FromVariant(ADataset.FieldByName(rttiField.Name).value);
rttiField.SetValue(AInstance, DbValue);
end;
context.Free;
end;
Kullanımı:
var AStokKart: TBL_STOK_KART; begin Map(@AStokKart, TypeInfo(TBL_STOK_KART), ADOQuery2); end;
Ek olarak Delphi deki record tiplerinin C/C++ daki struct tipine karşılık geldiğini belirtmekte fayda var.
Her zaman dediğim gibi eksikler/yanlışlar var.
Geliştirmesi size kalmış...
One of the major software engineering challenges is managing change.

