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>
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
Curtir tópico
+ 0
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]
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
Clique aqui para fazer login e interagir na Comunidade :)