Fórum Qual maneira correta de gravar um cadastro #428376

08/11/2012

0

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 !
Geison

Geison

Responder

Posts

08/11/2012

Claudia Nogueira

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.
Responder

Gostei + 0

08/11/2012

Felipe Passos

Também prefiro usar Querys.
Questão de opinião.
Abraços.
Responder

Gostei + 0

08/11/2012

Marcos Rocha

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.
Responder

Gostei + 0

09/11/2012

Romario Kilian

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.

Responder

Gostei + 0

09/11/2012

Maxiwel Rodrigues.

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;



Responder

Gostei + 0

09/11/2012

Romario Kilian

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
Responder

Gostei + 0

09/11/2012

Marcos Rocha

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;
Responder

Gostei + 0

09/11/2012

Romario Kilian

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.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar