Erro de Gravação

17/05/2003

0

Estou com um grande prblema, estou trabalhando com CLIENTDATASET, de forma mestre-detalhe, sendo um cdsFORNECEDOR, tabela de FORNECEDORES, e um cdsMAQ, de uma tabela de MAQUINAS, está relacionado de forma correta, no ONCLICK do botão NOVO o código é o seguinte:

DM.cdsFORN.INSERT;
DM.cdsMAQ.INSERT; ==> ESTE COLOCADO POSTERIORMENTE, PARA VER SER CONTINUA COM A MSG DE ERRO!

E o botão GRAVAR, com o seguinte código:

DM.cdsFORN.POST;
DM.cdsMAQ.POST;
DM.cdsFORN.APPLYUPDATES(0);

A MSG DE ERRO É A SEGUINTE, ´´ cdsMAQ: DATASET NOT IN EDIT OR INSERT MODE.´´

SERÁ QUE É NO CÓDIGO QUE ESTA ACONTECENDO ISSO, ONDE ESTOU ERRANDO.

JÁ TENTEI COM O PARADOX, DEU O MESMO ERRO, ESTOU TRABALHANDO COM O INTERBASE>


Rkaliman

Rkaliman

Responder

Posts

17/05/2003

Rmfb

:D Amigo... Isto é muito fácil de resolver... Primeiro, vamos tentar entender o seguinte:

1 - Os TdataSet (Table, query....) possuem diversos modos que, dentre eles, podemos destacar:

1.1 - Modo de Alteração: É quando uma tabela ou query está sendo alterada. dsEdit

1.2 - Modo de Inclusão: É quando uma tabela está sendo inserida de um registro. dsInsert

1.3: Modo de Navegação: É quando o usuário está apenas navengando nos registros. dsBrowse


Então, você não pode chegar e dá um ´post´ em uma tabela ou query. Se a tabela ou query estiver no mode de Alteração (dsEdit) ou no modo de Inclusão (dsInsert), nada irá ocorrer e o post irá funcionar. Entretanto, se você der um post em uma tabela ou query e ela estiver no modo de Navegação (dsBrowse), irá ocorrer um erro (é o que está acontecendo com você).

Para verificar em qual modo uma tabela ou query se encontra, basta você implementar o seguinte código apenas para testar:

No DataSource que está ligado a sua tabela, tem um evento chamado ´OnChangeState´. Esse evento será sempre executado quando a tabela mudar de modo. Para você testar e não errar mais, tente o seguinte:
No evento OnChangeState do DataSource digite:

If(DataSource.DataSet.State = dsInsert) Then
Showmessage(´A tabela está no modo de Inclusão´)
Else
If(DataSource.DataSet.State = dsEdit) Then
Showmessage(´A tabela está no modo de Alteração´)
Else
If(DataSource.DataSet.State = dsBrowse) Then
Showmessage(´A tabela está no modo de Navegação´);

Pronto, agora que você já entendeu, basta implementar o seguinte código no evento do botão que grava na tabela:

If(DataSource.DataSet.State In[dsInsert,dsEdit])Then
Table.Post;

{Como já sabemos que o ´post´ retorna um erro se a tabela estiver no modo de navegação, estão, basta criticarmos para aque o ´post´ só seja executado se a tabela estiver no modo de Edição ou Alteração}

Espero ter ajudado....

[color=red:affeb12e74]OBS: Modo de Navegação (BROWSER OU BROWSE)..Não lembro direito.[/color:affeb12e74]


Responder

17/05/2003

Cruz

Qual a primeira mensagem de erro... ???


Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar