Fórum Nâo atualiza dbgrid no momento em que salvo #236196
04/06/2004
0
Nunca usei o formato inserir/alterar/excluir em meus sistemas, e vejo que em delphi, a maioria usa essa filosofia. Criei uma tabela bairros em um banco firebird e inseri os componentes para acesso: SQLCONNECTION -> SQLDATASET -> DATASETPROVIDER -> CLIENTDATASET -> DATASOURCE.
Fiz os relacionamentos, inseri dois maskedit para representar o código e o nome do bairro e um botao salvar.
Como SetFocus inicial coloquei o codigo do bairro, e assim que clicar em salvar, criar via sql o registro no db com base no conteudo dos maskedit´s, como segue:
/**************************************************/
procedure TCadBai.BtnSalvarBairrosClick(Sender: TObject);
var
vvcodbai: integer;
trs: Ttransactiondesc;
begin
trs.TransactionID := 1;
trs.IsolationLevel := xilReadCommitted;
dm.Conexao.StartTransaction(trs);
try
dm.SQL_Bairros.Close ;
dm.SQL_Bairros.CommandText := ´INSERT INTO bairros (codbai,nombai) values (:vcodbai,:vnombai)´;
vvcodbai := strtoint(maskedit1.Text);
dm.SQL_Bairros.ParamByName(´vcodbai´).AsInteger := vvcodbai;
dm.sql_bairros.ParamByName(´vnombai´).AsString := maskedit2.Text ;
dm.sql_bairros.ExecSQL;
dm.conexao.commit(trs);
except
dm.conexao.rollback(trs);
end;
maskedit1.Text := ´0´ ;
maskedit2.text := ´ ´ ;
dbgrid1.Refresh ;
maskedit1.SetFocus ;
end;
/*******************************************************/
O que acontece:
- Nâo atualiza dbgrid no momento em que salvo, mas caso eu feche o sistema e entre novamente os dados estão lá.
- Se eu fechar a tela de cadastro do bairro (não saio do sistema) e entro
novamente dá um erro de chave primária.
Agradeço a ajuda.
Um abraço
Mario
[b:a9192da078][color=red:a9192da078]Título editado pelo Modeador (AZ) - Removido: ´Iniciando...´[/color:a9192da078][/b:a9192da078]
Aldus
Curtir tópico
+ 0Posts
04/06/2004
Thematrix:reloaded
se vc está usando D6 ou D7, dê uma pesquisada em sites como o Clube Delphi, livros e revistas sobre o DBExpress, o tempo gasto vai valer a pena, porque vc pode trabalhar direto com os componentes Data Controls e, por exemplo dar um Commit Retaining na tabela, isso atualizaria sua visão (DBGrid) na hora....
Mas caso vc precise manter a forma de programação atual, é só dizer pra ver como a gente pode lhe ajudar, valeu?
Gostei + 0
05/06/2004
Thoor Cobain
dm.SQL_Bairros.Close ;
dm.SQL_Bairros.CommandText := ´INSERT INTO bairros (codbai,nombai) values (:vcodbai,:vnombai)´;
vvcodbai := strtoint(maskedit1.Text);
dm.SQL_Bairros.ParamByName(´vcodbai´).AsInteger := vvcodbai;
dm.sql_bairros.ParamByName(´vnombai´).AsString := maskedit2.Text ;
dm.sql_bairros.CommandText := commit;
dm.sql_bairros.ExecSQL;
________________
Ainda axo melhor assim caso use BDE:
insira um componente -> Ttable
Na propriedade TABLENAME do Ttable escolha a tabela: bairro.
Na propriedade DATABASENAME do Ttable escolha Suas configuração do BDE caso tiver
e na propriedade NAME do Ttable digite: tbBairro
E agora faça assim:
procedure TCadBai.BtnSalvarBairrosClick(Sender: TObject);
begin
tbBairro.open;
tbBairro.insert;
tbBairro.FieldByName(´CODBAI´).asInteger := StrToInt(maskedit1.Text);
tbBairro.FieldByName(´NOMBAI´).asString := maskedit2.Text;
tbBairro.Post;
tbBairro.Refresh;
tbBairro.Close; // Só feche a tabela caso ela não seteja ligada no grid
end;
Gostei + 0
05/06/2004
Xisto
/**************************************************/ procedure TCadBai.BtnSalvarBairrosClick(Sender: TObject); var vvcodbai: integer; trs: Ttransactiondesc; begin trs.TransactionID := 1; trs.IsolationLevel := xilReadCommitted; dm.Conexao.StartTransaction(trs); try dm.SQL_Bairros.Close ; dm.SQL_Bairros.CommandText := ´INSERT INTO bairros (codbai,nombai) values (:vcodbai,:vnombai)´; vvcodbai := strtoint(maskedit1.Text); dm.SQL_Bairros.ParamByName(´vcodbai´).AsInteger := vvcodbai; dm.sql_bairros.ParamByName(´vnombai´).AsString := maskedit2.Text ; dm.sql_bairros.ExecSQL; dm.conexao.commit(trs); except dm.conexao.rollback(trs); end; maskedit1.Text := ´0´ ; maskedit2.text := ´ ´ ; dm.SQL_Bairros.Close ; dm.SQL_Bairros.CommandText := ´SELECT * FROM bairros´; dm.NAOSEIONOMEDOCLIENTEDATASET.Open; // nao precisa dm.SQL_Bairros.Open; // dbgrid1.Refresh ; maskedit1.SetFocus ; end;
Espero ter ajudado
Gostei + 0
06/06/2004
Aldus
Muito Obrigado.
Mario
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)