GARANTIR DESCONTO

Fórum Interbase está exibindo registros DUPLICADOS. #41094

19/12/2003

0

Tenho um formulário com vários campos a serem preenchidos. Depois de salvar e acrescentar um novo registro, meu usuario não deseja preencher todos os campos novamente, uma vez que boa parte deles se repete.
Dessa forma, depois que o usuário salva (comando POST e logo em seguinda COMMITRETAINING), eu salvo todos os valores dos campos (strings) em uma StringList. Em seguida eu uso o comando INSERT e lanço todo o conteudo da StringList novamente nos campos.

Essa operação aparentemente simples está me tirando o sono a um tempão, pois após alguns registros inseridos dessa forma, quando eu navego para outro formulário onde um DBGRID mostra o conteudo da minha tabela, eu percebo que o Interbase exibe registros DUPLICADOS!
E o mais interessante é que até mesmo o INDICE (eu uso chave primária) é mostrado duplicado.
Se eu fechar e abrir o programa, os registros duplicados somem, o que me faz entender que a duplicação é apenas VISUAL, e não física (obvio, caso contrário daria VIOLAÇÃO DE PRIMARY KEY).

Fuçando mais um pouco constatei que isso só ocorre por causa do comando INSERT que eu uso na mesma rotina (botão) onde gravo (Post/CommitRetaining). Se eu usar um botão separado para o comando INSERT, a duplicação não ocorre (?!).
Também notei que, com poucos registros (1, 2 ou 3) isso também não ocorre (depende da quantidade de registros que o DBGrid exibe na tela).

Eu nem preciso lançar o conteúdo da StringList novamente nos campos para essa ´cáca´ acontecer. Apenas o comando INSERT após o commitretaining já é suficiente para duplicar os benditos registros no DBGrid...

Alguém saberia me dizer se estou fazendo algo errado, se existe outro processo para ´repetir registros´ no INTERBASE ou se esse ´bug´ só ocorre com o meu Interbase? Quem quiser testar o meu problema é simples: basta colocar um INSERT após o POST.

Acredito que seja falta de conhecimento de minha parte sobre ´transações´, sinceramente não sei. Só sei que esse é o único problema que tem me afetado ultimamente quando eu programo CLIENTE/SERVIDOR.

Uso o Interbase 6.0 com o Delphi 5.0 e os componentes IBX padrão da palheta do Delphi 5.


Obrigado a todos.


Neu


Ismael

Ismael

Responder

Posts

20/12/2003

Agnaldo

Tenho um formulário com vários campos a serem preenchidos. Depois de salvar e acrescentar um novo registro, meu usuario não deseja preencher todos os campos novamente, uma vez que boa parte deles se repete. Dessa forma, depois que o usuário salva (comando POST e logo em seguinda COMMITRETAINING), eu salvo todos os valores dos campos (strings) em uma StringList. Em seguida eu uso o comando INSERT e lanço todo o conteudo da StringList novamente nos campos. Essa operação aparentemente simples está me tirando o sono a um tempão, pois após alguns registros inseridos dessa forma, quando eu navego para outro formulário onde um DBGRID mostra o conteudo da minha tabela, eu percebo que o Interbase exibe registros DUPLICADOS! E o mais interessante é que até mesmo o INDICE (eu uso chave primária) é mostrado duplicado. Se eu fechar e abrir o programa, os registros duplicados somem, o que me faz entender que a duplicação é apenas VISUAL, e não física (obvio, caso contrário daria VIOLAÇÃO DE PRIMARY KEY). Fuçando mais um pouco constatei que isso só ocorre por causa do comando INSERT que eu uso na mesma rotina (botão) onde gravo (Post/CommitRetaining). Se eu usar um botão separado para o comando INSERT, a duplicação não ocorre (?!). Também notei que, com poucos registros (1, 2 ou 3) isso também não ocorre (depende da quantidade de registros que o DBGrid exibe na tela). Eu nem preciso lançar o conteúdo da StringList novamente nos campos para essa ´cáca´ acontecer. Apenas o comando INSERT após o commitretaining já é suficiente para duplicar os benditos registros no DBGrid... Alguém saberia me dizer se estou fazendo algo errado, se existe outro processo para ´repetir registros´ no INTERBASE ou se esse ´bug´ só ocorre com o meu Interbase? Quem quiser testar o meu problema é simples: basta colocar um INSERT após o POST. Acredito que seja falta de conhecimento de minha parte sobre ´transações´, sinceramente não sei. Só sei que esse é o único problema que tem me afetado ultimamente quando eu programo CLIENTE/SERVIDOR. Uso o Interbase 6.0 com o Delphi 5.0 e os componentes IBX padrão da palheta do Delphi 5. Obrigado a todos. Neu


Olá.
Tive um problema parecido com o que vc está tendo, porém para resolver esta coisa tomei as seguintes providências:

1. Atualizar todos o IBX.

2. Após o comando post, Gravo com CommitRetaining e fecho a tabela.
3. Insiro novamente o registro através de uma IbQuery.
4. Gravo com CommitRetaining...
5. Abro a tabela novamente e pronto.... uma gambiarra que resolve...

Obs: Procure atualizar seu ib para fb... é melhor e dá menos problema.

Abraço.


Responder

Gostei + 0

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

Aceitar