Seja bem vindo, e otima leitura. O combustivel do ORMBr sempre sera as classes modelos, e para que tenhamos alto desempenho, precisamos conhecer o que adicionar a esses modelos para que tenhamos sincronizacao com nosso banco de dados.Apresento aqui para voces as correspondencias entre os tipos usados pelo ORMBr e os tipos criados no seu banco dados ja 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, nao existe no ORMBr.'); end;end;Dependendo do tipo definido na propriedade da sua classe modelo, o ORMBr ira identificar o tipo do campos no seu banco de dados, exemplo, se definirmos a propriedade do tipo ftWideMemo ou ftBlob, o ORMBr ira identificar que no seu banco dados a coluna e BLOB SUB_TYPE TEXT no caso o banco seja Firebird caso contrario ira identificar como TEXT para os demais bancos. Vemos aqui que o tipo definido no ORMBr, podera se comportar diferente dependendo do banco usado, entao pessoal atencao a esse codigo, qualquer situacao adversa me comunique, pois acredito que nao pensei em todas as situacoes e tipos. Muitos pensam que usar o ORMBr perderia performance, gente o ORMBr trabalho com duas linhas de frente para voces.1a ) Ele fara de forma SUPER simples TUDO o que voce teria que fazer manual, como SELECT, Adicionar TFields e configurar um a um, gerenciar abertura de subtabelas em mestre-detalhe, TUDO isso passa a ser automatizado.2a) Ele fara de forma SURPER simples tudo o que os componentes DataSet ja faz, pois o que voce achar que um TFDQuery faz, quando voce alimenta os TFields dele, em seguida dispara um Post e um ApplyUpdate?Simplesmente montam o comando SQL internamente e mandam para o banco, e exatamente o que o ORMBr faz tambem.Se e assim que funciona, como podemos perder performance ? Seja