Fórum Quase desistindo! Como editar uma tabela no DBGRID sem PK! #43751

15/04/2004

0

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...


Anarchybra

Anarchybra

Responder

Posts

15/04/2004

Aroldo Zanela

Colega,

Coloque um fragmento do código para que o pessoal possa analisar melhor. Você está efetuando a alteração diretamente na dbGrid?


Responder

Gostei + 0

15/04/2004

Anarchybra

Muito obrigado pela atenção....
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;



Responder

Gostei + 0

15/04/2004

Dorivansousa

Tente alterar o registro pelo ponteiro do campo...


Responder

Gostei + 0

15/04/2004

Anarchybra

caro dorivansousa,
você poderia me dar um exemplo de como alterar pela ponteiro do campo?


Responder

Gostei + 0

15/04/2004

Dorivansousa

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;


Responder

Gostei + 0

15/04/2004

Aroldo Zanela

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.


Responder

Gostei + 0

15/04/2004

Anarchybra

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!


Responder

Gostei + 0

16/04/2004

Dorivansousa

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!!!!


Responder

Gostei + 0

16/04/2004

Anarchybra

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!


Responder

Gostei + 0

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

Aceitar