GARANTIR DESCONTO

Fórum Utilização da DBGrid de forma Dinâmica no Delphi #597954

18/10/2018

0

Boa noite a todos ,
Como vão?

Estou realizando um trabalho no Delphi 7 com o Banco de Dados em Oracle.

Estou realizando um Join em algumas tabelas para que seja mostrado em uma DBGrid Produto, Processo e o Usuário só coloque a resposta de cada processo que ele tem conhecimento.
Porém, quando compilo a aplicação, na primeira linha da Grid, que seria o primeiro processo, consigo colocar a resposta do Usuário. Quando vou colocar a resposta do próximo Processo na segunda linha da DBGrid ela me retorna um erro, conforme segue:

"A linha não pode ser localizada para atualização. Alguns valores podem ter sido alterados desde que ela foi lida pela última vez. "

Pelo o que entendi, a aplicação só esta enxergando o primeiro processo.

Estou utilizando DataSetProvider, ClientDataSet, ADOQUERY e DataSource.

Poderiam me auxiliar nesse problema?

Desde já agradeço!
Vinicius David

Vinicius David

Responder

Post mais votado

18/10/2018

A tabela que está sendo alterada possui algum campo como chave primária?

Se não tiver chave primária faça um teste criando uma.

Outra opção é alterar a propriedade CursorLocation do ADOQuery para clUseServer.

Natanael Ferreira

Natanael Ferreira
Responder

Gostei + 2

Mais Posts

18/10/2018

Vinicius David

Boa noite,

No caso ela não possuí nenhum campo como chave primária, pois são diversos processos que preciso responder.

Em relação a Propriedade CursorLocation, ao ativa-lá aparece a seguinte mensagem:

''DataSet does not support booksmarks, wich are required for multi-record data controls."

Resumindo...

Na Aplicação de Respostas preciso:

Usuário
Setor

Processo A Alternativa 1
Processo B Alternativa 2
Processo C Alternativa 3
Processo D Alternativa 4
Processo E Alternativa 5
Processo F Alternativa 1
Processo G Alternativa 2
Processo H Alternativa 3
Processo I Alternativa 4


Nessa tela faço um Join no ADOQUERY +/- assim:

Select A.SEQPRODUTO, B.SEQPROCESSO, B.DESCRICAO, C.SEQPRODUTO, C.SEQRESPOSTA, D.SEQRESPOSTA, D.ALTERNATIVA
FROM PRODPROCESSO A, PROCESSO B, PRODRESPOSTA C, RESPOSTAS D
WHERE A.SEQPRODUTO = (aqui eu entro com o número do produto que tem relação com os processos)
AND A.SEQPROCESSO = B.SEQPROCESSO
AND C.SEQPRODUTO = (aqui eu entro com o número do produto que tem relação com os processos)
AND C.SEQRESPOSTA = D.SEQRESPOSTA

Estou meio confuso sobre o que fazer.

Responder

Gostei + 0

24/10/2018

Vinicius David

Boa noite,

Eu consegui resolver o erro que estava aparecendo, porém ocorreu outro erro:

Informações insuficientes sobre a coluna de chave para atualização.

Esse erro da quando tento mudar a opção de um DBLookupComboBox que tenho de Alternativas para os processos cadastrados.

tenho 5 tipos de alternativas diferentes para responder em 200 processos.

O que ocorre é que cada processo esta multiplicando pelo número de respostas.

No caso tenho 200 processos X 5 Tipos de Respostas = 1000 Processos

Só que dessa forma esta errada, pois só tenho 200 processos cadastrados e não quero que apareça duplicado.

Tentei colocar um Distinct no SEQPROCESSO porém mesmo assim ele esta retornando duplicado.

Gostaria muito que me ajudassem nesse grande problema.

Att,
Vinicius


Responder

Gostei + 0

24/10/2018

Natanael Ferreira

Para facilitar, se puder, poste o código SQL que está duplicando os resultados, para a análise de todos.
Responder

Gostei + 0

24/10/2018

Vinicius David

Boa tarde,

No ADOQUERY que ligo na DBGrid realizo o seguinte Select:

SELECT DISTINCT A.SEQPROCESSO, A.SEQPRODUTO, B.DESCRICAO, C.SEQPRODUTO, C.SEQRESPOSTA, D.SEQRESPOSTA, D.ALTERNATIVA
FROM PRODPROCESSO A, PROCESSO B, PRODRESPOSTA C, RESPOSTAS D
WHERE A.SEQPRODUTO = 2
AND A.SEQPROCESSO = B.SEQPROCESSO
AND C.SEQPRODUTO = 2
AND C.SEQRESPOSTA = D.SEQRESPOSTA

O que ocorre quando realizo esse Select:

Os processos ficam repetidos de acordo com a quantidade de respostas que possuem cadastradas na tabela RESPOSTAS.
Responder

Gostei + 0

25/10/2018

Vinicius David

Resumindo...

A tabela PRODPROCESSO => Liga o Produto ao Processo pelo Código
A tabela PROCESSO => Possuí a descrição do Processo
A tabela PRODRESPOSTA => Liga o Produto a Resposta, pois cada produto pode ter várias respostas diferentes
A tabela RESPOSTAS => Possuí o cadastro de todas as respostas.

No Resultado Final preciso mostrar a Descrição do Processo e a Alternativa que o Usuário escolheu.
Responder

Gostei + 0

26/10/2018

Vinicius David

Boa noite,

Consegui resolver o problema da mensagem que estava aparecendo, era a ligação do DBLookupComboBox que estava ligada errada.
Porém após mexer na ligação do DBLookupComboBox, não consigo escolher nenhuma opção do componente.
Quando abro o DBLookupComboBox ele aparece as 5 opções cadastradas selecionadas, como se fosse um bloco... uma única alternativa, impossibilitando de escolher alguma opção.

Alguém poderia me auxiliar?
Responder

Gostei + 0

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

Aceitar