Hell_ 0 Denunciar post Postado Março 10, 2010 Bom pessoal, é o seguinte. Na tabela existe um campo criptografado, porém, a chave para decriptografar esta do lado. Exemplo: Codigo - CHAVE XXXXXXXXX 4s4E4A4AX Fiz uma rotina que decobre qual é o CODIGO a partir da CHAVE. Preciso fazer o update individualmente, pois os campos possuem dados diferentes. ------------------------------ procedure Tf_principal.BitBtn2Click(Sender: TObject); var chave:string; final:string; begin with dados.Q_Tabela do begin dados.Q_Tabela.First; while not dados.Q_Tabela.Eof do begin chave:= dados.Q_LogLOG_KEY_DNE.AsString; <- CHAVE final:= rotina(chave); <- A variavel recebe a chave decriptografada sql.Clear; sql.Add('update tabela set codigo = ' + #39 + final + #39 + ' where chavePrimaria = ' + dados.Q_tabelaChavePrimaria.asString; ExecSQL; Next; end; end; end; Erro de Sintaxe (operador faltando) na expressão da consulta 'chavePrimaria=' Estou desde as 8:00 horas e não consigo resolver. Ficarei muito grato pela ajuda. Compartilhar este post Link para o post Compartilhar em outros sites
Denis_Uyeda 0 Denunciar post Postado Março 10, 2010 Pelo o que eu entendi, a sua chave primária está na variável "chave" certo? Se for esse o caso, é mais simples fazer assim sql.Add('update tabela set codigo = ' + #39 + final + #39 + ' where chavePrimaria = ' + chave; se não resolver, tente executar um alert nessa String para ver o valor dela. Pode ser que o seu método, por algum motivo, não esteja retornando valor algum. PS: Pode parecer simples, mas verifique também se o nome da sua tabela e seus campos são esses mesmos. Verifique também se as letras maiúsculas e minúsculas batem.. Compartilhar este post Link para o post Compartilhar em outros sites
Hell_ 0 Denunciar post Postado Março 10, 2010 O que eu não consigo é fazer com que os registros, de um a um, sejam modificados. sql.Add('update tabela set codigo = ' + #39 + final + #39 + ' where chavePrimaria = ' + dados.Q_tabelaChavePrimaria.asString; esse "WHERE" é para que cada registro seja varrido, pois la em baixo tem um next, ou seja, no outro loop o valor da chavePrimaria é outro. Eu ja chequei e a função retorna um valor sim. Eu testei fazer isso trocando o "dados.Q_tabelaChavePrimaria.asString" por um uma chavePrimaria de um registro qualquer e deu certo, só não consigo fazer uma rotina para que eu nao precise modificar de um a um. Essa variavel "CHAVE" é a chave para quebrar a criptografia. Compartilhar este post Link para o post Compartilhar em outros sites
Denis_Uyeda 0 Denunciar post Postado Março 10, 2010 Hmm... já tentou tirar o código de dentro do bloco with? Pode ser que as variáveis ou métodos que você esteja usando sejam iguais à algo da "dados.Q_Tabela". código: procedure Tf_principal.BitBtn2Click(Sender: TObject); var chave:string; final:string; begin dados.Q_Tabela.First; while not dados.Q_Tabela.Eof do begin chave:= dados.Q_LogLOG_KEY_DNE.AsString; <- CHAVE final:= rotina(chave); <- A variavel recebe a chave decriptografada sql.Clear; sql.Add('update tabela set codigo = ' + #39 + final + #39 + ' where chavePrimaria = ' + dados.Q_tabelaChavePrimaria.asString; ExecSQL; Next; end; end; Compartilhar este post Link para o post Compartilhar em outros sites
fernando.fxsoft 0 Denunciar post Postado Março 10, 2010 Já tentou utilizar uma query parametrizada? sql.Clear; Sql.Add('update tabela set codigo = :codigo where chavePrimaria = :chavePrimaria'); Params[0].Value := final; Params[1].Value := dados.Q_tabelaChavePrimaria.AsString; ExecSQL; Hmm... já tentou tirar o código de dentro do bloco with? Pode ser que as variáveis ou métodos que você esteja usando sejam iguais à algo da "dados.Q_Tabela". código: procedure Tf_principal.BitBtn2Click(Sender: TObject); var chave:string; final:string; begin dados.Q_Tabela.First; while not dados.Q_Tabela.Eof do begin chave:= dados.Q_LogLOG_KEY_DNE.AsString; <- CHAVE final:= rotina(chave); <- A variavel recebe a chave decriptografada sql.Clear; sql.Add('update tabela set codigo = ' + #39 + final + #39 + ' where chavePrimaria = ' + dados.Q_tabelaChavePrimaria.asString; ExecSQL; Next; end; end; Compartilhar este post Link para o post Compartilhar em outros sites
Hell_ 0 Denunciar post Postado Março 11, 2010 Venho informar que resolvi meu problema de uma maneira muito simples. Criei uma nova query apenas para fazer o "update" e segui o que o fernando.fxsoft recomendou. O que acontecia era que, quando eu adicionava o "update" na query, ela perdia todos os registros anteriores. Obrigado Denis_Uyeda e fernando.fxsoft pela atenção. Agora acabei meu decodificador de CEPS. Quem estiver precisando, posso disponibiliza-lo para download. Compartilhar este post Link para o post Compartilhar em outros sites