Jerfs 1 Denunciar post Postado Outubro 26, 2009 Pessoal, estou terminando um software em delphi + ADOTables + Access, e a partir de um determinado momento ando tendo problemas com registro do meu grid, quando faço determinada operação, o delphi "diz" que não encontra o registro selecionado e tal, imagino que seja pelo fato da utilização de algumas Querys... Quero saber se existe um jeito comum de utilização de Querys para não dar mais problemas, por exemplo, eu pensei que toda vez que eu fizesse alguma operação com uma query eu deveria aplicar a REQUERY, mas mesmo assim as vezes tenho problema com isso. Existe algo que eu não possa fazer com uma query por que ela perder a indexação!? tem jeito de eu atribuir mais um parametro sem precisar executar o sql.clear a uma query? Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Outubro 26, 2009 Amigo, está meio confuso sua explicação do problema.... poste o código do trecho onde ocorre problema e se possível copie a mensagem gerada pelo compilador para análise. Explique também a situação em que o erro ocorreu, por exemplo: Estou tentando incluir um registro X na tabela Y e quando chamo a rotina J aparece essa mensagem de erro. [estrutura da tabela] {code} código da rotina J {/code} -- Substitua as {} por [] para por o código formatado. []'s Compartilhar este post Link para o post Compartilhar em outros sites
Jerfs 1 Denunciar post Postado Outubro 26, 2009 Então, esse é o meu problema, o erro não ocorre com frequência, as vezes acontece as vezes não acontece. Quero saber e existe alguma operação que não se deve fazer com Query, tipo: depois que se faz uma query, sempre que for alterar algum valor, é necessário agir na tabela e não no resultado da query, então para isso precisa-se dar um locate na tabela com algum valor da query, ou é possível realizar alteração diretamente no resultado da query sem problema algum, por exemplo: query.Edit; query.FieldByName('descricao').asString := desc; query.Post; query.requery(); ou preciso fazer o seguinte: tabela.locate('code',query.FieldByName('code').asString,[]); tabela.Edit; tabela.FieldByName('descricao').asString := desc; tabela.Post; Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Outubro 26, 2009 Bom, eu particularmente nunca vi usar query com edit e post.... particularmente, sempre uso as estruturas abaixo: query.close; query.sql.add(sql); try query.execsql; except <tratamento erro inclusão/alteração/exclusão> end; querypesquisa.close; querypesquisa.sql.add(sql); querypesquisa.open; Ou seja: uso uma query dando o execsql quando quero gravar/atualizar/excluir dados e depois refaço a consulta na base usando o comando open... isso nunca me deu dor de cabeça. []'s Compartilhar este post Link para o post Compartilhar em outros sites
Jerfs 1 Denunciar post Postado Outubro 26, 2009 então quando você faz alguma operação de inserção / edição / deleção de dados sempre diretamente na sintaxe sql? é isso? Compartilhar este post Link para o post Compartilhar em outros sites
_M!K0L_ 1 Denunciar post Postado Outubro 27, 2009 para Insert / Update / Delete usa Query1.ExecSQL; para Select Query1.Open; foi assim que eu aprendi :P Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Outubro 27, 2009 então quando você faz alguma operação de inserção / edição / deleção de dados sempre diretamente na sintaxe sql? é isso? Hoje eu trabalho usando Stored Procedure para gravar os dados, enviando para o BD como comando a ser executado o Exec da procedure com seus parâmetros, mas quando comecei a programar, se fosse pra editar os registros usando esta idéia de edit -> post, eu usava apenas componentes TTable para isso. Quando comecei a entender a relação performance/benefício de usar comandos sql ao invés de TTables, migrei todos os códigos que fazia para TQuerys, onde passei a usar comandos como Insert, Delete e Update para manipular as informações diretamente onde me interessava, sem a necessidade de navegar registro a registro ou ter que abrir uma tabela inteira para alterar 1 único registro. É mais prático e eficiente montar uma pesquisa usando um select, que já trará os dados que preciso para dar um update no campo exato que eu quero, e depois mandar carregar novamente o registro via select após a atualização do dado usando os filtros de pesquisa de meu interesse do que ficar abrindo uma tabela, esperar ela carregar seus N registros para depois filtrar o que me interessa neles. []'s Compartilhar este post Link para o post Compartilhar em outros sites
Jerfs 1 Denunciar post Postado Outubro 27, 2009 Ótimo, gosto disso, acabo de ampliar um pouco mais meu conhecimento. só para eu entender melhor, quando eu já tenho uma query feita com um select e quero alterar um determinado campo em todos os registros previamente pesquisado... como eu uso o Update? isso ae embaixo ta dando erro, a idéia é essa mesmo ou não? dmod.qryLote.close; dmod.qryLote.sql.Clear; dmod.qryLote.sql.AddStrings(dmod.qryPrincipal.SQL); dmod.qryLote.sql.Add('UPDATE * FROM QUESTION SET STATUS = ' + QuotedStr(status)); try dmod.qryLote.execsql; except showmessage('Error!'); end; Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Outubro 27, 2009 Seu comando update está errado... a sintaxe dele é esta: Update tabela set campoA = novo_valor, campoB = novo_valor, ... campoN = novo_valor where <condições> <- Aqui é opcional o where... mas se não por, vai atualizar a tabela toda No seu caso, poderia ser algo +/- assim: dmod.qryLote.sql.Add('UPDATE QUESTION SET STATUS = ' + QuotedStr(status)); Agora, teria que ver qual é a condição para este seu update funcionar (montar o where), senão vai atualizar todos os status de uma vez. []'s Compartilhar este post Link para o post Compartilhar em outros sites
Jerfs 1 Denunciar post Postado Outubro 27, 2009 Grande chrnos... Muito agradecido... um dia ainda entrarei para o time dos moderadores... http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Outubro 27, 2009 Devagar se vai ao longe hehehe... posso marcar como resolvido então? Compartilhar este post Link para o post Compartilhar em outros sites
Jerfs 1 Denunciar post Postado Outubro 27, 2009 pode marcar como resolvido! Compartilhar este post Link para o post Compartilhar em outros sites