edregis
unread,Jun 3, 2009, 11:21:31 AM6/3/09Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to tiOPF.br
Achei que tinha resolvido esse problema, mas na verdade não está me
retornando o objeto preenchido.
Quando chamo o MeuObjeto.ReadThis, ele até passa melo método na minha
unit HardCoded, atribui os valores corretamente às propriedades do
objeto, mas quando vou usar o objeto instanciado, essas propriedades
estao em branco.
No meu BOM tenho a classe TFuncionario = class(TtiObject), e declarei
o método ReadThis da seguinte maneira:
TFuncionario = class(TtiObject)
private
...
protected
...
public
...
procedure ReadThis; override;
published
...
end;
implementation
...
procedure TFuncionario.ReadThis;
begin
inherited;
end;
Obs: Já tirei o override e o inherited, mas não rolou.
E na minha unit HardCoded, o meu Visitor ReadThis está assim:
TVisFuncionario_ReadThis = class(TVisOwnedQrySelect)
protected
function AcceptVisitor: boolean; override;
procedure Init; override;
procedure SetupParams; override;
procedure MapRowToObject; override;
end;
procedure RegisterVisitorsFuncionario;
implementation
...
procedure RegisterVisitorsFuncionario;
begin
// Note: Registration order is important
GTIOPFManager.RegReadVisitor(TVisFuncionario_Read);
GTIOPFManager.RegReadThisVisitor(TVisFuncionario_ReadThis);
GTIOPFManager.RegSaveVisitor(TVisFuncionario_Create);
GTIOPFManager.RegSaveVisitor(TVisFuncionario_Update);
GTIOPFManager.RegSaveVisitor(TVisFuncionario_Delete);
end;
function TVisFuncionario_ReadThis.AcceptVisitor: boolean;
begin
Result:= (Visited is TFuncionario);
end;
procedure TVisFuncionario_ReadThis.Init;
begin
Query.SQL.Text :=
'select ' +
' OID as OID' +
' ,NM_FUNCIONARIO as NM_FUNCIONARIO ' +
' ,VL_SALARIO as VL_SALARIO ' +
' ,NR_TELEFONE as NR_TELEFONE ' +
' ,DS_EMAIL as DS_EMAIL ' +
' ,FUNCIONARIO_FOTO as FUNCIONARIO_FOTO ' +
'from ' +
'Funcionario ' +
'where OID = :OID' ;
end;
procedure TVisFuncionario_ReadThis.MapRowToObject;
var
lFuncionario: TFuncionario;
stream: TMemoryStream;
Begin
lFuncionario := Visited as TFuncionario;
begin
lFuncionario := TFuncionario.Create;
lFuncionario.OID.AssignFromTIQuery('OID',Query);
lFuncionario.FuncionarioNome := Query.FieldAsString
['NM_FUNCIONARIO'];
lFuncionario.FuncionarioSalario := Query.FieldAsFloat
['VL_SALARIO'];
lFuncionario.FuncionarioTelefone := Query.FieldAsString
['NR_TELEFONE'];
lFuncionario.FuncionarioEmail := Query.FieldAsString['DS_EMAIL'];
stream := TMemoryStream.Create;
try
try
Query.AssignFieldAsStream('FUNCIONARIO_FOTO', stream);
stream.Position := 0;
stream.SaveToStream(lFuncionario.FuncionarioFoto as
TMemoryStream);
except
on E:Exception do
ShowMessage('Erro ao ler imagem do banco de dados' + #10 +
e.message);
end;
lFuncionario.ObjectState := posClean ;
finally
stream.Free;
end;
end;
end;
procedure TVisFuncionario_ReadThis.SetupParams;
begin
Query.ParamAsString['OID']:= Visited.OID.AsString;
end;
Ele está passando pelo MapRowToObject, está atribuindo corretamente os
valores nas propriedades, mas na hora de retornar isso para o objeto
instanciado, aparece tudo em braco.
O que será que pode ser?
Obrigado,
Edelson.