GARANTIR DESCONTO

Fórum Required - Mudar via codigo #300518

24/10/2005

0

Como posso marcar um campo não requerido via codigo

tem o seguinte codigo:

dspadrao.dataset.open;
dspadrao.dataset.fields.fieldbyname(´codigo´).required := false;
panel2.visible := false;

isto não funciona quando tento gravar, então coloquei o codigo assim

dspadrao.dataset.append;
dspadrao.dataset.fields.fieldbyname(´codigo´).required := false;
dspadrao.dataset.post;
data.cdcliente.applyupdates(0);

o erro acontece na linha do post;

o que posso fazer, não gostaria de adicionar os fields nos componentes.
Parece que a aplicação fica mais pesada, e não posso reaproveitar o
componente depois.

Valeu


Emarcolongo

Emarcolongo

Responder

Posts

24/10/2005

Marlon Spiess

Não use required, use a propriedade ´TAG´, por exemplo:
0 - valor padrão (não requerido)
1 - valor alterado (obrigatório)

Espero ter ajudado


Responder

Gostei + 0

25/10/2005

Firekiller

Colega, você pode tentar assim:

var
NumCampo:Integer;
Campos:TStringList;


Campos := TStringList.Create;
dspadrao.dataset.GetFieldNames(Campos);
NumCampo := Campos.IndexOf( ´NomeDoCampo´ );
Campos.Free;
if NumCampo >= 0 then
dspadrao.dataset.fields[ NumCampo ].Required := True //Ou False
else
Showmessage(´Campo Não Localizado!´);


Testei diretamente com FieldByName e o erro acontece (principalmente com ClientDataSet) quando a busca é pelo nome do campo, porém quando a busca é pelo índice, funciona normal.

Pelo que percebi no código (me corrija se eu estiver errado) você tá tentando definir o required do campo do Dataset (deve ser algum componente do DBExpress tipo SQLDataset) para ele não exigir o campo no cadastro do ClientDataset, se for, creio que o trecho acima irá ajudar.


Responder

Gostei + 0

25/10/2005

Emarcolongo

Marlon Henrique Spiess e firekiller obrigado pelas dicas, mas ainda estou
sofrendo com isto

deixe-me explicar a situação corretamente. No Data Module, tenho um
slqconnection, um sqldataset, um datasetprovider e um clientdataset
todos conectados entre si nesta ordem.

No sqldataset, no commandtext esta assim: select * from cliente

No form de cadastro de cliente tenho um datasource que esta ligado ao
meu clientdataset do datamodule.

Quando abro a tela esta assim: datasource1.dataset.open;
já tentei colocar o não requerido aqui.

O codigo do botão inserir esta assim: datasource1.dataset.append;

e o do botão gravar esta assim:

datasource1.dataset.post;
datamodule.clientdataset.applyupdates(0);

tentei colocar o codigo que passei anteriormente antes do post, que é
onde o sistema trava, mas não funcionou.

tentei também colocar assim: datasource1.dataset.fields[0].requerid := false, mas também não adiantou.

tentei nas procedures beforeinsert e beforepost do clientdataset também.

E agora ? estou sem idéias.


Responder

Gostei + 0

25/10/2005

Firekiller

Tenta fazer assim, na criação do seu form, defina a propriedade Required do SQLDATASET, sendo que, isso deve ser feito antes de se abrir o ClientDataSet. Então, defina a propriedade required no ClientDataSet, após sua abertura. Teste e veja se funciona.


Responder

Gostei + 0

26/10/2005

Emarcolongo

Tentei, mas deu o mesmo erro


Responder

Gostei + 0

28/10/2005

Emarcolongo

Ainda enfrento o problema. Se alguém puder dar uma ajuda.


Responder

Gostei + 0

30/10/2005

Firekiller

Colega, desculpe a demora aí, mas se ainda estiver em tempo aí vai:

No evento AfterOpen do SQLDATASET você troca o valor da propriedade Required:

SQLDATASET.Fields[0].Required := False;

ou

SQLDATASET.FieldByName(´NomeDoCampo´).Required := False;

Isso fará com que o clientdataset pegue automaticamente o valor dessa restrição do sqldataset. Se não funcionar, poste novamente.


Responder

Gostei + 0

31/10/2005

Emarcolongo

firekiller, obrigado.
Funcionou perfeitamente. Se precisar de alguma coisa pode contar.

Valeu.


Responder

Gostei + 0

06/01/2006

Emarcolongo

Agora precisei mudar os componentes de acesso para tsimpledataset
e o codigo não funciona mais.
Alguma sugestão ??

Grato


Responder

Gostei + 0

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

Aceitar