Posicionar o cursor depois do insert
Pessoal,
Tenho um Insert que copia os dados do registro selecionado no DbGrid e insere na mesma tabela.
Uso esse comando para duplicar um registro na mesma tabela.
Após inserir, aplico um update para alterar um campo especifico deste novo registro. Para isso busco o ultimo código em meu generator
Em seguida fecho e abro a tabela para listar o novo registro e os demais que já estavam no filtro
Tudo funcionando bem, porém gostaria de posicionar o cursor no registro recém inserido, para mostrar ao usuário.
Não gostaria de usar um select, porque preciso manter os registros já listados no dbgrid
Tenho um Insert que copia os dados do registro selecionado no DbGrid e insere na mesma tabela.
Uso esse comando para duplicar um registro na mesma tabela.
Após inserir, aplico um update para alterar um campo especifico deste novo registro. Para isso busco o ultimo código em meu generator
Em seguida fecho e abro a tabela para listar o novo registro e os demais que já estavam no filtro
Tudo funcionando bem, porém gostaria de posicionar o cursor no registro recém inserido, para mostrar ao usuário.
Não gostaria de usar um select, porque preciso manter os registros já listados no dbgrid
Renan
Curtidas 0
Melhor post
Arthur Heinrich
19/11/2024
Quando se utiliza um banco de dados relacional, não se pode esperar que uma ordem específica seja respeitada, a menos que se utilize um order by pelas colunas desejadas.
No seu caso, entendo que possui uma PK numérica, gerada de forma sequencial. Você pode utilizar a query com order by nesta coluna e executar o método dataset.last, que posiciona o cursor no último registro.
No entanto, vale lembrar que, em um ambiente multi-usuários, isto vai posicionar o cursor no último registro da tabela, não necessariamente o inserido por você.
Deixando o problema de lado, embora o Delphi possua o componente DBGrid, retornar dados não relacionados ou com base em filtros do usuário, pode levar a problemas, já que, dependendo da base, pode significar a leitura de bilhões de linhas e consumo excessivo de recursos.
No seu caso, entendo que possui uma PK numérica, gerada de forma sequencial. Você pode utilizar a query com order by nesta coluna e executar o método dataset.last, que posiciona o cursor no último registro.
No entanto, vale lembrar que, em um ambiente multi-usuários, isto vai posicionar o cursor no último registro da tabela, não necessariamente o inserido por você.
Deixando o problema de lado, embora o Delphi possua o componente DBGrid, retornar dados não relacionados ou com base em filtros do usuário, pode levar a problemas, já que, dependendo da base, pode significar a leitura de bilhões de linhas e consumo excessivo de recursos.
GOSTEI 1
Mais Respostas
Renan
12/11/2024
Olá, Arthur.
Acabei armazenando a chave primária numa variável, logo após o post e em seguida um locate.
A princípio tudo funcionou
Acabei armazenando a chave primária numa variável, logo após o post e em seguida um locate.
A princípio tudo funcionou
GOSTEI 0