Ir para conteúdo

POWERED BY:

Arquivado

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

Andre Nigro

Atualizar o banco de dados via Deplhi usando SQL (Update)

Recommended Posts

Olá pessoal. Desculpe se o tópico já foi de muito aberto por aqui com essas dúvidas. Mas infelizmente não consegui resolver esse meu problema. Já fiz todas as discuções por aqui mas acho que em algum ponto estou fazendo besteira. Se não entenderem da maneira como coloquei, peço desculpas e prometo já explicar a quem puder me ajudar como está sendo minha idéia.

 

O programa está sendo criado no Delphi 2007.

A idéia principal é atualizar o banco de dados, criado em Tabela PARADOX.

Na primeira versão do programa ele inseria, atualizava e apagava o registro usando o TABLE. Porém, agora, estou mudando para SQL.

Até o momento, a busca em SQL funciona perfeitamente. Mas a atualização dos registros não acontece.

Após alguns erros, consegui solucioná-los, porém a aplicação agora não atualiza.

Quando inseri o código (que irei escrevê-lo posteriormente), ele atualizava a coluna toda da tabela (todos os registros). Quando coloquei uma diretriz para esta função, como o "where", ele simplesmente não atualiza e não dá mensagem de erro.

 

   with QArquivo do
   begin
     Close;
     SQL.Clear;
     SQL.Add('Update Arquivo SET Sob_Rev = "'+Edit1.Text+'" Where Projeto like '+''''+DBEditDadosProjeto.Text+''''+' and Area like '+''''+DBEditDadosArea.Text+''''+' and Sub_Area like '+''''+DBEditDadosSubArea.Text+''''+' and GRD like '+''''+DBEditDadosGRD.Text+''''+' and Situacao like '+''''+DBEditDadosSituacao.Text+''''+' and Rec_Env like '+''''+DBEditDadosStatus.Text+''''+' and Num_AEC like '+''''+DBEditDadosNumAEC.Text+''''+' and Num_Fornecedor like '+''''+DBEditDadosNumCliente.Text+''''+' and Email like '+''''+DBEditDadosEmail.Text+''''+' and Titulo like '+''''+DBEditDadosTitulo.Text+''''+' and Revisao like '+''''+DBEdit2.Text+''''+'');
     ExecSQL;
   end;

 

Quando deixamos apenas o código escrito em preto, ele funciona só que ele preenche a coluna inteira. Porém quando colocamos os parâmetros para inserir o registro apenas numa linha específica (O código em vermelho, do where para frente), ele não faz nada.

 

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu posso indicar suas modificações:

1 : Não usar DBEdits, use Edits tradicionais, o ponto negativo é que você precisa preenche-los manualmente.

2 : Não use tantos likes, acredito que sua query pode ser analisada e simplificada.

No mais, como não uso paradox, não sei dizer muita coisa, talvez se usar o TUpdateSql.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, eu vou tentar modificar os valores de texto de procura para um dado apenas. Verei se crio um campo na tabela como "identidade" para poder direcionar a linha do update para ela.

Quanto o TUpdateSQL, eu nunca utilizei. Vou procurar saber como funciona para poder testá-lo. Se der certo dessa maneira, postarei aqui avisando.

Agradeço sua atenção...

 

Abraços amigo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Colega só pra complementar a explicação do bdexterholland, caso você efetue os comandos de INSERT OU UPDATE, passe os valores via Parametros, fica mais legível e fácil de visualizar possíveis erros na passagem de valores.

 

UPDATE <MINHA TABELA>

SET NOME = :nome

WHERE ID = :id

 

Query.ParamByName('nome').asstring = edtNome.text;

Query.ParamByName('id').asinteger = StrToInt(edtId.text);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente fica mais fácil a visualização. Vou alterar para ver se funciona.

O que eu pensei em fazer também, seria um update atravez do número de registro da tabela. Mas não consegui saber ainda como pegá-lo. Pois como podem existir vários arquivos com os valores iguais, mas apenas um diferente, então eu teria que cobrir todas as alternativas. Porém eu pensei numa maneira de fazer com que cada registro novo que seja gravado, exista um campo onde ele criaria esse número para mim, acrescentando '+1', pois assim eu teria um número identidade para cada registro. Então na condição 'where' eu colocaria esse número apenas.

Tentarei criá-lo e veremos se dá certo...

 

Agradeço muito a ajuda e paciência de vocês.... Muito Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, eu fiz conforme o bdexterholland falou, alterando os DBEdit pelo Edit e então tudo funcionou perfeitamente conforme abaixo.

 

 [color="#FF0000"]with QArquivo do
   begin
     Close;
     SQL.Clear;
     SQL.Add('Update Arquivo SET Sob_Rev = "'+Edit1.Text+'" where Projeto like "'+Edit3.Text+'" and Area like "'+Edit4.Text+'" and Sub_Area like "'+Edit5.Text+'" and GRD like "'+Edit6.Text+'" and Situacao like "'+Edit7.Text+'" and Rec_Env like "'+Edit8.Text+'" and Num_AEC like "'+Edit9.Text+'" and Num_Fornecedor like "'+Edit10.Text+'" and Email like "'+Edit11.Text+'" and Titulo like "'+Edit12.Text+'" and Revisao like "'+Edit13.Text+'" ');
     ExecSQL;
   end;[/color]

 

Agora farei conforme o wllf comentou, colocando tudo como parâmetro para não ficar como uma linha de comandos apenas.

 

Obrigado pessoal... Valeu pela ajuda....

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.