Utilização da DBGrid de forma Dinâmica no Delphi
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!
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
Curtidas 0
Melhor post
Natanael Ferreira
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.
Se não tiver chave primária faça um teste criando uma.
Outra opção é alterar a propriedade CursorLocation do ADOQuery para clUseServer.
GOSTEI 2
Mais Respostas
Vinicius David
18/10/2018
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.
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.
GOSTEI 0
Vinicius David
18/10/2018
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
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
GOSTEI 0
Natanael Ferreira
18/10/2018
Para facilitar, se puder, poste o código SQL que está duplicando os resultados, para a análise de todos.
GOSTEI 0
Vinicius David
18/10/2018
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.
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.
GOSTEI 0
Vinicius David
18/10/2018
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.
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.
GOSTEI 0
Vinicius David
18/10/2018
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?
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?
GOSTEI 0