Quase desistindo! Como editar uma tabela no DBGRID sem PK!
Amigos,
tenho uma tabela sem nenhuma chave primária, onde todos os campos podem ser repetidos.
Tenho um Grid que retorna uma determinada consulta, quando vou editar apenas um registro desta consulta, ele altera todos os registros que se concidem por qualquer campo...
Como faço para alterar apenas o registro em questão, e não interfeir em nada no restante?
Estou desesperado...
Uso D7/IBX mas aceito mudanças...
tenho uma tabela sem nenhuma chave primária, onde todos os campos podem ser repetidos.
Tenho um Grid que retorna uma determinada consulta, quando vou editar apenas um registro desta consulta, ele altera todos os registros que se concidem por qualquer campo...
Como faço para alterar apenas o registro em questão, e não interfeir em nada no restante?
Estou desesperado...
Uso D7/IBX mas aceito mudanças...
Anarchybra
Curtidas 0
Respostas
Aroldo Zanela
15/04/2004
Colega,
Coloque um fragmento do código para que o pessoal possa analisar melhor. Você está efetuando a alteração diretamente na dbGrid?
Coloque um fragmento do código para que o pessoal possa analisar melhor. Você está efetuando a alteração diretamente na dbGrid?
GOSTEI 0
Anarchybra
15/04/2004
Muito obrigado pela atenção....
eu desejo fazer a alteração direto pelo Grid.
Este é o código que estou usando.
eu desejo fazer a alteração direto pelo Grid.
Este é o código que estou usando.
procedure TForm1.SalvarAlteracoes; begin QryEditar.Edit; QryEditar.FieldByName(´cod_material´).Asstring := DBGrid1.Columns[0].Field.AsString; QryEditar.FieldByName(´descricao´).Asstring := DBGrid1.Columns[1].Field.AsString; QryEditar.FieldByName(´taxa1´).Asstring := DBGrid1.Columns[2].Field.AsString; QryEditar.FieldByName(´preco1´).Asstring := DBGrid1.Columns[3].Field.AsString; QryEditar.FieldByName(´custo1´).Asstring := DBGrid1.Columns[4].Field.AsString; QryEditar.FieldByName(´tipo_moeda´).Asstring := DBGrid1.Columns[5].Field.AsString; QryEditar.FieldByName(´data_cadastro´).Asstring := DBGrid1.Columns[6].Field.AsString; QryEditar.post; Transacao.Commit; end;
GOSTEI 0
Dorivansousa
15/04/2004
Tente alterar o registro pelo ponteiro do campo...
GOSTEI 0
Anarchybra
15/04/2004
caro dorivansousa,
você poderia me dar um exemplo de como alterar pela ponteiro do campo?
você poderia me dar um exemplo de como alterar pela ponteiro do campo?
GOSTEI 0
Dorivansousa
15/04/2004
tente gravar a posicao do campo numa variavel
var_recno:=qryeditar.recno;
e compara se a posicao q ta sendo gravada é igual a posicão do registro q vc quer gravar
if QryFulano.RecNo=rc then
begin
end;
end;
var_recno:=qryeditar.recno;
e compara se a posicao q ta sendo gravada é igual a posicão do registro q vc quer gravar
if QryFulano.RecNo=rc then
begin
end;
end;
GOSTEI 0
Aroldo Zanela
15/04/2004
tente gravar a posicao do campo numa variavel
var_recno:=qryeditar.recno;
e compara se a posicao q ta sendo gravada é igual a posicão do registro q vc quer gravar
if QryFulano.RecNo=rc then
begin
end;
end;
Colega,
Isto normalmente só funciona em banco de dados desktop como Paradox e dBase.
Na minha opinião, acho melhor utilizar um ClientDataSet para minimizar o esforço na implementação da solução.
GOSTEI 0
Anarchybra
15/04/2004
Colega,
Isto normalmente só funciona em banco de dados desktop como Paradox e dBase.
Na minha opinião, acho melhor utilizar um ClientDataSet para minimizar o esforço na implementação da solução.
Caros amigos dorivansousa e Aroldo Zanela, agradeço a disposição de vocês.
dorivansousa, a instrução que me passou, realmente não funcionou, como o Aroldo tinha premeditado.
Aroldo, você citou que eu poderia usar um ClientDataSet...
Como ficaria a implementação em minha aplicação?
Muito obrigado a todos!
GOSTEI 0
Dorivansousa
15/04/2004
Primeiramente me desculpe o equivo a ideia q queria passar seria como se vc percorrese todo o data set e somente o registro em questao seria atualizado, mas como viu realmente nao funcionou porque o processo de alteracao é feito no banco e o comando sql que faz a alteração desta sua tabela ficaria mais ou menos nessa ideia:
update Grupos
set
CODIGO = :CODIGO
DESCRICAO = :DESCRICAO,
COMISSAO_VISTA = :COMISSAO_VISTA,
COMISSAO_PRAZO = :COMISSAO_PRAZO,
DT_CADASTRO = :DT_CADASTRO
where
CODIGO = :CODIGO
pois no caso todos os registro q tiverem os codigos iguais serao atualizados, nao sei se estou correto mais acredito que o banco elegeu uma ´chave´ para a sua tabela. Minha sugestao é q vc coloque uma chave primaria nessa tabela ou um campo que nao se repita (indice unico), pode ser um campo qualquer tipo ´contador´ para a tabela se basear por ele...
Falow!!!!
update Grupos
set
CODIGO = :CODIGO
DESCRICAO = :DESCRICAO,
COMISSAO_VISTA = :COMISSAO_VISTA,
COMISSAO_PRAZO = :COMISSAO_PRAZO,
DT_CADASTRO = :DT_CADASTRO
where
CODIGO = :CODIGO
pois no caso todos os registro q tiverem os codigos iguais serao atualizados, nao sei se estou correto mais acredito que o banco elegeu uma ´chave´ para a sua tabela. Minha sugestao é q vc coloque uma chave primaria nessa tabela ou um campo que nao se repita (indice unico), pode ser um campo qualquer tipo ´contador´ para a tabela se basear por ele...
Falow!!!!
GOSTEI 0
Anarchybra
15/04/2004
Amigo dorivansousa,
muito obrigado pela dica....
estou pensando em adicionar um campo em minha tabela para me basear, pois todos os outros campos podem ser repetidos, inclusive o código...
Valeu pela dica!
muito obrigado pela dica....
estou pensando em adicionar um campo em minha tabela para me basear, pois todos os outros campos podem ser repetidos, inclusive o código...
Valeu pela dica!
GOSTEI 0