Carcleo 4 Denunciar post Postado Abril 11, 2007 Copiei essa procedure de um programa que baixei da net. o programa, ele era Table da Guia BDE, eu coverti em Query do Zeos Lib. Acontece que a linha "TmpQry.Connection := QryItens.Connection;", a conexao um ta sendo feita. Codigo que copiei: procedure tformcadpedidos.recalculapedido;var tmptable:ttable; total:currency;begin tmptable:=ttable.Create(application); try tmptable.DatabaseName:=tableitens.DatabaseName; tmptable.TableName:=tableitens.TableName; tmptable.Open; tmptable.FindKey([tablepedidosnumeropedido.asInteger]); total:=0; while (not tmptable.Eof) and (tmptable.FieldByName('NumeroPedido').AsInteger= tablepedidosnumeropedido.AsInteger) do begin total:=total+(tmptable.fieldbyname('valorunitario').AsCurrency * tmptable.fieldbyname('quantidade').AsFloat); tmptable.Next; end; finally tmptable.Close; tmptable.Free; end; statictexttotal.Caption:=formatcurr('###,###,##0.00',total);end; Codigo que transformei:(Não consigo criar a TmpQry de jeito nenhum) procedure TCPedidos.RecalculaPedido;var TmpQry:TZQuery; Total:Currency; // armazena valores do tipo moedabegin // cria um objeto Qry via codificação TmpQry := TZQuery.Create(Application); try // define DatabaseName e QryName via codificação TmpQry.Connection := QryItens.Connection; TmpQry.Name := QryItens.Name; TmpQry.SQL.Text := 'Select * from Itens'; TmpQry.Open; //Observe que, para um novo pedido, o CodigoPedido ainda não foi gerado.Self // Daí QryPedidosCodigoPedido.AsString sempre tera valor nulo e não terá ítens o pedido. TmpQry.Locate('NumeroPedido', QryPedidosCodigoPedido.AsInteger, []);// TmpQry.FindField(QryPedidosCodigoPedido.AsString); Total := 0; // inicializa a variavel totalizadora while (not TmpQry.Eof) and (TmpQry.FieldByName('NumeroPedido').AsInteger = QryPedidosCodigoPedido.AsInteger) do begin // Acumula o Total da linha Total := Total + (TmpQry.FieldByName('PrecoUni').AsCurrency * TmpQry.FieldByName('Quantidade').AsFloat); TmpQry.Next; // próximo registro end; finally TmpQry.Close; // fecha a tabela TmpQry.Free; // libera objeto da memória end; StaticTextTotal.Caption := FormatCurr('###,###,##0.00', Total);end; Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Abril 12, 2007 Oh pessoal, me ajuda aí. Compartilhar este post Link para o post Compartilhar em outros sites
Hugo Slepicka 0 Denunciar post Postado Abril 12, 2007 Antes de apenas copiar um código... Procure Entendê-lo, saber a base do código... e ai adapte as suas necessidades... Não basta sair dando CTRL+C e CTRL+V no code que você viu na net e querer que agente resolva tudo... Dê uma olhada com mais carinho no code que você consegue... http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Abril 12, 2007 Hugo, por favor não me leve a mal mas eu não sei se expliquei direito.Eu migrei o código, troquei os componentes da gua BDE pelos da Zeos Lib, nessa migra~/ao, fiquei uma semana quebrando cabeça antes de recorrer ao fórum.E se observar, tem propriedades que não sao comuns aos dois comoentes. Certo? Compartilhar este post Link para o post Compartilhar em outros sites
Hugo Slepicka 0 Denunciar post Postado Abril 12, 2007 Da alguma mensagem de erro???Ou simplesmente não cria???Tente assim: QueryMaster := TQuery.Create(Self); QueryMaster.DatabaseName := 'BD'; QueryMaster.SQL.Clear; QueryMaster.SQL.Add('Select * From CadProduto'); QueryMaster.Open; Showmessage(IntToStr(QueryMaster.RecordCount)); FreeAndNil(QueryMaster); Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Abril 12, 2007 Num novo pedido (querypedidos.insert), a variavel glogal Total não totaliza, só fica o 0,00. Eis o código todo do Form: unit CadPedidos;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ZDataset, DB, ZAbstractRODataset, ZAbstractDataset, ZAbstractTable, Grids, DBGrids, StdCtrls, Buttons, DBCtrls, Mask, ExtCtrls;type TCPedidos = class(TForm) PanelDados: TPanel; LabelCodigoPedido: TLabel; LabelCodigoCliente: TLabel; LabelLocalFatura: TLabel; LabelLocalCobranca: TLabel; LabelLocalEntrega: TLabel; LabelCPF_CNPJ: TLabel; LabelCEP: TLabel; LabelDataCadastro: TLabel; LabelTotalPedido: TLabel; DBEditCodigoPedido: TDBEdit; DBEditCodigoCliente: TDBEdit; DBEditLocalFatura: TDBEdit; DBEditLocalCobranca: TDBEdit; DBEditLocalEntrega: TDBEdit; DBEditCPF_CNPJ: TDBEdit; DBEditCEP: TDBEdit; DBEditDataCadastro: TDBEdit; StaticTextTotal: TStaticText; PanelBotoes: TPanel; SpdBtnAlterar: TSpeedButton; SpdBtnIncluir: TSpeedButton; SpdBtnProcurar: TSpeedButton; SpdBtnCancelar: TSpeedButton; SpdBtnGravar: TSpeedButton; SpdBtnExcluir: TSpeedButton; DBNavigatorPedidos: TDBNavigator; BitBtnFechar: TBitBtn; DBGridItens: TDBGrid; DSPedidos: TDataSource; DSItens: TDataSource; QryClientes2: TZQuery; DSClientes: TDataSource; QryPedidos: TZQuery; QryItens: TZQuery; QryClientes: TZQuery; QryProdutos: TZQuery; QryItensItem: TIntegerField; QryItensNumeroPedido: TIntegerField; QryItensCodigoProduto: TIntegerField; QryItensQuantidade: TIntegerField; QryItensPrecoUni: TIntegerField; QryProdutosCodigoProduto: TIntegerField; QryProdutosDescricao: TStringField; QryProdutosPrecoUni: TIntegerField; QryClientesCodigoCliente: TIntegerField; QryClientesDataCadastro: TDateField; QryClientesTipo: TStringField; QryClientesCPF_CNPJ: TStringField; QryClientesNome: TStringField; QryClientesEndereco: TStringField; QryClientesBairro: TStringField; QryClientesCidade: TStringField; QryClientesEstado: TStringField; QryClientesTelefone: TStringField; QryClientesEmail: TStringField; QryItensTotal: TCurrencyField; QryItensDescricao: TStringField; QryClientes2CodigoCliente: TIntegerField; QryClientes2DataCadastro: TDateField; QryClientes2Tipo: TStringField; QryClientes2CPF_CNPJ: TStringField; QryClientes2Nome: TStringField; QryClientes2Endereco: TStringField; QryClientes2Bairro: TStringField; QryClientes2Cidade: TStringField; QryClientes2Estado: TStringField; QryClientes2Telefone: TStringField; QryClientes2Email: TStringField; DBRadioGroupCondicaoPagamento: TDBRadioGroup; SpeedButtonImprimir: TSpeedButton; NomeCliente: TLabel; DBLookupComboBoxNomeCliente: TDBLookupComboBox; QryPedidosCodigoPedido: TIntegerField; QryPedidosCondicaoPgto: TStringField; QryPedidosDataCadastro: TDateField; QryPedidosCodigoCliente: TIntegerField; QryPedidosNomeCli: TStringField; QryPedidosLocalFatura: TStringField; QryPedidosLocalCobranca: TStringField; QryPedidosLocalEntrega: TStringField; QryPedidosCPF_CNPJ: TStringField; QryPedidosCEP: TStringField; QryPedidosNomeCliente: TStringField; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure QryPedidosNewRecord(DataSet: TDataSet); procedure QryItensNewRecord(DataSet: TDataSet); procedure QryItensCalcFields(DataSet: TDataSet); procedure QryItensBeforeInsert(DataSet: TDataSet); procedure QryItensBeforePost(DataSet: TDataSet); procedure DBGridItensKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure QryItensCodigoProdutoValidate(Sender: TField); procedure QryPedidosDataCadastroSetText(Sender: TField; const Text: String); procedure SpdBtnIncluirClick(Sender: TObject); procedure SpdBtnAlterarClick(Sender: TObject); procedure SpdBtnExcluirClick(Sender: TObject); procedure SpdBtnGravarClick(Sender: TObject); procedure SpdBtnCancelarClick(Sender: TObject); procedure SpdBtnProcurarClick(Sender: TObject); procedure DBLookupComboBoxNomeClienteClick(Sender: TObject); procedure SpeedButtonImprimirClick(Sender: TObject); procedure QryPedidosCPF_CNPJGetText(Sender: TField; var Text: String; DisplayText: Boolean); private { Private declarations } procedure AtivarControles(Ativar: Boolean); procedure RecalculaPedido; public { Public declarations } end;var CPedidos: TCPedidos;implementationuses dmsane, PesqPed, RelatorioPedidos, MaskUtils, Math;{$R *.dfm}procedure TCPedidos.FormCreate(Sender: TObject);begin QryProdutos.Open; QryClientes.Open; QryPedidos.Open; QryItens.Open;end;procedure TCPedidos.FormClose(Sender: TObject; var Action: TCloseAction);begin Action:= cafree; // remove o form da memória CPedidos := NIL; // informa que foi destruído (não criado)end;procedure TCPedidos.FormDestroy(Sender: TObject);begin QryProdutos.Close; QryClientes.Close; QryPedidos.Close; QryItens.Close;end;procedure TCPedidos.QryPedidosNewRecord(DataSet: TDataSet);begin QryPedidosDataCadastro.AsDateTime := Date; //inicia com a data atualend;procedure TCPedidos.AtivarControles(Ativar: Boolean);begin PanelDados.Enabled := Ativar; DBNavigatorPedidos.Enabled := (not Ativar); DBGridItens.ReadOnly := (not Ativar); SpdBtnIncluir.Enabled := (not Ativar); SpdBtnAlterar.Enabled := (not Ativar); SpdBtnExcluir.Enabled := (not Ativar); SpdBtnGravar.Enabled := Ativar; SpdBtnCancelar.Enabled := Ativar; SpdBtnProcurar.Enabled := (not Ativar);end;procedure TCPedidos.RecalculaPedido;var TmpQry:TZQuery; Total:Currency; // armazena valores do tipo moedabegin // cria um objeto Qry via codificação TmpQry := TZQuery.Create(Application); try // define DatabaseName e QryName via codificação TmpQry.Connection := QryItens.Connection; TmpQry.Name := QryItens.Name; TmpQry.SQL.Text := 'Select * from Itens'; TmpQry.Open; //Observe que, para um novo pedido, o CodigoPedido ainda não foi gerado.Self // Daí QryPedidosCodigoPedido.AsString sempre tera valor nulo e não terá ítens o pedido. TmpQry.FindField(QryPedidosCodigoPedido.AsString); Total := 0; // inicializa a variavel totalizadora while (not TmpQry.Eof) and (TmpQry.FieldByName('NumeroPedido').AsInteger = QryPedidosCodigoPedido.AsInteger) do begin // Acumula o Total da linha Total := Total + (TmpQry.FieldByName('PrecoUni').AsCurrency * TmpQry.FieldByName('Quantidade').AsFloat); TmpQry.Next; // próximo registro end; finally TmpQry.Close; // fecha a tabela TmpQry.Free; // libera objeto da memória end; StaticTextTotal.Caption := FormatCurr('###,###,##0.00', Total);end;procedure TCPedidos.QryItensCalcFields(DataSet: TDataSet);begin if (QryItensQuantidade.AsFloat > 0) and (QryItensPrecoUni.AsCurrency > 0) then QryItensTotal.AsCurrency := QryItensPrecoUni.AsCurrency * QryItensQuantidade.AsFloat; RecalculaPedido; // recalcula e exibe novamenteend;procedure TCPedidos.QryItensNewRecord(DataSet: TDataSet);begin QryItensQuantidade.AsFloat := 1; DBGridItens.SelectedIndex := 0; //códigoend;procedure TCPedidos.QryItensBeforeInsert(DataSet: TDataSet);beginif QryPedidosCodigoPedido.AsString = '' then begin if QryPedidos.State = dsInsert then begin // grava para salvar o número do pedido na tabela pai QryPedidos.Post; // ativa a alteração novamente QryPedidos.Edit; end; end;end;procedure TCPedidos.QryItensBeforePost(DataSet: TDataSet);begin if QryItensNumeroPedido.AsString = '' then QryItensNumeroPedido.AsInteger := QryPedidosCodigoPedido.AsInteger; if QryItensCodigoProduto.AsString = '' then begin DBGridItens.SelectedIndex := 0; // seleciona a coluna código ShowMessage('Código do produto deve ser informado!'); Abort; // interrompe a gravação end; if QryItensQuantidade.AsFloat <= 0 then begin DBGridItens.SelectedIndex := 2; // seleciona coluna quantidade ShowMessage('Código do produto deve ser informado!'); Abort; // interrompe a gravação end;end;procedure TCPedidos.DBGridItensKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);begin// muda para a próxima coluna se pressionar Enterif Key = VK_RETURN then // pressionou ENTERbegin case DBGridItens.SelectedIndex of 0: DBGridItens.SelectedIndex := 2; //quantidade 1: DBGridItens.SelectedIndex := 2; //quantidade 2: DBGridItens.SelectedIndex := 3; //Preco else DBGridItens.SelectedIndex := 0; //código QryItens.Next; if QryItens.Eof then QryItens.Append; end; end;end;procedure TCPedidos.QryItensCodigoProdutoValidate(Sender: TField);begin if QryItensCodigoProduto.AsString <> '' then begin if QryProdutos.Locate('CodigoProduto', QryItensCodigoProduto.AsInteger, []) then QryItensPrecoUni.AsCurrency := QryProdutosPrecoUni.AsCurrency else begin ShowMessage('Código inválido'); Abort; end; end;end;procedure TCPedidos.QryPedidosDataCadastroSetText(Sender: TField; const Text: String);beginif Text = ' / / ' then Sender.Clear // apaga o campo data else // atribui a data digitada ao campo try Sender.AsString := Text; except ShowMessage('Data inválida!'); end;end;procedure TCPedidos.SpdBtnIncluirClick(Sender: TObject);begin AtivarControles(True); // ativa os controles para digitação QryPedidos.Append; // inclui um novo registro na tabela DBLookupComboBoxNomeCliente.SetFocus;end;procedure TCPedidos.SpdBtnAlterarClick(Sender: TObject);begin if QryPedidos.IsEmpty then begin // a tabela está vazia, então devemos incluir SpdBtnIncluir.Click; // executa o click no botão Exit; // retorna end; AtivarControles(True); // ativa os controles para digitação QryPedidos.Edit; // permite alterar os dados DBLookupComboBoxNomeCliente.SetFocus;end;procedure TCPedidos.SpdBtnExcluirClick(Sender: TObject);beginif Application.MessageBox('Deseja excluir este pedido?','Confirme', MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2) = IDNO then Exit; // retorna (sem fazer nada) // devemos excluir os itens primeiro, para não termos registros órfãos try QryItens.First; // posiciona no primeiro item while not QryItens.Eof do // executa até o fim do arquivo begin QryItens.Delete; // exclui o item QryItens.First; end; QryPedidos.Delete; // exclui o pedido except ShowMessage('Ocorreu um erro durante a exclusão do pedido'); end;end;procedure TCPedidos.SpdBtnGravarClick(Sender: TObject);begin if QryPedidosCodigoPedido.AsInteger <= 0 then begin ShowMessage('Digite o número do pedido!'); // DBEditCodigoPedido.Enabled := true; DBEditCodigoPedido.SetFocus; end; if DBRadioGroupCondicaoPagamento.Value = '' then begin ShowMessage('Escolha a Condição do Pagamento'); DBRadioGroupCondicaoPagamento.SetFocus; // posiciona o cursor Abort; // não grava e continua editando end; if QryPedidosCodigoCliente.AsInteger > 0 then begin // procura pelo cliente usando o código if not QryClientes.Locate('CodigoCliente', QryPedidosCodigoCliente.AsInteger, []) then begin ShowMessage('Código de cliente inválido!'); DBLookupComboBoxNomeCliente.SetFocus; Exit; end; if QryPedidosCodigoCliente.AsString = '' then begin ShowMessage('Digite o Código do Cliente!'); DBEditCodigoCliente.SetFocus; Exit; end; end; if DBLookupComboBoxNomeCliente.Text = '' then begin ShowMessage('Por Favor! Escolha o Cliente!'); DBLookupComboBoxNomeCliente.SetFocus; Exit; end; if DBEditLocalFatura.Text = '' then begin ShowMessage('Por Favor! Qual o local da Fatura!'); DBEditLocalFatura.SetFocus; Exit; end; if DBEditLocalCobranca.Text = '' then begin ShowMessage('Por Favor! Qual o local de Cobrança!'); DBEditLocalCobranca.SetFocus; Exit; end; if DBEditLocalEntrega.Text = '' then begin ShowMessage('Por Favor! Qual o local de Entrega!'); DBEditLocalEntrega.SetFocus; Exit; end; if DBEditCPF_CNPJ.Text = '' then begin ShowMessage('Por Favor! Preencha o Documento!'); DBEditCPF_CNPJ.SetFocus; Exit; end; if DBEditCEP.Text = '' then begin ShowMessage('Por Favor! Preencha o CEP!'); DBEditCEP.SetFocus; Exit; end; QryPedidos.Post; if QryItens.State in [dsInsert,dsEdit] then QryItens.Post; AtivarControles(False); // desativa os controlesend;procedure TCPedidos.SpdBtnCancelarClick(Sender: TObject);begin QryPedidos.Cancel; // cancela inclusão/alteração AtivarControles(False); // desativa os controlesend;procedure TCPedidos.SpdBtnProcurarClick(Sender: TObject);begin Application.CreateForm(TPPedido, PPedido); PPedido.Show;end;procedure TCPedidos.DBLookupComboBoxNomeClienteClick(Sender: TObject);begin QryClientes2.Close; QryClientes2.sql.Clear; QryClientes2.SQL.Add('Select * from Clientes where Nome = '+''''+DBLookupComboBoxNomeCliente.Text+''''+''); QryClientes2.Open; QryClientes2.first; while not QryClientes2.EOF do begin if QryClientes2Tipo.Value = 'F' then begin QryPedidosCPF_CNPJ.EditMask:='999\.999\.999\-99;0;_'; end else begin QryPedidosCPF_CNPJ.EditMask:='99\.999\.999\/9999\-99;0;_'; end; DBEditCPF_CNPJ.Text := QryClientes2.Fields[3].Value; DBEditCodigoCliente.Text := QryClientes2.Fields[0].Value; DBEditLocalCobranca.Text := QryClientes2.Fields[5].Value +', '+ QryClientes2.Fields[6].Value +' - ' + QryClientes2.Fields[7].Value +'/' +QryClientes2.Fields[8].Value; QryClientes2.Next; end;end;procedure TCPedidos.SpeedButtonImprimirClick(Sender: TObject);begin QryPedidos.Filter := 'CodigoPedido = ' + DBEditCodigoPedido.Text; QryPedidos.Filtered := true; QryItens.Filter := 'CodigoPedido = ' + QryPedidosCodigoPedido.AsString; QryItens.Filtered := true; Application.CreateForm(TRPedidos, RPedidos); RPedidos.QuickRepPedidos.PreviewModal; RPedidos.Free;end;procedure TCPedidos.QryPedidosCPF_CNPJGetText(Sender: TField; var Text: String; DisplayText: Boolean);begin if Sender.IsNull then Text := ''else if length(Sender.AsString)=11 then Text := FormatMaskText('999\.999\.999\-99;0;_', Sender.AsString) else if length(Sender.AsString)=14 then Text := FormatMaskText('99\.999\.999\/9999\-99;0;_', Sender.AsString);end;end. Compartilhar este post Link para o post Compartilhar em outros sites
Hugo Slepicka 0 Denunciar post Postado Abril 13, 2007 Da um Debug e veja se está sendo atribuido algum valor a ela em algum momento, ai você encontrará o ponto onde está o erro!!! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites