Trying to modify read-only field.

01/07/2008

3

Olá a todos, estou recebendo essa mensagem ao tentar inserir informção em determinado campo, o fato é que esse campo é uma descrição gerada por mim, ou seja não é uma coluna existente na tabela. Acontece que antes quando eu mapeava as colunas em tempo de desenvolvimento tudo funcionava, agora que estou fazendo em tempo de execução não está funcionando. Utilizo ADOConnection-ADOQuery-DataSetProvider-ClientDataSet-DataSource, o banco de dados é o Oracle.
Segue o código que estou usando para mapear a coluna:

      vg_field := TStringField.Create( ClientDataSet1 );
      WITH vg_field DO
        BEGIN
          Name          := ´DESCRICAO´;
          FieldName     := ´DESCRICAO´;
          FieldKind     := fkData;
          ProviderFlags := [];
          DataSet       := ClientDataSet1;
          ReadOnly      := FALSE;
        END;
      ClientDataSet1.FieldDefs.Update;



Responder

Posts

01/07/2008

Lucas.corp

será que funciona se você colocar a linha ReadOnly antes do Name?


Responder

01/07/2008

Du_nirvana

Infelizmente não deu certo, mais alguma idéia?


Responder

01/07/2008

Lucas.corp

e c evitar a linha FieldName?
to chutando colega :wink:


Responder

01/07/2008

Du_nirvana

Creio que se eu fizer isso não conseguirei encontrar os campos como eu tenho feito até agora, com o FieldByName...


Responder

01/07/2008

Luiz Henrique

Boa Noite, du_nirvana

Nao uso ADO, mas tive um problema parecido no dbexpress, usava Query como DataSet do Provider, cara infelizmente nao lembro exatamente o que fiz, mas tive que mexer no DataSet do Provider, nao sei se configurei o campo la tbm ou tive que trocar o Query por um DataSet(nao sei qual o respectivo no ado).


Espero que ´clareie´ alguma coisa

T+


Responder
esse campo DESCRICAO é mencionado na instrução SQL?


Responder

02/07/2008

Comodelphi

salve galera, se vc diz que o FiledKind = fkData ele tem que vir da query, exista ou não na tabela, de outro modo poderia tentar usar [b:843bea089a]fkInternalCalc[/b:843bea089a]. Acho até estranho dar esse erro de read-only, deveria dar coluna não existente.


Responder

02/07/2008

Du_nirvana

Sim ele existe na consulta, outra coisa que percebi é que aparentemente quando faço mapeamento dinamico ele não está pegando minha indicação de chave, logo quando executo um applyupdate ele diz que não foi possivel encontrar a chave, alguem ja realizou esse mapeamento com ADO?


Responder

02/07/2008

Comodelphi

se ele tá na query pq vc tá criando em runtime o field? eu costumo fazer assim:
select tb1.codigo, tb1.nome, cast(null as varchar(50)) as cpo_alfa
  from tb1

nesse caso o campo existe na query, vai existir no dataset e provider manda ele pro clientdataset. qual o db vc ta usando?


Responder

02/07/2008

Comodelphi

ClientDataSet1.FieldDefs.Update: essa atualiza os campos para refletir estado fisico atual dos campos da query, então se vc setou para ReadOnly=False, ele voltará a ser read-only depois do update, pq o cpo é de fato read-only



Responder

02/07/2008

Du_nirvana

Olá comodelphi, então o ClientDataSet1.FieldDefs.Update não é necessário? Isso eu não tentei, assim que eu testar posto aqui...


Responder

27/08/2008

Dan00batera

Se estiverem utilizando campos e/ou tabelas ´apelidados´ terão que criar os campos tanto no ClientDataSet quanto na Query que retorna os registros (após criarem os campos no ClientDataSet utilizem Ctrl+C nos campos e colem na Query para evitar perca de tempo, e executem um CreateDataSet).


Responder