Posts
04/11/2008
Silvio Paganini
Bom dia!
Você está usando store procedure?
Estou te passando uma video aula que explica passo a passo como atualizar(inserir)dados
no grid do Delphi 2007 com Sql Server usando dbgo.
Sobre a segunda dúvida, eu não entendi o que você quis dizer, por favor, explique novamente.
Att,
Fabio Correa
[#VIDEO-11#]
05/11/2008
Guinther Pauli
ola Carlos td bom?A resposta do Fabio foi suficiente? Vc ainda precisa de mais algum esclarecimento? Conseguiu resolver seu problema? Estamos a disposicao!abs
boa noite
Eu nao consegui pois estou utilizando o famoso trio de componentes da paleta dbexpress e nao gostaria de mudar para nao ficar muito baguncado
ve se tem como fazer isso pela paleta dbexpress
07/11/2008
Guinther Pauli
Carlos,
1o. Dúvida:
Vamos entender um pouco melhor a situação,
No DBGrid, onde vc exibe os pedidos, sem o número do entregador em um primeiro momento. Vc esta utilizando uma SQLQuery ligada a um ClientDataSet para exibir os dados?
Essa SqlQuery esta recebendo dados da View Atualizável? Se sim vc pode sempre que entrar na tela, no evento OnShow do formulário atualizar essa SqlQuery, ou seja dar um close e um open nela, passando os parâmetros que vc já passa hj para exibir o conteúdo no DbGrid, faça um refresh ou close, open no ClientDataSet também, dessa forma caso o campo Entregador esteja preenchido irá aparecer no DBGRid.
2o. Dúvida:
Vc pode colocar no evento OnClose do formulário de login, o seguinte:
FrmNomeForm.Free; (Com isso você libera ele da memória);
Veja se funciona e me retorne por favor,
Abraço!
08/11/2008
Guinther Pauli
Carlos,
Vamos tentar melhorar ainda mais a resposta anterior, sendo mais objetivo ainda ao seu problema/dúvida:
Em primeiro lugar quando trabalhamos com o trio e isso inclui o ClientDataSet ficamos obrigado a invocar o ApplyUpdates do CDS para que os dados sejam persistidos. Quando você vai a Grid edit e pressiona enter o método Post do DataSet ao qual a Grid está conectada é disparado e como a grid esta ligada ao ClientDataSet então o Post do CDS será Chamado. Pois bem Post no CDS não grava registro, assim uma solução seria você chamar o método ApplyUpdates(0) no Evento OnAfterPost do ClientDataSet que esta conectado ao DBGrid que com certeza e o mesmo conectado a sua View Atualizável. Faça o teste.
Agora já aproveitando vamos ao Plano B pois você vai precisar, pois não á simples assim atualizar dados que vem de muitas tabelas (como e o caso da view) usando DBX com DataSetProvider. O DataSetProvider tem que ser informado sobre qual tabela ele ira utilizar para gerar as instruções sql corretas para serem aplicadas ao banco. Assim e mais simples, Pratico, Rápido e seguro o seguinte procedimento. Declare na seção Private do seu forma a seguinte função:
Function AlocaEntregador(IDEntregador, IDPedido: Integer): Boolean;
Na Implementação faça:
Function FrmPrincipal.AlocaEntregador(IDEntregador, IDPedido: Integer): Boolean;
Begin
Result := SqlConnection.ExecuteDirect(‘Update Pedido Set IdEntregador = ’+IntToStr(IdEntregador)+‘ where IdPedido = ‘+IntToStr(Idpedido) = 1;
End;
O código é muito simples. Você irá passar o código do pedido que quer atualizar e o entregador deste pedido. Assim nós executamos um update na tabela de pedidos atribuindo ao pedido o código do entregador. O método execute direct retorna o número de linhas afetadas que deverá ser um, correto ? Com isso retornamos verdadeiro se uma linha for realmente afetada ou false caso o método não atualize nenhum pedido.
Assim, você agora tem várias opções de executar este método. Uma delas e a mais simples seria no evento After Post do CDS. Clique no CDS que está conectado na Grid e no evento OnAfterPost Coloque o código abaixo:
AlocaEntregador(CDSEntrega.FiledByname(‘IDPEDIDO’).AsInteger, CDSEntrega.FiledByname(‘IDEntragador).AsInteger);
Lembre-se de substituir o nome dos campos pelo nome dos seus campos, eu deduzo que não seja nada muito diferente do que coloquei porém verifique você mesmo.
Agora a segunda dúvida:
Coloque o form de login na seção available forms. Para Isso vá em project - > Options no nó Forms.
Feito isso va no seu formulário principal no evento OnCreate e coloque o código abaixo:
FrmLogin := TfrmLogin.Create(Self);
FrmLogin.ShowModal;
If FrmLogin.ModalResult = MrOk then
FreeandNil(FrmLogin)
Else
Application.Terminate;
No formulário de login você fará o seguinte. Provavelmente você deverá ter um método no clique do botão login, mantenha-o porém a última linha deverá ser ModelResult := MrOk.
Com isso caso o usuário se log com sucesso vc irá atribuir o model result ao form com isso o form será fechado e no Form Principal o teste será feito e o formulário liberado. Caso o usuário feche o login com Alt + F4 ou outro meio a aplicação será encerrada.
Aguardo seu retorno,
abs
09/11/2008
Guinther Pauli
Carlos,
As respostas atenderam sua necessidade ?
Fico no aguardo, para zerarmos esse chamado,
abs
Eu vi um exemplo seu na devmedia mais nao da certo pq a view nao tem parametro simplesmento ela traz os ultimos 100 pedidos do cliente
id_motoqueiro , nm_cliente,ds_endereco ,..........................dt_pedido
como sao muitos telefones tocando ao mesmo tempo nao da tempo do atendente jogar o motoqueiro na tela ele atende manda em branco o id_motoqueiro o outro atendende que passa as entregas e que tambem se encontra em outro local da empresa que vai informar la no tela o numero do motoqueiro , pois ele la que passa as entregas
!
11/11/2008
Guinther Pauli
Carlos,
Solicitei ao Rodrigo Carreiro que fize-se uma vídeo-exemplo para esclarecer sua dúvida/solicitação.
http://video.devmedia.com.br/naoexclusivos/RodrigoMourao/Consultoria/ExemploEntrega.zip
Aguardo seu retorno para encerrarmos esse chamado.
abs
Boa tarde amigos Guinter , e Rodrigo
A questao do dbgrid esta resolvida. Valeu Rodrigo pelo video muito bom cara resolvi facilmente depois de assistir o video pode fechar o chamado.
E vou continuar assinando essa consultoria no inicio em nao acreditei muito mais realmente o serviço de voces ai e muito bom e de qualidade !