Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Carcleo

Como pode ser resolvido isso?

Recommended Posts

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.