Fórum Qual maneira correta de gravar um cadastro #428376
08/11/2012
0
Uma usando o componente table com insert e post.
Outra usando a query.
Usando a table fica mais simples para implementar, pois vc arrasta os componentes para o form,
cria os botoes ou usa o dbnavigator e pronto. ta feito o form de cadastro.
Ja com a query, vc tem q colocar e nomear os edits. Colocar todos os nomes dos campos no sql, e criar todos os parametros,
Criar os botoes de gravar excluir etc...
Essas sao as 2 formas que eu sei. Qual seria a mais correta ou a mais usada ? Ou existe outra forma ?
Obrigado !
Geison
Curtir tópico
+ 0Posts
08/11/2012
Claudia Nogueira
Desde que comecei, 13 anos atrás, percebi que não era vantagem usar Table, e em todas as empresas que trabalhei também utilizam Query/DataSets em vez de Table.
Usando Table a tabela fica exposta, por geralmente quem usa esse tipo de componentes, traz todas as informações da tabela pra poder navegar nos dados, correndo o risco, no caso de uma queda de energia corromper com mais facilidade.
Eu sempre tenho uma tela de consulta, com os botões Inserir, Editar e Excluir e cada um faz a função que precisa. O Inserir e Editar abrem a tela e carregam nos Edits as informações.
Claro que outros programadores podem preferir a outra forma, só relatei minha opinião.
Gostei + 0
08/11/2012
Felipe Passos
Questão de opinião.
Abraços.
Gostei + 0
08/11/2012
Marcos Rocha
Se você tiver uma boa equipe e/ou tiver um nível de conhecimento razoável, pode pensar em implementar um framework que seja capaz de fazer isto de forma automatizada. Você ganha em tempo e produtividade.
Sempre fui contra o cadastro com datasets abertos (do tipo TTable ou Query sempre ativa) porque antigamente os DBControls eram muito ruins para fazer validação de dados antes de salvar. Hoje já não é mais assim, creio eu.
Gostei + 0
09/11/2012
Romario Kilian
Se eu usar Query/Edits tenho que usar a conexão do Interbase (IBX)ou seja: Database+TRansaction.
Se usar DBExpress como conexão não posso usar Query/Edits e sim (CDS+Provider+SQLDataSet) ???
É assim mesmo ?? Ou posso com uma conexão DBExpress usar Query/Edits.
Descuple a ignorância. Se alguem puder esclarescer isso ficaria muito grato.
Gostei + 0
09/11/2012
Maxiwel Rodrigues.
no ADO usamos: post;
no DBEXpress: applyupdates(0);
no Interbase: post;
Em casa botao é utilizado uma forma de algoritimo que o programador acha certo de funcionamento.
como uso DBexpress. posso informar as seguintes rotinas nos botoes:
Inserir - NOVO
cdstabela.insert;//inserir um novo registro
dbedtnome.setfocus;//focu no dbedit do primeiro campo (nome)
Excluir
if messagedlg('Deseja excluir o registro corrente?',mtconfirmation,[mbok,mbcancel],0)=mrOK then //messagem antes de excluir
cdstabela.delete;//deleta a informação em memoria
cdstabela.applyupdates(0);//deleta a informação do banco de dados
cdstabel.refresh;//atualiza a tabela
Cancela
cdstabela.cancel;//cancela a inclusao
editar
cdstabela.edit;//altera os dados
dbedit.setfocus;
Gostei + 0
09/11/2012
Romario Kilian
Entendi perfeitamente a tua explicação, muito obrigado por esclarecer.
A minha dúvida decorre de um outro post meu em que eu perguntei pro pessoal experiente qual a melhor maneira de se conectar com um banco Firebird. A maioria respondeu "DBExpress".
Daí a dúvida: Se eu usar a conexão DBX não vou poder usar Query puro/Edits, tipo assim: Insert into tabela values .....?
Tenho que obrigatóriamente usar CDS post, CDs cancel, CDS Aplyupdates(0) etc. ?
Isso que queria clarear.
Abraços
Gostei + 0
09/11/2012
Marcos Rocha
try
if not DM.Transaction.InTransaction then
DM.Transaction.StartTransaction;
DM.QRCadastro.Clear;
if FbInserting then
DM.QRCadastro.SQL.Add('Insert Into Cidade (cid_codigo, cid_descricao) values (:cid_codigo, :cid_descricao)')
else
DM.QRCadastro.SQL.Add('Update Cidade set cid_descricao = :cid_descricao Where cid_codigo = :cid_codigo');
DM.QRCadastro.ParamByName('cid_codigo').AsString := edtCodigo.Text;
DM.QRCadastro.ParamByName('cid_nome').AsString := edtNome.Text;
DM.QRCadastro.ExecSQL;
DM.Transaction.CommitRetaining;
MessageDlg('Operação concluída!', mtInformation, [mbOK], 0);
except
on E: Exception do
begin
DM.Transaction.RollbackRetaining;
TrataMensagemErro(E);
end;
end;Gostei + 0
09/11/2012
Romario Kilian
No teu exemplo no DM eu coloco quais objetos ? Um TSQLConnection (Aba DBExpress) um Transaction ?? (da aba IBX ??) e uma SQLQuery (aba DBExpress) ?. Isso que não estou compreendendo.
Eu sempre "imaginei" que se usar uma conexão DBExpress teria que usar os objetos (todos) dessa aba.
Se usar IBX teria que usar todos os componentes desta aba (Database, IBTransaction, Query etc.)
Por isso que minha dúvida ainda persiste, heheh.
Abraços.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)