Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Hell_

[Resolvido] Como executar UPDATE em vários REGISTROS

Recommended Posts

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.