Что имеется ввиду: надо делать ровно по одному элементу на каждото представителя источника данных и предоставлять им вот такой интерфейс
#pas
TDataSource = record
execProc:function():integer;
execScalarProc:function(procCallBack:TExecScalarCallback):integer;
queryProc:function(procCallBack:TQueryCallback):integer;
end;
DS_SQLite
DS_MySQL
DS_Ole
DS_ODBC
ну и по одному элементу на каждую операцию
DSC_Exec
DSC_ExecScalar
DSC_Query
в таком виде во всяком случае решается проблема с заменой источника данных в большой программе, чего давно весьма и весьма не хватает.
по поводу всяких там трансляторов я бы торопиться не стал. Не очень удачная это идея...