O combustível do ORMBr sempre será as classes modelos, e para que tenhamos alto desempenho, precisamos conhecer o que adicionar a esses modelos para que tenhamos sincronização com nosso banco de dados.
Apresento aqui para vocês as correspondências entre os tipos usados pelo ORMBr e os tipos criados no seu banco dados já existente.
Apresento aqui para vocês as correspondências entre os tipos usados pelo ORMBr e os tipos criados no seu banco dados já existente.
procedure TFieldTypeRegister.GetFieldTypeDefinition(AColumn: TColumnMIK);
begin
case AColumn.FieldType of
ftByte, ftShortint, ftSmallint, ftWord:
begin
AColumn.TypeName := 'SMALLINT';
end;
ftInteger, ftLongWord:
begin
if FDriverName = dnMSSQL then AColumn.TypeName := 'INT'
else if FDriverName = dnMySQL then AColumn.TypeName := 'INT'
else AColumn.TypeName := 'INTEGER';
end;
ftLargeint: AColumn.TypeName := 'NUMERIC(%l)';
ftString: AColumn.TypeName := 'VARCHAR(%l)';
ftWideString: AColumn.TypeName := 'NVARCHAR(%l)';
ftFixedChar: AColumn.TypeName := 'CHAR(%l)';
ftFixedWideChar: AColumn.TypeName := 'NCHAR(%l)';
ftDate: AColumn.TypeName := 'DATE';
ftTime: AColumn.TypeName := 'TIME';
ftDateTime: AColumn.TypeName := 'DATETIME';
ftTimeStamp: AColumn.TypeName := 'TIMESTAMP';
ftFloat:
begin
if FDriverName = dnMSSQL then AColumn.TypeName := 'FLOAT'
else if FDriverName = dnMySQL then AColumn.TypeName := 'FLOAT'
else if FDriverName = dnPostgreSQL then AColumn.TypeName := 'NUMERIC(%p,%s)'
else AColumn.TypeName := 'DECIMAL(%p,%s)';
end;
ftSingle: AColumn.TypeName := 'REAL';
ftExtended:
begin
if FDriverName = dnMSSQL then AColumn.TypeName := 'DOUBLE'
else if FDriverName = dnMySQL then AColumn.TypeName := 'DOUBLE'
else AColumn.TypeName := 'DOUBLE PRECISION';
end;
ftCurrency:
begin
if FDriverName = dnMSSQL then AColumn.TypeName := 'MONEY'
else if FDriverName = dnMySQL then AColumn.TypeName := 'DECIMAL(%p,%s)'
else AColumn.TypeName := 'NUMERIC(%p,%s)';
end;
ftBCD, ftFMTBcd:
begin
if FDriverName = dnPostgreSQL then AColumn.TypeName := 'MONEY'
else if FDriverName = dnMSSQL then AColumn.TypeName := 'MONEY'
else AColumn.TypeName := 'DECIMAL(%p,%s)';
end;
ftMemo:
begin
if FDriverName = dnFirebird then AColumn.TypeName := 'BLOB SUB_TYPE TEXT'
else AColumn.TypeName := 'LOGBLOB';
end;
ftWideMemo, ftBlob:
begin
if FDriverName = dnFirebird then AColumn.TypeName := 'BLOB SUB_TYPE TEXT'
else AColumn.TypeName := 'TEXT';
end;
else
raise Exception.Create('Tipo da coluna definida, não existe no ORMBr.');
end;
end;
Dependendo do tipo definido na propriedade da sua classe modelo, o ORMBr irá identificar o tipo do campos no seu banco de dados, exemplo, se definirmos a propriedade do tipo ftWideMemo ou ftBlob, o ORMBr irá identificar que no seu banco dados a coluna é BLOB SUB_TYPE TEXT no caso o banco seja Firebird caso contrário irá identificar como TEXT para os demais bancos.
Vemos aqui que o tipo definido no ORMBr, poderá se comportar diferente dependendo do banco usado, então pessoal atenção a esse código, qualquer situação adversa me comunique, pois acredito que não pensei em todas as situações e tipos.
Vemos aqui que o tipo definido no ORMBr, poderá se comportar diferente dependendo do banco usado, então pessoal atenção a esse código, qualquer situação adversa me comunique, pois acredito que não pensei em todas as situações e tipos.






