Update usando Query em tabelas paradox
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
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
Curtidas 0
Respostas
Otto
11/06/2004
o motivo realmente nao sei te informa, mas, voce poderia colar aqui a forma que vc esta fazendo esse update(sql)?!
GOSTEI 0
Rafael_gamba
11/06/2004
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;
GOSTEI 0
Otto
11/06/2004
ok, nessa alteração, vc permite o usuário alterar o ´Tipo´ e ´Ano´???
GOSTEI 0
Rafael_gamba
11/06/2004
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.
GOSTEI 0
Otto
11/06/2004
Ok,
vamos fazer o seguinte, declare uma variavel inteira, e armazene o ´Codigo´ nela..
quando vc for fazer o Update (sql), na condição Where vc coloca se referindo ao Codigo..
tipo:
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;
GOSTEI 0
Rafael_gamba
11/06/2004
Ok,
vamos fazer o seguinte, declare uma variavel inteira, e armazene o ´Codigo´ nela..
quando vc for fazer o Update (sql), na condição Where vc coloca se referindo ao Codigo..
tipo:
Var CodDatabela : Integer;
CodDaTabela := Query1.FieldByName(´Codigo´).AsInteger;
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.
GOSTEI 0
Otto
11/06/2004
Mas não acho legal ficar dando volta. Sei que há como fazer isso sem ter que usar soluções alternativas.
:?
GOSTEI 0
Vinicius2k
11/06/2004
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+
GOSTEI 0
Rafael_gamba
11/06/2004
[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!!!
GOSTEI 0
Rafael_gamba
11/06/2004
[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!!
GOSTEI 0
Vinicius2k
11/06/2004
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+
GOSTEI 0