This is what I do to synchronize 2 different DB systems:
I define constants this way (NOTE: NOT SHURE IF WHAT POSTED IS 100% COMPATIBLE WITH THE ENGINES I INDICATE):
const
// //PsgrSQL//MSSQL //PostgreSQL //
CAST_PFX = '' ;//'cast('; //'cast('; // FOR UNSUPPORTED TYPES
CAST_SFX_AS = ' as ';//' as nvarchar(36)) as ';//' as varchar(36)) as ';// FOR UNSUPPORTED TYPES
//MSSQL //PostgreSQL //
TID_PFX = ''; //< TABLE IDENTIFIER PREFIX //'['; //'public'; //
TID_SFX = ''; //< TABLE IDENTIFIER SUFIX //']'; //'' ; //
IDF_PFX = ''; //< IDENTIFIER PREFIX //'['; //'"' ; //
IDF_SFX = ''; //< IDENTIFIER SUFIX //']'; //'"' ; //
SELECT_FMT = 'SELECT %s FROM %s'; // SELDOM USED....
// SOME "STANDARD" ASSIGNATIONS/COMPARITIONS //
FIELD_ENABLED_EQUALS_TO_TRUE = 'ENABLED = ''1''';
FIELD_ENABLED_EQUALS_TO_FALSE = 'ENABLED = ''0''';
LOGIC_CHECK_IS_TRUE_FMT = '%S = ''1''';
LOGIC_CHECK_IS_FALSE_FMT = '%S = ''0''';
BEGIN_TRANSACTION = 'BEGIN TRANSACTION' ;
END_TRANSACTION = 'COMMIT TRANSACTION';
// //
// TABLE PARAMETER //
//_____________________________________________________________________________________________________________________________________//
PARAMETER_TABLE_NAME = TID_PFX+ 'PARAMETER' +TID_SFX;
PARAMETER__ID = IDF_PFX+ 'PARAMETER_ID' +IDF_SFX;
PARAMETER_VALUE = IDF_PFX+ 'VALUE' +IDF_SFX;
PARAMETER_DATA_TYPE = IDF_PFX+ 'DATA_TYPE' +IDF_SFX;
PARAMETER_COMMENTS = IDF_PFX+ 'COMMENTS' +IDF_SFX;
PARAMETER_Q__ID = PARAMETER_TABLE_NAME +'.'+ PARAMETER__ID ;
PARAMETER_Q_VALUE = PARAMETER_TABLE_NAME +'.'+ PARAMETER_VALUE ;
PARAMETER_Q_DATA_TYPE = PARAMETER_TABLE_NAME +'.'+ PARAMETER_DATA_TYPE;
PARAMETER_Q_COMMENTS = PARAMETER_TABLE_NAME +'.'+ PARAMETER_COMMENTS ;
PARAMETER_NONKEY_FIELD_LIST = PARAMETER_VALUE
+ ', '+ PARAMETER_DATA_TYPE
+ ', '+ PARAMETER_COMMENTS
;
PARAMETER_FIELD_LIST = PARAMETER__ID
+ ', '+ PARAMETER_NONKEY_FIELD_LIST
;
PARAMETER_INSERT_VALUE_LIST_FMT = '%s, %s, %s, %s';
PARAMETER__ID_EQUALS_TO_FMT = PARAMETER__ID +' = %s';
PARAMETER_Q__ID_EQUALS_TO_FMT = PARAMETER_Q__ID +' = %s';
PARAMETER_SELECT_FIELD_LIST = PARAMETER__ID
+ ', '+ PARAMETER_VALUE
+ ', '+ PARAMETER_DATA_TYPE
+ ', '+ PARAMETER_COMMENTS
;
PARAMETER_SELECT_Q_FIELD_LIST = PARAMETER_Q__ID
+ ', '+ PARAMETER_Q_VALUE
+ ', '+ PARAMETER_Q_DATA_TYPE
+ ', '+ PARAMETER_Q_COMMENTS
;
SQL_PARAMETER_INSERT_FMT = 'INSERT INTO '+ PARAMETER_TABLE_NAME +' ('+ PARAMETER_FIELD_LIST +') VALUES ('+ PARAMETER_INSERT_VALUE_LIST_FMT +');';
Later:
SqlText := '';
SourceDataSetPARAMETERS.First;
while not SourceDataSetPARAMETERS.EOF do begin
SqlText := SqlText + Format(SQL_PARAMETER_INSERT_FMT,
[SourceDataSetPARAMETERS.FieldByName(PARAMETER__ID ).AsString
,SourceDataSetPARAMETERS.FieldByName(PARAMETER_VALUE ).AsString
,SourceDataSetPARAMETERS.FieldByName(PARAMETER_DATA_TYPE).AsString
,SourceDataSetPARAMETERS.FieldByName(PARAMETER_COMMENTS ).AsString
]);
SourceDataSetPARAMETERS.Next;
end;
// AFTER THIS LINE YOU KNOW IF EVERYTHING IS "IN" OR EVERYTHING IS "OUT" //
// SqlText can be a HUUUUUUUUUUUUUUGE string //
SQLDestConnection.ExecuteDirect(BEGIN_TRANSACTION
+SqlText
+END_TRANSACTION
);