You are not logged in.
Pages: 1
Sry brind this questions but I need help.
this is my model:
TContatos = class(TOrmMany)
private
FSource: TPessoa;
FDest: TContato;
published
property Source: TPessoa read FSource;
property Dest: TContato read FDest;
end;
TContato = class(TOrm)
private
FTelefone: RawUTF8;
FEmail: RawUTF8;
published
property Telefone: RawUTF8 read FTelefone write FTelefone;
property Email: RawUTF8 read FEmail write FEmail;
end;
TRacas = (rPoodle, rViraLata, rPitbull, rShawShaw);
TPet = class(TOrm)
private
FRaca: TRacas;
FNome: RawUTF8;
FDono: TPessoa;
published
property Raca: TRacas read FRaca write FRaca;
property Nome: RawUTF8 read FNome write FNome;
property Dono: TPessoa read FDono write FDono;
end;
TCidade = class(TOrm)
private
FNome: RawUTF8;
published
property Nome: RawUTF8 read FNome write FNome;
end;
TPessoa = class(TOrm)
private
FNome: RawUTF8;
FIdade: Integer;
FCidade: TCidade;
FContatos: TContatos;
FPets: TObjectList;
public
function NewContato(const pEmail, pFone: RawUtf8): TContato;
function NewPet(const pRaca: TRacas; const pNome: RawUTF8): TPet;
property Pets: TObjectList read FPets write FPets;
destructor Destroy; override;
published
property Nome: RawUTF8 read FNome write FNome;
property Idade: Integer read FIdade write FIdade;
property Cidade: TCidade read FCidade write FCidade;
property Contatos: TContatos read FContatos write FContatos;
end;
this is my data on database
Pessoa
id,"nome","idade","cidade"
1,"Pedro","25","1"
2,"Maria","39","2"
pet
id,"raca","nome","dono"
1,0,"miau","1"
2,1,"auau","1"
3,3,"goal","1"
4,1,"sansao","2"
cidade
id,"nome"
1,"Conquista"
2,"Jequié"
contato
id,"telefone","email"
1,"77 988526666","pedro@gmail.com"
2,"77 988526666","joao@gmail.com"
3,"73 999566489","jose@gmail.com"
contatos
id,"source","dest"
1,"1","1"
2,"1","2"
3,"2","3"
4,"2","1"
There is some way to retrieve all Pessoa with all properties? Cidade, Contatos, Pets, How can I do this?
my tries:
var
vPessoas: TPessoa;
vCidade: TCidade;
vContato: TContato;
vOrm: IRestOrm;
vIdPessoa: TID;
vI: Integer;
begin
vPessoas := TPessoa.CreateAndFillPrepareJoined(FRestOrm.Orm, '', [], []);
try
Memo2.Lines.Add(Format('Quantidade de pessoas: %d', [vPessoas.FillTable.RowCount])); // ok return 2 pessoa
while vPessoas.FillOne do
begin
Memo2.Lines.Add(Format('Id: %d', [vPessoas.ID]));
Memo2.Lines.Add(Format('Nome: %s', [vPessoas.Nome]));
Memo2.Lines.Add(Format('Idade: %d', [vPessoas.Idade]));
Memo2.Lines.Add(Format('Cidade: %s', [vPessoas.Cidade.Nome]));
vPessoas.Contatos.FillPrepareMany(FRestOrm.Orm, 'RowId>=?', [], [vPessoas.ID]);
Memo2.Lines.Add(Format('Quantidade de Contatos: %d', [vPessoas.Contatos.FillTable.RowCount])); // ERROR HERE. return 0 should be 2 (pedro and joao) <<<<<<
while vPessoas.Contatos.Dest.FillOne do // fillone return false
begin
Memo2.Lines.Add(Format(' Contato: %s - %s', [vI, vPessoas.Contatos.Dest.Email, vPessoas.Contatos.Dest.Telefone])); //is not retrieving email and telefone value
end;
vPessoas.FillClose;
// pets is nil on this moment then i do this, but i don´t know if is the better aproach. <<<<<<
vPessoas.Pets := FRestOrm.RetrieveList(TPet, 'dono=?', [vPessoas.Id]);
Memo2.Lines.Add(Format('Quantidade de Pets: %d', [vPessoas.Pets.Count])); ok 3 from first pessoa and 1 to second
for vI := 0 to vPessoas.Pets.Count-1 do
Memo2.Lines.Add(Format(' Pets %d: %s', [vI, TPet(vPessoas.Pets[vI]).Nome]));
Memo2.Lines.Add('-----------------------');
vPessoas.Pets.Clear;
vPessoas.Pets.Free;
vPessoas.Pets := nil;
end;
finally
vPessoas.Free;
end;
I try too
vPessoas := TPessoa.CreateAndFillPrepareMany(FRestOrm.Orm, '', [], []);
but this way it retrieve 4 pessoa on while
I try too
vPessoas.Contatos.FillPrepareMany(FRestOrm.Orm, 'RowId>=?', [], [vPessoas.ID]);
but vPessoas.Contatos.FillTable.RowCount return 0 and vPessoas.Contatos.FillOne return false
I try too
vPessoas.Contatos.FillMany(FRestOrm.Orm, vPessoas.ID);
vPessoas.Contatos.FillTable.RowCount return 2 ok but vPessoas.Contatos.FillOne return false
Oh my god!!!! I read documentation already and cannot make this work.
Offline
Pages: 1