Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Rafael Morán

Gravar registro na tabela

Recommended Posts

Boa Noite pessoal,

 

Estou desenvolvendo uma aplicação e me surgiu um problema.

 

Ao gravar o 1º registro utilizando a minha aplicação, o mesmo some do DBGRID. Vou explicar melhor...

 

Estou usando o Delphi 2009 com banco Firebird 2.5. Ligo meu banco a aplicação pelo trio SQLDataSet + DataSetProvider + ClientDataSet. Uso um DataSource e o ligo em um DBGrid.

 

A tela com o DBGrid apenas me mostra os registros já gravados mas a gravação é feita por outra tela.

 

Criei um Generator pelo IBExpert e uma Trigger para ao fazer um insert o campo IDCLIENTE seja incrementado de +1.

 

Pois bem, e volta a minha aplicação, ao inserir o 1º registro o mesmo vai para o grid. Se incluo na rotina de gravação o comando Refresh do ClientDataSet, o registro some e não reaparece a té eu finalizar a aplicação e executar novamente. Se eu abro a tabela no IBExpert o registro está lá e isso só ocorre para o 1º. Do segundo em diante os registros são gravados e apresentados no grid.

 

A rotina do meu botão Gravar está assim:

 

procedure TfrmCadastroClientes.btnGravarClienteInserirClick(Sender: TObject);

begin

if dbedtNomeCadastroClientes.Text <> '' then

begin

DMManutencaoClientes.CDSManutClientes.Post;

if DMManutencaoClientes.CDSManutClientes.ApplyUpdates(0) = 0 then

begin

ShowMessage(USUARIO + ', o cliente foi gravado com sucesso.');

Close;

with DMManutencaoClientes.CDSManutClientes do

begin

Refresh;

Refresh;

end;

end

else

begin

with DMManutencaoClientes.CDSManutClientes do

begin

CancelUpdates;

Refresh;

Refresh;

end;

ShowMessage(USUARIO + ', ocorreu um problema ao tentar gravar este cliente.');

end;

end

else

begin

ShowMessage(USUARIO + ', por favor me informe o nome do cliente para que eu possa gravá-lo.');

dbedtNomeCadastroClientes.SetFocus;

end;

end;

 

Alguém faz idéia do qu estou fazendo de errado ou se está faltando alguma coisa?

 

Desde já agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeira coisa que vou dar uma dica... idente seu códigos antes de postar, fica mais legível (use as tags {code} código {/code}, trocando as {} por []).

 

Agora a pergunta básica: você falou que usa isso e aquilo, mas não explicou qual dataset está ligado a qual datasource e como está a relação entre os componentes... também não dá para entender, após identar o seu código, porque você usa refresh duplicado por exemplo. Explica melhor o problema como um todo que talvez possamos encontrar onde está o erro.

 

[]'s

 

Ps.: Segue abaixo o código identado.

 

procedure TfrmCadastroClientes.btnGravarClienteInserirClick(Sender: TObject);
begin
	if dbedtNomeCadastroClientes.Text <> '' then
	begin
		DMManutencaoClientes.CDSManutClientes.Post;
		if DMManutencaoClientes.CDSManutClientes.ApplyUpdates(0) = 0 then
		begin
			ShowMessage(USUARIO + ', o cliente foi gravado com sucesso.');
			Close;
			with DMManutencaoClientes.CDSManutClientes do
			begin
				Refresh;
				Refresh;
			end;
		end
		else
		begin
			with DMManutencaoClientes.CDSManutClientes do
			begin
				CancelUpdates;
				Refresh;
				Refresh;
			end;
			ShowMessage(USUARIO + ', ocorreu um problema ao tentar gravar este cliente.');
		end;
	end
	else
	begin
		ShowMessage(USUARIO + ', por favor me informe o nome do cliente para que eu possa gravá-lo.');
		dbedtNomeCadastroClientes.SetFocus;
	end;
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.