Trying to modify read-only field.

Delphi

01/07/2008

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;



Du_nirvana

Du_nirvana

Curtidas 0

Respostas

Lucas.corp

Lucas.corp

01/07/2008

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


GOSTEI 0
Du_nirvana

Du_nirvana

01/07/2008

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


GOSTEI 0
Lucas.corp

Lucas.corp

01/07/2008

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


GOSTEI 0
Du_nirvana

Du_nirvana

01/07/2008

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


GOSTEI 0
Luiz Henrique

Luiz Henrique

01/07/2008

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+


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

01/07/2008

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


GOSTEI 0
Comodelphi

Comodelphi

01/07/2008

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.


GOSTEI 0
Du_nirvana

Du_nirvana

01/07/2008

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?


GOSTEI 0
Comodelphi

Comodelphi

01/07/2008

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?


GOSTEI 0
Comodelphi

Comodelphi

01/07/2008

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



GOSTEI 0
Du_nirvana

Du_nirvana

01/07/2008

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


GOSTEI 0
Dan00batera

Dan00batera

01/07/2008

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).


GOSTEI 0
POSTAR