Fórum Update usando Query em tabelas paradox #237231

11/06/2004

0

Estou usando tabelas paradox e para dar o update estou usando simplesmente uma Query. O único problema é que ao invés de simplesmente atualizar o meu registro, quando executo a Query o registro atual é apagado e é inserido um novo registro.
Tudo bem, não deixa de ser uma atualização, mas não quero que meu campo autoincrement seja alterado. Alguém sabe me dizer pq está acontecendo isso?
Não estou usando UpdateSQL


Rafael_gamba

Rafael_gamba

Responder

Posts

11/06/2004

Otto

o motivo realmente nao sei te informa, mas, voce poderia colar aqui a forma que vc esta fazendo esse update(sql)?!


Responder

Gostei + 0

11/06/2004

Rafael_gamba

o motivo realmente nao sei te informa, mas, voce poderia colar aqui a forma que vc esta fazendo esse update(sql)?!

Estou usando o código abaixo:

BDPersistente.QGerencia.SQL.Clear;
BDPersistente.QGerencia.SQL.Text:= ´update Campeonato ´ +
´set Ano = :PNovoAno, Tipo = :PNovoTipo ´ +
´where Tipo = :PTipo and Ano = :PAno´;
BDPersistente.QGerencia.Close;
BDPersistente.QGerencia.AutoRefresh:= True;
BDPersistente.QGerencia.ParamByName(´PTipo´).AsString:=tipo;
BDPersistente.QGerencia.ParamByName(´PAno´).AsInteger:=ano;
BDPersistente.QGerencia.ParamByName(´PNovoTipo´).AsString:=novoTipo;
BDPersistente.QGerencia.ParamByName(´PNovoAno´).AsInteger:=novoAno;
BDPersistente.QGerencia.ExecSql;

BDPersistente.TCampeonatos.Refresh;
TelaCampeonato.DBGCampeonatos.Refresh;


Responder

Gostei + 0

11/06/2004

Otto

ok, nessa alteração, vc permite o usuário alterar o ´Tipo´ e ´Ano´???


Responder

Gostei + 0

11/06/2004

Rafael_gamba

ok, nessa alteração, vc permite o usuário alterar o ´Tipo´ e ´Ano´???


Exatamente!!

A tabela tem 3 campos (Codigo,Tipo,Ano)
O campo codigo é chave primária e autoincrement
Não deveria mudar. Certo?
Minha intenção é alterar somente ano e Tipo. Não quero gerar outro registro. Mesmo pq o campo codigo está relacionado a outras tabelas e por isso não pode ser alterado.


Responder

Gostei + 0

11/06/2004

Otto

Ok,

vamos fazer o seguinte, declare uma variavel inteira, e armazene o ´Codigo´ nela..

Var
 CodDatabela : Integer;



CodDaTabela := Query1.FieldByName(´Codigo´).AsInteger;




quando vc for fazer o Update (sql), na condição Where vc coloca se referindo ao Codigo..

tipo:

query1.sql.text := ´UPDATE Tabela SET       ´ +
                   ´  PTipo = :tip,         ´ +
                   ´  PAno  = :ano           ´ +
                   ´    Where Codigo = :Cod´;
Params[00].AsString  := O_Tipo;
Params[01].AsInteger := O_Ano;
Params[02].AsInteger := CodDaTabela; //Codigo da tabela;



Responder

Gostei + 0

11/06/2004

Rafael_gamba

Ok, vamos fazer o seguinte, declare uma variavel inteira, e armazene o ´Codigo´ nela..
Var
 CodDatabela : Integer;
CodDaTabela := Query1.FieldByName(´Codigo´).AsInteger;
quando vc for fazer o Update (sql), na condição Where vc coloca se referindo ao Codigo.. tipo:
query1.sql.text := ´UPDATE Tabela SET       ´ +
                   ´  PTipo = :tip,         ´ +
                   ´  PAno  = :ano           ´ +
                   ´    Where Codigo = :Cod´;
Params[00].AsString  := O_Tipo;
Params[01].AsInteger := O_Ano;
Params[02].AsInteger := CodDaTabela; //Codigo da tabela;



Eu fiz uma coisa parecida e deu certo. Mas não acho legal ficar dando volta. Sei que há como fazer isso sem ter que usar soluções alternativas. Só não sei como. De qualquer modo, valeu pela ajuda.


Responder

Gostei + 0

11/06/2004

Otto

Mas não acho legal ficar dando volta. Sei que há como fazer isso sem ter que usar soluções alternativas.


:?


Responder

Gostei + 0

11/06/2004

Vinicius2k

Eu fiz uma coisa parecida e deu certo. Mas não acho legal ficar dando volta. Sei que há como fazer isso sem ter que usar soluções alternativas.


Colega, isso não é ´dar volta´ e nem ´solução alternativa´... quando se deseja fazer um update num registro de uma tabela, a instrução SQL precisa conter um identificador de qual ou quais registros atualizar... o mais comum é utilizar-se da chave primária que normalmente não é atualizável e nunca se repete...
Creio que a sua instrução está ´confundindo´ a Query, visto que vc está atualizando campos presentes no where...
T+


Responder

Gostei + 0

11/06/2004

Rafael_gamba

[quote:2626473f4e]Mas não acho legal ficar dando volta. Sei que há como fazer isso sem ter que usar soluções alternativas.


:?[/quote:2626473f4e]

Caro oTTo,

você realmente esta certíssimo!!! É que eu havia criado uma solução alternativa que mantinha o codigo mas não poderia usar autoincrement e ao olhar rapidamente sua sugestão, achei que estava dizendo pra fazer a mesma coisa. O Vinícius2k é que me mostrou que a sua alternativa está correta e minha linha de código estava confundindo a query.

Obrigado pela ajuda!!! Problema resolvido!!!
E peço desculpas por ter interpretado mal a sua sugestão que aliás resolveu o meu problema.

Um abraço!!!


Responder

Gostei + 0

11/06/2004

Rafael_gamba

[quote:54df43022a=´Rafael_Gamba´]Eu fiz uma coisa parecida e deu certo. Mas não acho legal ficar dando volta. Sei que há como fazer isso sem ter que usar soluções alternativas.


Colega, isso não é ´dar volta´ e nem ´solução alternativa´... quando se deseja fazer um update num registro de uma tabela, a instrução SQL precisa conter um identificador de qual ou quais registros atualizar... o mais comum é utilizar-se da chave primária que normalmente não é atualizável e nunca se repete...
Creio que a sua instrução está ´confundindo´ a Query, visto que vc está atualizando campos presentes no where...
T+[/quote:54df43022a]

Caro Vinícius,

sua mensagem me fez enxergar que a solução do oTTo estava correta e nada tinha a ver com ´dar volta´. Valeu pela dica!!! E desculpe pela confusão...

Abraço!!


Responder

Gostei + 0

11/06/2004

Vinicius2k

Caro Vinícius, sua mensagem me fez enxergar que a solução do oTTo estava correta e nada tinha a ver com ´dar volta´. Valeu pela dica!!! E desculpe pela confusão... Abraço!!


Rafael,
Por vezes a solução mais óbvia é a correta e talvez por ser tão óbvia, acreditamos não ser a ideal...
Vc não precisa se desculpar... estamos aqui pra isto mesmo, afinal é um ´Fórum de discussão´... no bom sentido é claro... :wink:
T+


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar