Fórum Update usando Query em tabelas paradox #237231
11/06/2004
0
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
Curtir tópico
+ 0Posts
11/06/2004
Otto
Gostei + 0
11/06/2004
Rafael_gamba
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
11/06/2004
Otto
Gostei + 0
11/06/2004
Rafael_gamba
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
11/06/2004
Otto
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
11/06/2004
Rafael_gamba
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
11/06/2004
Otto
:?
Gostei + 0
11/06/2004
Vinicius2k
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
11/06/2004
Rafael_gamba
:?[/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
11/06/2004
Rafael_gamba
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
11/06/2004
Vinicius2k
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
Clique aqui para fazer login e interagir na Comunidade :)