Olá pessoal,

Estou fazendo um framework de persistência no delphi mas estou me deparando
com o seguinte erro que ainda não consegui resolver.

Minha classe de gerência tem o seguinte método construtor:

constructor TGerente.Create;
begin
  inherited;

  aMapeamentoAtributos := TList.Create;

  //adiciona chave primária - toda tabela precisa ter este campo
  adicionarMapeamento(tpInteiro, 'ID', false);

  //cria objetos de conexão
  aClientDataSet   := TClientDataSet.Create(nil);
  aSqlDataSet      := TSQLDataSet.Create(nil);
  aDataSetProvider := TDataSetProvider.Create(nil);

  //define nomes
  aClientDataSet.Name   := 'CDS';
  aSqlDataSet.Name      := 'SDS';
  aDataSetProvider.Name := 'DSP';

  //define atributos do SDS
  aSqlDataSet.DbxCommandType := 'Dbx.SQL';
  aSqlDataSet.CommandType    := ctQuery;
  aSqlDataSet.SQLConnection  := aConexao.conexaoSql;
  aSqlDataSet.CommandText    := '';

  //define atributos do DSP
  aDataSetProvider.DataSet    := aSqlDataSet;
  aDataSetProvider.UpdateMode := TUpdateMode.upWhereKeyOnly;
  aDataSetProvider.Options    :=
[poAllowCommandText,poUseQuoteChar,poPropogateChanges,poCascadeDeletes,poCascadeUpdates];
  aDataSetProvider.Exported   := true;

  //define atributos do CDS
  aClientDataSet.ProviderName := aDataSetProvider.Name;
  aClientDataSet.StoreDefs    := True;
  aClientDataSet.SetProvider(aDataSetProvider);

end;

Até ai tudo bem.

Mas após criar um campo chave primária no meu clientDataSet e dar um open no
clientDataSet , ocorre um access violation:

procedure TGerente.adicionarCampoChave(nomeCampo: String; tipoCampo:
TFieldKind);
var
  campo: TIntegerField;
begin
  campo := TIntegerField.Create(aClientDataSet);

  with campo do
  begin
    FieldName     := nomeCampo;
    FieldKind     := tipoCampo;
    DisplayLabel  := nomeCampo;
    Name          := aSqlDataSet.Name + nomeCampo;
    ProviderFlags := [pfInUpdate, pfInWhere, pfInKey];
  end;

  with aSqlDataSet.Fields do
  begin
    //Add(campo.Name, ftAutoInc, 0, False);
    Add(campo);
  end;

  with aClientDataSet.Fields do
  begin
    //Add(campo.Name, ftAutoInc, 0, False);
    Add(campo);
  end;
end;


Eu chamo esse metodo ai e faço:

aClientDataSet.Open;   <- access violation


A Query contida no sqlDataSet é (select * from clientes)

-- 
Atenciosamente,
Paulo Coutinho.
Blog: www.prsolucoes.com/blog
Site: www.prsolucoes.com
Msn:  pa...@prsolucoes.com


[As partes desta mensagem que não continham texto foram removidas]

Responder a