GARANTIR DESCONTO

Fórum Campo no ClientDataSet #375229

24/09/2009

0

Galera estou com a seguinte situação:
1) Tenho um sistema com firebird 2.1 e dbexpress com delphi 7 usando a dbexpUIBfire15.dll
2) Em um data module de cadastro tenho o sqlconnection, um datasetprovider e um sqldataset que são genéricos
3) Ligo o datasetprovider no sqldataset e o sqldataset no sqlconnection o ClientDataSet de cadastro ligo no datasetprovider e até ai tudo bem
4) Passo o sql do ClientDataSet de cadastro para o sqldataset: select id, descricao, dtcad from produtos where id =:id e com isso o ClientDataSet
de cadastro recebe este sql e os campos são chamados e até ai tudo bem
5) Eu chamo o sql do cadastro no momento da inserção:
sqldataset.close;
sqldataset.commandtext := ´select id, descricao, dtcad from produtos where id =:id´;
if not(ClientDataSet.active) then
begin
ClientDataSet.close;
ClientDataSet.active := True;
end;
ClientDataSet.append;
e até ai tudo bem
6) Na gravação eu uso:
ClientDataSetdescricao.asstring := dbedtdescricao.text;
ClientDataSetdtcad.asdatetime := Now;
ClientDataSet.Post;
ClientDataSet.applyupdates(0);
e até ai tudo bem

7) Agora se eu deletar por exemplo o field dtcad do ClientDataSet e mandar gravar da seguinte maneira:
ClientDataSetdescricao.asstring := dbedtdescricao.text;
ClientDataSet.fieldbyname(´dtcad´).asdatetime := Now; ==> AQUI APARECE O ERRO
ClientDataSet.Post;
ClientDataSet.applyupdates(0);

Aparece a mensagem de erro dizendo: ´field dtcad not found´
O campo dtcad esta no ClientDataSet porque foi recebido no sql acima. Usei o showmessage(ClientDataSet.commandtext) e
apareceu : ´select id, descricao, dtcad from produtos where id =:id´ ou seja, o campo esta lá no ClientDataSet.

8) Minha pergunta é: onde esta o erro?

Obrigado.


Developer1978

Developer1978

Responder

Posts

24/09/2009

Afarias

7) Agora se eu deletar por exemplo o field dtcad do ClientDataSet e mandar gravar da seguinte maneira: ClientDataSet.fieldbyname(´dtcad´).asdatetime := Now; ==> AQUI APARECE O ERRO Aparece a mensagem de erro dizendo: ´field dtcad not found´ 8) Minha pergunta é: onde esta o erro?


Vc ´deleta´ o campo DTCad e depois tenta usar o campo ´deletado´, dai recebe a mensagem ´campo DTCad não encontrado´

Me parece claro onde está o erro.


T+


Responder

Gostei + 0

24/09/2009

Developer1978

[quote:ab4858a0f5=´developer1978´] 7) Agora se eu deletar por exemplo o field dtcad do ClientDataSet e mandar gravar da seguinte maneira: ClientDataSet.fieldbyname(´dtcad´).asdatetime := Now; ==> AQUI APARECE O ERRO Aparece a mensagem de erro dizendo: ´field dtcad not found´ 8) Minha pergunta é: onde esta o erro?


Vc ´deleta´ o campo DTCad e depois tenta usar o campo ´deletado´, dai recebe a mensagem ´campo DTCad não encontrado´

Me parece claro onde está o erro.

O field foi deletado do fields editor do ClientDataSet mas permanece no sql do ClientDataSet ´select id, descricao, DTCAD from produtos where id =:id´;

Quero usar o field do sql através do fieldbyname e não do fields editor.


T+[/quote:ab4858a0f5]


Responder

Gostei + 0

24/09/2009

Afarias

|Quero usar o field do sql através do fieldbyname e não do fields editor.

Bom, vamos ver...

O ´campo do sql´ faz parte do comando q será tratado pelo banco de dados e retornará algo... ele faz sentido apenas para o BANCO...

Os TFields são objetos que representam os ´campos´ ... as propriedades/métodos FieldByName, Fields, FindField, etc só ´entendem´ esse conjunto de TFields...

Não sei se está claro mas... vc TEM Q TER o TField (seja ele criado em tempo de projeto ou em tempo de execução)


T+


Responder

Gostei + 0

24/09/2009

Osocram

developer1978 seria interessante vc postar o seu codigo aqui...

Principalmente essa parte que vc deleta o Field

O que não faz muito sentido se isso for em tempo de execução.


Responder

Gostei + 0

24/09/2009

Developer1978

developer1978 seria interessante vc postar o seu codigo aqui... Principalmente essa parte que vc deleta o Field O que não faz muito sentido se isso for em tempo de execução.


Fiz um teste no meu trabalho com Tquery no lugar do sqldataset e não chamei nenhum field no fields editor e funcionou só que eu deixei a propriedade store defs do clientdataset para true e em casa deixei como false, pode ser que seja isso. Agora grava todos os campos apenas recebendo por fieldbyname:
clientdataset.fieldbyname(´descricao´).asstring := dbedtdescricao.text;
clientdataset.fieldbyname(´dtcad´).asdatetime := now;
Tá perfeito, e com isso diminuiu o tamanho do executável o que é ainda melhor!

Quando chegar em casa eu testo e falo para voces.


Responder

Gostei + 0

24/09/2009

Afarias

|Fiz um teste no meu trabalho com Tquery no lugar do sqldataset e não
|chamei nenhum field no fields editor e funcionou

Quando vc não cria (define) *nenhum* TField em Design-Time (ou mesmo manualmente em Run-Time) -- é uma funcionalidade comum para maioria dos DataSets criar automaticamente os TFields quando vc ABRE o DataSet.

Isso depende do DataSet e, as vezes, de alguma propriedade como é o caso da propriedade StoreDefs q define se o q está definido (para campos e indices) em Design-Time é salvo ou não.


T+


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar