Inaccessible Value - Valor do DataSet
19/01/2006
0
Ola Pssoal
Estou com este erro que está muito estranho para mim. Vou tentar explicar:
Tenho uma função que abre uma Determinada tabela passando uma SQL deSelect para um ClientDataSet. Neste mesmo ClientDataSet, no DataSet Ligado a ele, eu tenho uma outra rotina ligada ao evento AfterSroll, isto é, toda vez que eu abrir ou mover o ponteiro deste DataSet, minha rotina vai ser disparada.
Nesta Rotina de AfterScroll, eu acesso os valores do ClientDataSet ligado a este DataSet usando a variável Self. No meu form, eu coloquei um DataSource que liga este ClientDataSet:
ShowMessage(Self.DAtaSource.DataSet.FieldValues[´CAMPO´]);
Quando eu rodo essa rotina, dá o erro de Access Violation e o Watch List aparece nesse mesmo campo o erro:
Self.DAtaSource.DataSet.FieldValues[´CAMPO´]) : Inaccessible Value
Minhas dúvidas são as seguintes:
1) Ao executar o Open em um ClientDataSet, ele dispara o evento AfterScroll, mas essa tabela já está aberta?
2) Se estiver eu poderia acessar todos os campos como eu estou fazendo acima certo?
3) O que ocasiona este erro? Assim pode ficar mais fácil para eu achar meu erro.
Valew a todos
Estou com este erro que está muito estranho para mim. Vou tentar explicar:
Tenho uma função que abre uma Determinada tabela passando uma SQL deSelect para um ClientDataSet. Neste mesmo ClientDataSet, no DataSet Ligado a ele, eu tenho uma outra rotina ligada ao evento AfterSroll, isto é, toda vez que eu abrir ou mover o ponteiro deste DataSet, minha rotina vai ser disparada.
Nesta Rotina de AfterScroll, eu acesso os valores do ClientDataSet ligado a este DataSet usando a variável Self. No meu form, eu coloquei um DataSource que liga este ClientDataSet:
ShowMessage(Self.DAtaSource.DataSet.FieldValues[´CAMPO´]);
Quando eu rodo essa rotina, dá o erro de Access Violation e o Watch List aparece nesse mesmo campo o erro:
Self.DAtaSource.DataSet.FieldValues[´CAMPO´]) : Inaccessible Value
Minhas dúvidas são as seguintes:
1) Ao executar o Open em um ClientDataSet, ele dispara o evento AfterScroll, mas essa tabela já está aberta?
2) Se estiver eu poderia acessar todos os campos como eu estou fazendo acima certo?
3) O que ocasiona este erro? Assim pode ficar mais fácil para eu achar meu erro.
Valew a todos
Seu_madruga
Curtir tópico
+ 0
Responder
Posts
19/01/2006
Seu_madruga
Complementando minha dúvida pois sei que está muito confusa:
Dentro do Evento AfterScroll, depois que eu ja dei um Open da Tabela e os registros já estão selecionados, dentro do evento eu tenho acesso aos Registros. Se eu fizer DataSet.FieldValues[´Campo´], eu consigo acessar ele normalmente. Logo após isso, dentro do evento ainda localizado no DataModule, eu acesso uma função do Form de cadastro desse ClientDataSet:
procedure TDM.cds1AfterScroll(DataSet: TDataSet);
var
i : integer;
begin
i := DataSet.FieldValues[´CAMPO´]; -->> OK
frmCDS1.SelecionaCampos;
end;
procedure TfrmCDS1.SelecionaCampos;
var
i : Integer;
begin
i := DataSet.FieldValues[´CAMPO´]; -->> ERRO
end;
Enfim, quando eu acesso o valor do Client dentro do DM, funciona, mas quando eu acesso ele fora do DataSet, dá erro.
PS: Só dá erro durante o Open e o AfterScroll, se eu não chamar a função SelecionaCampos dentro od evento AfterScroll e chamar ela depoi, funciona normalmente.
Dentro do Evento AfterScroll, depois que eu ja dei um Open da Tabela e os registros já estão selecionados, dentro do evento eu tenho acesso aos Registros. Se eu fizer DataSet.FieldValues[´Campo´], eu consigo acessar ele normalmente. Logo após isso, dentro do evento ainda localizado no DataModule, eu acesso uma função do Form de cadastro desse ClientDataSet:
procedure TDM.cds1AfterScroll(DataSet: TDataSet);
var
i : integer;
begin
i := DataSet.FieldValues[´CAMPO´]; -->> OK
frmCDS1.SelecionaCampos;
end;
procedure TfrmCDS1.SelecionaCampos;
var
i : Integer;
begin
i := DataSet.FieldValues[´CAMPO´]; -->> ERRO
end;
Enfim, quando eu acesso o valor do Client dentro do DM, funciona, mas quando eu acesso ele fora do DataSet, dá erro.
PS: Só dá erro durante o Open e o AfterScroll, se eu não chamar a função SelecionaCampos dentro od evento AfterScroll e chamar ela depoi, funciona normalmente.
Responder
Clique aqui para fazer login e interagir na Comunidade :)