看一下以下的代码:
我这样使用它:
如您所见,我在查询中将表名写成静态字符串('Table_1'),我想获取枚举名称并将其作为表名传递给选择语句,以使代码更易用。
另一个问题是如何获取传递的枚举大小以获取字段名称。如您所见,我目前将当前枚举名称与单位名称进行比较,这是不好的想法,有人可以帮助我吗?
至少我想开发一个类,在我的数据库中为每个表编写一个枚举,并将其传递给我的类,我的类的方法使用它来选择、插入、编辑等操作。
我想为自己编写一个微型ORM。
谢谢。
uses
TypInfo, Dialogs, Classes, Generics.Collections, ADODB, DB, SysUtils;
type
TTable_1 = (ID, FName, LName, FatherName);
type
TBaseTable<TableType> = class(TADOQuery)
public
constructor Create(AOwner: TComponent); Override;
procedure Select(DS: TDataSource);
end;
implementation
{ TBaseTable<TableType> }
constructor TBaseTable<TableType>.Create(AOwner: TComponent);
begin
inherited;
Self.Connection := DataModule3.ADOConnection1;
Self.Connection.Connected := True;
end;
procedure TBaseTable<TableType>.Select(DS: TDataSource);
var
Query: string;
EnumIndex: Byte;
begin
EnumIndex := 0;
Query := 'SELECT ';
while (GetEnumName(TypeInfo(TableType), EnumIndex) <> UnitName) do
begin
Query := Query + GetEnumName(TypeInfo(TableType), EnumIndex) + ',';
Inc(EnumIndex);
end;
Query := Copy(Query, 0, Length(Query) - 1);
Query := Query + ' FROM Table_1';
Close;
SQL.Text := Query;
Open;
DS.DataSet := Self;
end;
我这样使用它:
var
Test: TBaseTable<TTable_1>;
begin
Test := TBaseTable<TTable_1>.Create(Self);
Test.Select(DataSource1);
end;
如您所见,我在查询中将表名写成静态字符串('Table_1'),我想获取枚举名称并将其作为表名传递给选择语句,以使代码更易用。
另一个问题是如何获取传递的枚举大小以获取字段名称。如您所见,我目前将当前枚举名称与单位名称进行比较,这是不好的想法,有人可以帮助我吗?
至少我想开发一个类,在我的数据库中为每个表编写一个枚举,并将其传递给我的类,我的类的方法使用它来选择、插入、编辑等操作。
我想为自己编写一个微型ORM。
谢谢。
TRttiEnumerationType.GetName<T>
尚未公开 (: http://qc.embarcadero.com/wc/qcmain.aspx?d=90339)。 - Jeroen Wiert Pluimers