Qual maneira correta de gravar um cadastro
Bom pessoal, sei de 2 maneiras de gravar campos em uma base.
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 !
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
Curtidas 0
Respostas
Claudia Nogueira
08/11/2012
Isso também vai da experiência de cada um, mas eu sempre trabalhei com Querys e Edits.
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.
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
Felipe Passos
08/11/2012
Também prefiro usar Querys.
Questão de opinião.
Abraços.
Questão de opinião.
Abraços.
GOSTEI 0
Marcos Rocha
08/11/2012
Trabalhei durante 6 anos em uma empresa onde eu tinha que digitar os SQL das Queries e pegava o valor dos Edits manualmente. Na verdade acredito que desta forma você tem um controle maior sobre os dados antes de irem para o banco de dados, mas sinceramente este processo é trabalhoso.
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.
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
Romario Kilian
08/11/2012
Aproveitando o gancho !!!
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.
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
Maxiwel Rodrigues.
08/11/2012
Companheiro na verdade as duas sao corretas. ai vai muito do programador escolher o tipo de entrada de dados.
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;
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
Romario Kilian
08/11/2012
Carissimo Maxwel Eduardo.
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
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
Marcos Rocha
08/11/2012
Romario para usar o IBExpress para acessar banco Firebird 1.5.3 ou Interbase 6.5, pode fazer dessa forma:
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
Romario Kilian
08/11/2012
Beleza Marcos.
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.
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