Trying to modify read-only field.
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:
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
Curtidas 0
Respostas
Lucas.corp
01/07/2008
será que funciona se você colocar a linha ReadOnly antes do Name?
GOSTEI 0
Du_nirvana
01/07/2008
Infelizmente não deu certo, mais alguma idéia?
GOSTEI 0
Lucas.corp
01/07/2008
e c evitar a linha FieldName?
to chutando colega :wink:
to chutando colega :wink:
GOSTEI 0
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
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+
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
01/07/2008
esse campo DESCRICAO é mencionado na instrução SQL?
GOSTEI 0
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
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
01/07/2008
se ele tá na query pq vc tá criando em runtime o field? eu costumo fazer assim:
nesse caso o campo existe na query, vai existir no dataset e provider manda ele pro clientdataset. qual o db vc ta usando?
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
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
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
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