Bem Vindo, Visitante
Você tem que se registrar antes, para poder colocar mensagens no Fórum.

Nome de usuário/Email:
  

Senha
  





Pesquisar Nos Fóruns

(Pesquisa Avançada)

Estatísticas do Fórum
» Membros: 400
» Último Membro: Elethryck
» Tópicos do Fórum: 96
» Inserção de Mensagens: 401

Estatísticas Completas

usuários Online
Estão de momento 32 usuárioes online.
» 0 Membro(s) | 32 Visitante(s)

Últimos Tópicos
Método clone pelo ORMBR
Fórum: Usando ObjectSet
Última Mensagem: Deivison Davi Albring
09-12-2019, 09:38 AM
» Respostas: 0
» Visualizações: 385
ormbr.types.database
Fórum: Como Usar
Última Mensagem: ailtonbrc
11-11-2019, 11:06 AM
» Respostas: 1
» Visualizações: 1,232
ExecuteDirect X ExecuteSc...
Fórum: Como Usar
Última Mensagem: Isaque Pinheiro
26-09-2019, 09:57 AM
» Respostas: 1
» Visualizações: 1,052
dúvida de iniciante -> le...
Fórum: Como Usar
Última Mensagem: Gr@c@
24-09-2019, 08:38 AM
» Respostas: 0
» Visualizações: 586
Executar uma StoredProced...
Fórum: Como Usar
Última Mensagem: Gr@c@
23-09-2019, 06:11 PM
» Respostas: 0
» Visualizações: 653
link tortoise-git
Fórum: Como Usar
Última Mensagem: Isaque Pinheiro
26-08-2019, 11:13 AM
» Respostas: 1
» Visualizações: 1,347
TORMBrJson.JsonToObjectLi...
Fórum: Código Fonte
Última Mensagem: Isaque Pinheiro
13-07-2019, 03:07 PM
» Respostas: 1
» Visualizações: 1,319
Fechar conexão
Fórum: Como Usar
Última Mensagem: MaikonPanazzolo
04-06-2019, 05:03 PM
» Respostas: 7
» Visualizações: 4,965
Conexão com banco de dado...
Fórum: Como Usar
Última Mensagem: MaikonPanazzolo
04-06-2019, 11:59 AM
» Respostas: 0
» Visualizações: 1,137
Como gravar TBlob de Stre...
Fórum: Como Usar
Última Mensagem: marson
31-05-2019, 12:14 PM
» Respostas: 0
» Visualizações: 1,058

 
  Maneira correta de configurar a relação OneToMany / ManyToOne no model
Inserido por: willian - 20-12-2017, 03:54 PM - Fórum: Como Usar - Respostas (3)

Usando o ORMBr, estou tentando salvar o seguinte objeto:

Código:
procedure Tform_Principal.btntestepessoaClick(Sender: TObject);

begin
PersonTeste := TPessoa.create();
PersonTeste.Nome := 'João de Souza';  //propriedade é salva com sucesso no DB
PersonTeste.EstadoCivil := ecCasado; //propriedade é salva com sucesso no DB
PersonTeste.sexo := sxMasculino; //propriedade é salva com sucesso no DB
PersonTeste.Tipo := psFisica; //propriedade é salva com sucesso no DB

PersonTeste.Telefones.Add(TTelefone.create(55,11,981481054));  // Propriedade do Tipo ObjectList<TTelefone> não é salva

PersonTeste.Salvar;

end;

A propriedade "personteste.telefones" é do tipo  ObjectList<TTelefone>
e está desse jeito na classe TPessoa :


 
Código:
[Association(OneToMany,'id','telefone','ID_Pessoa')]  //verificar maneira correta -- ORMBr

  property Telefones : TObjectList<TTelefone> read FTelefones write SetTelefones;


A classe TTelefone está assim:


Código:
[Entity]
[Table('Telefone', 'Cadastro de telefones')]
 [PrimaryKey('id', AutoInc,NoSort,True,'Chave Primária')]
  [Sequence('seq_telefone')]
 [OrderBy('id')]
TTelefone = class
  private
    Fddd: integer;
    Fid: Integer;
    FNumero: integer;
    FTipo: String;
    Fddi: integer;
    FId_pessoa: integer;
    public constructor Create(Yddi,Yddd,Ytelefone:integer);
        procedure Setddd(const Value: integer);
    procedure Setddi(const Value: integer);
    procedure Setid(const Value: Integer);
    procedure SetNumero(const Value: integer);
    procedure SetTipo(const Value: String);
    procedure SetId_pessoa(const Value: integer);
     published
  [Restrictions([NoUpdate, NotNull])]
  [Column('id', ftInteger)]

property id : Integer read Fid write Setid;
[Column('ddi', ftInteger)]
property ddi : integer read Fddi write Setddi;
[Restrictions([NotNull])]
[Column('ddd', ftInteger)]
property ddd : integer read Fddd write Setddd;
[Restrictions([NotNull])]
[Column('Numero', ftInteger)]
property Numero : integer read FNumero write SetNumero;
[Column('Tipo', ftString,8)]
property Tipo : String read FTipo write SetTipo;
[ForeignKey('fk_telefone_Pessoa', 'id_pessoa', 'pessoa', 'id  ', Cascade, Cascade)]
[Restrictions([NoUpdate, NotNull])]
[Column('id_pessoa', ftInteger)]
property Id_pessoa : integer read FId_pessoa write SetId_pessoa;

Quero que sejam salvos os objetos da lista(TTelefone), ao salvar o objeto principal (TPessoa), onde estou errando?

Grato,

Imprimir este artigo

  Chamar TSessionObjectSet usando tipo genérico, é possível?
Inserido por: willian - 20-12-2017, 10:58 AM - Fórum: Como Usar - Respostas (2)

Acho que minha pergunta é mais relacionada ao Delphi (ainda estou aprendendo), mas como também tem relação sobre como usar o ORMBr, acho que deve ser o local correto


Estou querendo criar uma função que faz a persistência de um objeto usando o OrmBr, mas como nesta função eu uso generics, está dando erro na hora de chamar TSessionObjectSet<M>


Código:
function TBancoDeDados.SalvarObjeto<M>(Objeto: M): Boolean;
Var Connection : IDBConnection;
    Sessao :   TSessionObjectSet<TPessoa>;
    idObjeto : Integer;

begin

    Try
    idObjeto := GetIDFromGenericObject<M>(Objeto);
    connection := bancodedados.getConnection;

    if Not  conexao.Connected then Conectar('Firebird');
     Sessao := TSessionObjectSet<M>.create(connection,1); /////// E2511 Type parameter 'M' must be a class type

     if (idObjeto > 0) then
      Sessao.Update(objeto,idObjeto.toString) else Sessao.insert(self);

    Result := True;
  Except
   on E:Exception do raise Exception.Create(E.Message);

  End;

end;

O erro está acontecendo porque A Classe TSessionObjectSet tem uma constraint, que restringe o parâmetro M somente a classes:

>>>>>>> TSessionObjectSet<M: class, constructor> = class(TSessionAbstract<M>)

Alguém sabe como contornar isto e conseguir chamar TSessionObjectSet usando o Generics?

Imprimir este artigo

  Como definir a propriedade do tipo enum (Enumeration) no ORMBr?
Inserido por: willian - 19-12-2017, 02:25 PM - Fórum: Como Usar - Respostas (1)

Eu setei uma propriedade de uma classe TPessoa, como enumeration.

[Enumeration(etInteger,'0,1')]
TSexo = (sxMasculino,sxFeminino);

TPessoa = class
[Column('Sexo', ftSmallInt)]
property sexo : TSexo;
end;


Acontece que ao tentar salvar este objeto no banco, estou recebendo o seguinte erro:

Invalid type. Type enumerator supported [ftBoolena,ftInteger,ftFixedChar,ftString]

o trecho do código que retorna este erro é o seguinte, (ormbr.rtti.helper) linha 208
   

Código:
if LValue.AsOrdinal >= 0 then
    begin
      case AFieldType of
        ftFixedChar: Result := TValue.From<Char>(LEnumeration.EnumValues[LValue.AsOrdinal][1]);
        ftString:    Result := TValue.From<string>(LEnumeration.EnumValues[LValue.AsOrdinal]);
        ftInteger:   Result := TValue.From<Integer>(Integer(LValue.AsOrdinal));
        ftBoolean:   Result := TValue.From<Boolean>(Boolean(LValue.AsOrdinal));
      else
        raise Exception.Create('Invalid type. Type enumerator supported [ftBoolena,ftInteger,ftFixedChar,ftString]');  
      end



Isto significa que não posso utilizar o tipo smallInt em um campo enumerado?



Arquivo(s) anexado(s) Miniatura(s)
   
Imprimir este artigo

  Mapeamento de herança - Como o ORMBr se comporta?
Inserido por: willian - 14-12-2017, 02:46 PM - Fórum: Como Usar - Respostas (2)

Estou fazendo alguns testes no ORMBr e surgiu uma dúvida:

Digamos que eu tenha uma herança, por exemplo da seguinte maneira:

Type TPessoa = class

  published
  property Telefone : TTelefone;

end;

TPessoaFisica = Class(TPessoa)

  published
  property cpf : String;

end;

//Poderia haver uma outra classe, TPessoaJuridica, com a propriedade CNPJ ao invés de CPF.

De que maneira devo setar os atributos para que o ORMBr faça o mapeamento no banco de dados?


Grato,

Imprimir este artigo

  Exemplo prático
Inserido por: willian - 13-12-2017, 12:26 PM - Fórum: Como Usar - Respostas (2)

Boa tarde,

Estou fazendo uns testes com o ORMBr.

1) Criei um modelo, a classe TPessoa, e setei todos os atributos, conforme os exemplos documentados.
2) Criei um datamodule que faz a conexão e retorna a interface objeto oConnection : IDBConnection;(Estou usando Firedac / Firebird)

Agora eu preciso de um exemplo prático de como fazer a persistência de um objeto, por exemplo do tipo TPessoa. Este objeto tem alguns atributos do tipo association, com outras classes, o Banco de dados já foi criado, e está vazio;

minha expectativa é que o ORMBr seja capaz de gerenciar tudo isto sozinho no banco de dados, baseado nos atributos que eu 'setei'.

Alguém poderia me mostrar um exemplo prático de como fazer isso? Acredito que usando o OrmBr isto provavelmente seja extremamente simples, mas não encontrei um exemplo especificamente para isto.

Resumindo: Persistir um objeto que já tem seus atributos setados para o OrmBr no banco de dados, de modo simples.

Se possível, gostaria de ver também um exemplo de como efetuar a recuperação deste objeto depois de persistido no banco de dados.

Imprimir este artigo

  ERRO AO ABRIR DEMO ORMBrFireDac.dproj - Delphi XE7
Inserido por: willian - 11-12-2017, 03:09 PM - Fórum: Como Usar - Respostas (1)

Baixei o ORMBr pelo Tortoise Git mas  ao abrir o projeto demo em
ORMBrFireDac.dproj está dando erro :

Error Reading Form: "Form 3"

Error reading FDMaster.UpdateOptions.AssignedValues:Invalid property value

Veja Screenshot anexo

Se clico em Ignore, outras 9 mensagens de erro parecidas aparecem em sequencia.




O Demo Compila, mas mostra algumas mensagens de erro como esta:

Project ORMBrFireDac.exe raised exception class EDatabaseError with message 'Field 'lookup_name' not found



Arquivo(s) anexado(s) Miniatura(s)
   
Imprimir este artigo

  Campo AutoInc
Inserido por: wanderleywm - 06-12-2017, 11:20 AM - Fórum: Como Usar - Respostas (7)

Bom dia,

Estou analisando, e pude observar que no primary key temos a opção do campo autoinc. Adicionei a sequencia e estou testando com o Firebird, porém o mesmo não está incrementando o ID.

Ex:
  [Entity]
  [Table('Servico', '')]
  [PrimaryKey('Servico_id', AutoInc, NoSort, True, 'Chave primária')]
  [Sequence('seq_Servico')]
  [Indexe('idx_servico_descricao', 'descricao')]


Tem mais alguma configuração que preciso fazer ou terei que criar a sequencia no banco?

obs: a criação de tabelas e campos está funcionando perfeitamente.

Imprimir este artigo

  Falhas ao utilizar o TRegisterClass.RegisterView()
Inserido por: MatheusRibeiro - 29-11-2017, 08:53 AM - Fórum: Código Fonte - Respostas (2)

Em todos os meus forms estou utilizando o seguinte bloco


Código:
initialization
  TRegisterClass.RegisterView(TViewMeuForm);

Até ai tudo bem, só que quando crio o form ele some desse RegisterClass, ai se eu utilizo esta programação

Código:
iQtdMenus := (TRegisterClass.ViewList.Count - 1); 
for I  := 0 to iQtdMenus do
begin
  if(TRegisterClass.ViewList.Items[I].ClassName = cNomeMenu)then
  begin
   [...]
  end;
Este form que eu já abri, não aparece mais na TRegisterClass.ViewList. Está correto acontecer isso?

Outro problema é quando eu utilizo esta linha (peguei em um dos exemplos)

Código:
TContainerObjectSet<T>.Create(TConexao.GetInstance.Connection, 10);
As views registradas com "TRegisterClass.RegisterView(TViewMeuForm);" somem da ViewList e o método "TRegisterClass.ViewList.Count"  retorna 0

Imprimir este artigo

  Algumas dúvidas sobre o Model.
Inserido por: Osiel Gomes - 24-11-2017, 08:47 PM - Fórum: Usando DataSet - Respostas (2)

Olá!!!

Algumas dúvidas:

1ª Qual a real utilização do ForeignKey no model por exemplo:

    [Restrictions([NotNull, NoUpdate])]
    [Column('ID_PESSOA', ftInteger)]
    [ForeignKey('FK_PESSOA_TELEFONE_PESSOA_ID_PE', 'ID_PESSOA', 'PESSOA', 'ID', Cascade, Cascade)]
    [Dictionary('ID_PESSOA', 'Mensagem de validação', '', '', '', taCenter)]
    property ID_PESSOA: Nullable<Integer> read FID_PESSOA write FID_PESSOA;


2ª Só serve para atualização de campo no banco com o Builder? Eu tenho no model o Association e comentei essas linhas acima e salva normal...

3ª Pelo que eu entendi o primordial é a Association em caso de chaves estrangeiras como por exemplo master-detail certo?

4ª O Join colunm do model é para colocar campos transientes no seu select certo?

Foi mal por tantas dúvidas hehehe... Rolleyes

Imprimir este artigo

  Erro de Tycast campo Blob
Inserido por: Osiel Gomes - 24-11-2017, 08:39 PM - Fórum: Usando DataSet - Respostas (1)

Olá!!!

Tenho um campo Blob de 80 no banco firebird 2.5 e no meu model esta dessa forma:

private
  FOBSERVACAO: Nullable<TBlob>;

public
  [Column('OBSERVACAO', ftBlob )]
  [Dictionary('OBSERVACAO', 'Mensagem de validação', '', '', '', taLeftJustify)]
  property OBSERVACAO: Nullable<TBlob> read FOBSERVACAO write FOBSERVACAO;

Porém ao salvar da erro de typecast invalid... Se eu mudar para String no lugar de TBlob ele salva porém no banco salva caracteres estranho.

Alguma sugestão?


(24-11-2017, 08:39 PM)Osiel Gomes Escreveu: Olá!!!

Tenho um campo Blob de 80 no banco firebird 2.5 e no meu model esta dessa forma:

private
  FOBSERVACAO: Nullable<TBlob>;

public
  [Column('OBSERVACAO', ftBlob )]
  [Dictionary('OBSERVACAO', 'Mensagem de validação', '', '', '', taLeftJustify)]
  property OBSERVACAO: Nullable<TBlob> read FOBSERVACAO write FOBSERVACAO;

Porém ao salvar da erro de typecast invalid... Se eu mudar para String no lugar de TBlob ele salva porém no banco salva caracteres estranho.

Alguma sugestão?

Para quem tiver o problema eu resolvi tirando o Nullable, ficando assim:

private
  FOBSERVACAO: TBlob;

public
  [Column('OBSERVACAO', ftBlob )]
  [Dictionary('OBSERVACAO', 'Mensagem de validação', '', '', '', taLeftJustify)]
  property OBSERVACAO: TBlob read FOBSERVACAO write FOBSERVACAO;

Imprimir este artigo