Estou usando o esquema SqlConnection, SqlDataset, DataSetProvider e 
ClientDataset. Crio os campos no SqlDataset em tempo de execução. Os campos 
são criados e estão funcionando, exceto quando existem campos que não 
pertencem à tabela principal, ou seja, campos que são trazidos através de 
Join e não serão gravados. Ao tentar gravar o registro aparece mensagem 
"Column unknow". É como se a propriedade ProvidersFlags não estivesse 
configurada. Abaixo o código, o que está faltando?

precedure CriaCampos;
var i : Integer;
    Campos : Array of TField;
begin

   with SQLDataset1 do
   begin
      CommandText := 'SELECT CAMPOS FROM TABELA WHERE 1 = 0'
      Open;

      Setlength(Campos, FieldCount);
      for i := 0 to FieldCount-1 do
      begin
         if (Fields[i].DataType = ftSmallInt) then
            Campos[i] := TSmallIntField.Create(MeuDataset)
         else if (Fields[i].DataType = ftInteger) then
            Campos[i] := TIntegerField.Create(MeuDataset)
         else ...

         MeuDataset.Fields.Add(Campos[i]);
         MeuDataset.Fields[i].Create(MeuDataset);
         MeuDataset.Fields[i].FieldName := Fields[i].FieldName;
         MeuDataset.Fields[i].Name := 'MeuDataset' + Fields[i].FieldName;
         MeuDataset.Fields[i].FieldKind := fkData;
         MeuDataset.Fields[i].Required := Fields[i].Required;

         MeuDataset.FieldDefs.AddFieldDef;
         MeuDataset.FieldDefs.Items[i].Name := Campos[i].FieldName;
         MeuDataset.FieldDefs.Items[i].Required := Campos[i].Required;
         MeuDataset.FieldDefs.Items[i].DataType := Campos[i].DataType;
      end;
   end;

   //Definindo campo chave
   MeuDataset.FieldByName('CAMPO').ProviderFlags := [pfInUpdate, pfInWhere, 
pfInKey];

   //Definindo campos que não pertencem a tabela principal e não será salvo
   MeuDataset.FieldByName('NUMCONTA').ProviderFlags := [];

   MeuDataset.FieldDefList.Create(MeuDataset);
end;


        

        
                
_______________________________________________________ 
Yahoo! Mail - Sempre a melhor opção para você! 
Experimente já e veja as novidades. 
http://br.yahoo.com/mailbeta/tudonovo/

Responder a