Posicionar o cursor depois do insert
12/11/2024
0
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
Curtir tópico
+ 0
Responder
Post mais votado
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.
Arthur Heinrich
Responder
Gostei + 1
Mais Posts
19/11/2024
Renan
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
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)