Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
CarneiroDelphi Experiente

Registrado: Sexta-Feira, 5 de Agosto de 2005 Mensagens: 417
|
Enviada: Sex Jan 04, 2008 4:38 pm Assunto: Como ignorar um campo no DataSetProvider ? |
|
|
Olá pessoal.
Preciso fazer o DataSetProvider ignorar o campo código, para que eu possa selecionalo normalmente e assim usá-lo caso necessário.
O tópico está no link abaixo:
http://www.activedelphi.com.br/forum/viewtopic.php?t=37436
Como verão no tópico, tentei usar a ProviderFlag pfHidden mais não deu certo.
Se puderem me ajudar eu agradeço. |
|
Voltar ao Topo |
|
 |
under Novato

Registrado: Quinta-Feira, 6 de Dezembro de 2007 Mensagens: 50
|
Enviada: Qua Jan 09, 2008 3:51 pm Assunto: |
|
|
Quando eu não quero fazer update em um campo faço o seguinte:
No ClienteDataSet > FieldsEditor > ProvidersFlags e pfUpdates (false). |
|
Voltar ao Topo |
|
 |
CarneiroDelphi Experiente

Registrado: Sexta-Feira, 5 de Agosto de 2005 Mensagens: 417
|
Enviada: Qua Jan 09, 2008 6:52 pm Assunto: |
|
|
Caro Under.
Como passei um link em um post anterior nesse mesmo tópico, verá que foi resolvido, apesar de ter sido em partes, mais se procurar por outro tópico meu chamado: "Key Violation" verá que ainda tenho problemas.
O link é esse:
http://www.activedelphi.com.br/forum/viewtopic.php?t=37463
No caso você já deve saber que "Key Violation" significa "chave primaria invalida" mais meu campo é autoInc no banco de dados, e além do mais o erro ocorre no post do ClientDataSet e não no ApplyUpdates como deveria ser.
O tópico trás mais detalhes sobre tal problema, quem puder me ajudar, fico agradecido. |
|
Voltar ao Topo |
|
 |
under Novato

Registrado: Quinta-Feira, 6 de Dezembro de 2007 Mensagens: 50
|
Enviada: Qui Jan 10, 2008 8:59 am Assunto: |
|
|
Caro CarneiroDelphi,
Dei uma olhada rápida no seu código principalmente no botão salvar:
"procedure TFormCadPadrao.btnSalvarClick(Sender: TObject);
begin
if Assigned( Self.CDataSet ) then
begin
if not (CDataSet.State in [dsEdit, dsInsert]) then Exit;
CDataSet.Post;
Self.UpdateDataSource;
end;
btnNovo.SetFocus;
end"
Mas na hora q vc for salvar, o dataSet tem q estar em dsEdit ou dsInsert, não é isso?
Agora, pq vc colocou "not", ou seja, se ele não estiver em dsEdit ou dsInsert, faça o "Post"...? Deveria ser ao contrário, não
Corrija-me se estiver errado  |
|
Voltar ao Topo |
|
 |
Allan_Johnson Aprendiz

Registrado: Terça-Feira, 29 de Agosto de 2006 Mensagens: 173
|
Enviada: Qui Jan 10, 2008 9:44 am Assunto: |
|
|
Under,
se voce olhar bem mais detalhado o codigo, o que o carneiro delphi ta fazendo é testando o estado... se nao estiver em dsInsert ou dsEdit ele esta dando um Exit.. ou seja parando a execução... _________________ Allan Johnson |
|
Voltar ao Topo |
|
 |
CarneiroDelphi Experiente

Registrado: Sexta-Feira, 5 de Agosto de 2005 Mensagens: 417
|
Enviada: Qui Jan 10, 2008 1:31 pm Assunto: |
|
|
Caros amigos.
Under, o que o Allan_Johnson disse é o certo, estou testando, se não estiver certo em edição ou inserção então ele sai do procedimento sem fazer nada, ou seja, ele dá um Exit.
Mais enfim, o tópico tá crescendo, e infelizmente, ainda não consegui encontrar a solução. |
|
Voltar ao Topo |
|
 |
under Novato

Registrado: Quinta-Feira, 6 de Dezembro de 2007 Mensagens: 50
|
Enviada: Sex Jan 11, 2008 9:28 am Assunto: |
|
|
Olá,
Tá certo, eu não tinha visto o 'Exit' na frente!!!! Mas tive testando, e não sei se vc fez dessa forma, mas pode ser no 'ProviderFlags'.
Vc colocou assim: ClientDataSetID.FieldByName('ID').ProviderFlags := [pfInWhere, pfInKey, pfHidden];
Tenta desta forma: ClientDataSetID.FieldByName('ID').ProviderFlags := [pfInUpdate, pfInWhere];
t+ |
|
Voltar ao Topo |
|
 |
CarneiroDelphi Experiente

Registrado: Sexta-Feira, 5 de Agosto de 2005 Mensagens: 417
|
Enviada: Sex Jan 11, 2008 6:44 pm Assunto: |
|
|
Ok amigo, vou tentar depois retorno.
Mais enfim, porque retirar o InKey se o campo é uma chave primaria ? |
|
Voltar ao Topo |
|
 |
CarneiroDelphi Experiente

Registrado: Sexta-Feira, 5 de Agosto de 2005 Mensagens: 417
|
Enviada: Seg Jan 14, 2008 8:56 pm Assunto: |
|
|
Não funcionou ainda.
O que preciso é que o ClientDataSet consiga inserir multiplos registros, pois como tá, depois de cada post ele dá "Key Violation."
No caso de uma venda, por exemplo, eu teria que enviar para o banco de dados os registros tudo de uma vez, pois enviar um item do pedido de cada vez, e depois o cliente chegar e falar que desistiu de uns 10 itens e ter que esperar o computador remover do banco de dados, isso numa rede de uma empresa grande seria tedioso, pois vários computadores fazendo vendas ao mesmo tempo já seria demorado, imagina ter que cancelar 10 itens. |
|
Voltar ao Topo |
|
 |
|