Jump to content

Archived

This topic is now archived and is closed to further replies.

Carcleo

função autocompletar

Recommended Posts

Ola Pessoal. Tudo ok?

 

É o seguinte, lendo um aqui post cheguei ao código abaixo.

A função autocompletar o nome esta funcionando beleza porem, eu queria agora fazer o seguinte.

A cada nome que eu escolher(digitar) na combobox, automaticamente ompletasse os outros campos da tabela referentes ao nome escolhido a combobox, tipo CPF, endereço, etc..

No caso do meu código, ele até completa porem qualquer que seje o nome escolhido no combobox, ele só completa os outros campos referentes ao primeiro nome da tabela.

Como resolver isso?

 

procedure TFormCotacoes.ComboBoxCliChange(Sender: TObject);begin   if (ZTableCotacoes.State in [dsInsert,dsEdit]) then //Verifica se a tabela esta em estado de edição ou inserção   begin   ZqryClientes.Close;   ZqryClientes.ParamByName('Nome').Value:=ZTableCotacoesNomeCli.Value;   ZqryClientes.Open;   ZqryClientes.Refresh;   ZqryClientes.First;	 //Verifica se encontrou	while not ZqryClientes.EOF do	begin	ComboBoxCli.Items.Add(VarToStr(ZqryClientesNome.Value));	ZqryClientes.Next;	end;	 if not ZqryClientes.IsEmpty then	   begin		 ZTableCotacoesCodigo_Cliente.Value:=ZqryClientesId.Value;		 ZTableCotacoesLocal_Cobranca.Value:=ZqryClientesEndereco.Value;		 ZTableCotacoesCPF.Value:=ZqryClientesCpf.Value;		 ZTableCotacoesCNPJ.Value:=ZqryClientesCNPJ.Value;  	   end	 else	   begin		 ZTableCotacoesCodigo_Cliente.AsString:='';		 ZTableCotacoesLocal_Cobranca.AsString:='';		 ZTableCotacoesCPF.AsString:='';		 ZTableCotacoesCNPJ.AsString:='';	   end   endend;

Share this post


Link to post
Share on other sites

Bom amigo, vejo que está realmente desesperado...peço que por favor, PARE DE CRIAR TÓPICOS REPETIDOS...mas lá vai!!!ZtableCotacoes.Locate('Codigo_Cliente',ZqryClientesId.Value,[]);esse comando irá localixar o ID do cliente na tabela de cotações, é isso que deseja???se não for desenhe o form e coloque uma imagem explicativa NESSE tópico...

Share this post


Link to post
Share on other sites

Na realidade é isso mesmo, porem fiz o procedimento abaixo conforme a tua orientação mas não fucionou, antes qualquer quew fosse o cliete digitado na combobox, ele completavas com os outros dadsos só do primeiro cliete cadastrado(CPF,CI,Teleone, etc....). Agora, simplemente parou até de completar com os dados do primeiro cliente cadastrado.

procedure TFormCotacoes.ComboBoxCliChange(Sender: TObject);begin   if (ZTableCotacoes.State in [dsInsert,dsEdit]) then //Verifica se a tabela esta em estado de edição ou inserção   begin   ZqryClientes.Close;   ZqryClientes.ParamByName('Nome').Value:=ZTableCotacoesNomeCli.Value;   ZqryClientes.Open;   ZqryClientes.Refresh;   ZqryClientes.First;	 //Verifica se encontrou	while not ZqryClientes.EOF do	begin	ComboBoxCli.Items.Add(VarToStr(ZqryClientesNome.Value));	ZqryClientes.Next;	end;	 if not ZqryClientes.IsEmpty then	   begin		 ZtableCotacoes.Locate('Codigo_Cliente',ZqryClientesId.Value,[]);{		 ZTableCotacoesCodigo_Cliente.Value:=ZqryClientesId.Value;		 ZTableCotacoesLocal_Cobranca.Value:=ZqryClientesEndereco.Value;		 ZTableCotacoesCPF.Value:=ZqryClientesCpf.Value;		 ZTableCotacoesCNPJ.Value:=ZqryClientesCNPJ.Value; }	   end	 else	   begin		 ZTableCotacoesCodigo_Cliente.AsString:='';		 ZTableCotacoesLocal_Cobranca.AsString:='';		 ZTableCotacoesCPF.AsString:='';		 ZTableCotacoesCNPJ.AsString:='';	   end   endend;
O que eu quero é o seguinte:

Esse código aqui

procedure TFormCotacoes.ComboBoxCliChange(Sender: TObject);begin   if (ZTableCotacoes.State in [dsInsert,dsEdit]) then //Verifica se a tabela esta em estado de edição ou inserção   begin   ZqryClientes.Close;   ZqryClientes.ParamByName('Nome').Value:=ZTableCotacoesNomeCli.Value;   ZqryClientes.Open;   ZqryClientes.Refresh;   ZqryClientes.First;	 //Verifica se encontrou	while not ZqryClientes.EOF do	begin	ComboBoxCli.Items.Add(VarToStr(ZqryClientesNome.Value));	ZqryClientes.Next;	end;   endend;
faz com que a comboboxCli retorne os nomes dos clientes da tabela de clientes.

À medida que vou digitando cada letra(tipo C, Ca, Car, Carl, Carlo, Carlos) dos nomes dos clientes, a combobox completa o resto dos nome do cliente.

Até aí tudo bem!

Agora eu preciso fazer o seguinte:

A medida que eu troco o cliente na combobox de Carlos para Antonio, os campos CPF, CI, Telefone, etc... mudem tambem.

Share this post


Link to post
Share on other sites

Hugo, como é que eu faço isso?Hugo, sou iniciante aida em Delphi, e tem coisa que ainda não cosigo fazer por mais boa votade de aprender.Me da um exemplo por favor!

Share this post


Link to post
Share on other sites

VAmos lá!!!

 

Primeiramente Bom dia..

 

 

é o seguinte Carcleo... você quer que ao selecinar um cliente em uma Combobox, o programa automaticamente preencha os campos referentes aos dados do cliente se o mesmo já existir, correto???

 

 

Bom... vamos ver algumas propriedades do componente DBEdit...

 

DataSource - Refere-se a qual DataSource o DBEdit vai pegar os dados...

 

DataField - Refere-se a qual campo do DataSource especificado ele vai pegar os dados...

 

 

Sabendo isso, temos o seguinte...

 

Você possui uma Query que preenche a combobox e que traz os dados dos clientes, certo?

 

Bom, ela deve possuir um DataSource...

 

Nos campos onde você quer que sejam preenchidos os dados dos clientes coloque a propriedade DataSource do Objeto apontado para o DataSource de sua Query e o DataField para o campo que você quer que ele traga os dados para serem exibidos...

 

Sendo assim, quando selecionar um cliente, a query estará parada em um registro, e os DBEdits irão exibir os dados correntes... desse cliente...

Share this post


Link to post
Share on other sites

Fiz isso e não deu certo.

 

Veja meu código completo;

unit cotacoes;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, DB, ZAbstractRODataset, ZAbstractDataset, ZAbstractTable,  ZDataset, ExtCtrls, StdCtrls, jpeg, DBCtrls, Mask;type  TFormCotacoes = class(TForm)	Panel1: TPanel;	ZTableCotacoes: TZTable;	DataSource1: TDataSource;	ZTableClientes: TZTable;	DataSource2: TDataSource;	ZTableProdutos: TZTable;	ZqryClientes: TZQuery;	ZTableProdutosCodigo: TIntegerField;	ZTableProdutosNome: TMemoField;	ZTableProdutosDescricao: TMemoField;	ZTableProdutosPreco: TIntegerField;	ZTableCotacoesId: TIntegerField;	ZTableCotacoesCondicao_Pgto: TStringField;	ZTableCotacoesCodigo_Cliente: TIntegerField;	ZTableCotacoesLocal_Fatura: TStringField;	ZTableCotacoesLocal_Cobranca: TStringField;	ZTableCotacoesLocal_Entrega: TStringField;	ZTableCotacoesCPF: TIntegerField;	ZTableCotacoesCNPJ: TIntegerField;	ZTableCotacoesCEP: TStringField;	ZTableCotacoesItem: TIntegerField;	ZTableCotacoesUnidade: TIntegerField;	ZTableCotacoesQuantidade: TIntegerField;	ZTableCotacoesCodigo_Produto: TIntegerField;	ZTableCotacoesDescricao: TStringField;	ZTableCotacoesPreco_Uni: TIntegerField;	ZTableCotacoesPreco_Tot: TIntegerField;	ZTableCotacoesValor_Tot: TIntegerField;	ZTableCotacoesNomeCli: TStringField;	Label1: TLabel;	DBEdit1: TDBEdit;	Label2: TLabel;	DBEdit2: TDBEdit;	Label3: TLabel;	DBEdit3: TDBEdit;	Label5: TLabel;	DBEdit4: TDBEdit;	Label6: TLabel;	DBEdit5: TDBEdit;	Label7: TLabel;	DBEdit6: TDBEdit;	Label8: TLabel;	DBEdit7: TDBEdit;	Label9: TLabel;	DBEdit8: TDBEdit;	Label10: TLabel;	DBEdit9: TDBEdit;	Label11: TLabel;	DBEdit10: TDBEdit;	Label12: TLabel;	DBEdit11: TDBEdit;	Label13: TLabel;	DBEdit12: TDBEdit;	Label14: TLabel;	DBEdit13: TDBEdit;	DBEdit14: TDBEdit;	Label16: TLabel;	DBEdit15: TDBEdit;	Label17: TLabel;	DBEdit16: TDBEdit;	Label18: TLabel;	DBEdit17: TDBEdit;	Label15: TLabel;	DBEdit18: TDBEdit;	Label19: TLabel;	DBEdit19: TDBEdit;	Label20: TLabel;	DBEdit20: TDBEdit;	Label21: TLabel;	DBEdit21: TDBEdit;	ZqryClientesId: TIntegerField;	ZqryClientesNome: TStringField;	ZqryClientesEndereco: TStringField;	ZqryClientesEmail: TStringField;	ZqryClientesTelefone: TIntegerField;	ZqryClientesCpf: TIntegerField;	ZqryClientesCnpj: TIntegerField;	ZTableClientesId: TIntegerField;	ZTableClientesNome: TStringField;	ZTableClientesEndereco: TStringField;	ZTableClientesEmail: TStringField;	ZTableClientesTelefone: TIntegerField;	ZTableClientesCpf: TIntegerField;	ZTableClientesCnpj: TIntegerField;	ComboBoxCli: TComboBox;	Label4: TLabel;	ZqryCotacoes: TZQuery;	ZqryCotacoesId: TIntegerField;	ZqryCotacoesCondicao_Pgto: TStringField;	ZqryCotacoesCodigo_Cliente: TIntegerField;	ZqryCotacoesNomeCli: TStringField;	ZqryCotacoesLocal_Fatura: TStringField;	ZqryCotacoesLocal_Cobranca: TStringField;	ZqryCotacoesLocal_Entrega: TStringField;	ZqryCotacoesCPF: TIntegerField;	ZqryCotacoesCNPJ: TIntegerField;	ZqryCotacoesCEP: TStringField;	ZqryCotacoesItem: TIntegerField;	ZqryCotacoesUnidade: TIntegerField;	ZqryCotacoesQuantidade: TIntegerField;	ZqryCotacoesCodigo_Produto: TIntegerField;	ZqryCotacoesDescricao: TStringField;	ZqryCotacoesPreco_Uni: TIntegerField;	ZqryCotacoesPreco_Tot: TIntegerField;	ZqryCotacoesValor_Tot: TIntegerField;	DataSourceClientes: TDataSource;	DBEdit22: TDBEdit;	DataSourceCotacoes: TDataSource;	procedure FormClose(Sender: TObject; var Action: TCloseAction);	procedure FormCreate(Sender: TObject);	procedure ComboBoxCliChange(Sender: TObject);  private	{ Private declarations }  public	{ Public declarations }  end;var  FormCotacoes: TFormCotacoes;implementation{$R *.dfm}procedure TFormCotacoes.FormClose(Sender: TObject;  var Action: TCloseAction);beginAction := caFree; // remove o form da memóriaFormCotacoes := NIL; // informa que foi destruído (não criado)end;procedure TFormCotacoes.FormCreate(Sender: TObject);beginZTableCotacoes.Append;end;procedure TFormCotacoes.ComboBoxCliChange(Sender: TObject);begin   if (ZTableCotacoes.State in [dsInsert,dsEdit]) then //Verifica se a tabela esta em estado de edição ou inserção   begin   ZqryClientes.Close;   ZqryClientes.ParamByName('Nome').Value:=ZTableCotacoesNomeCli.Value;   ZqryClientes.Open;   ZqryClientes.First;	 //Verifica se encontrou	while not ZqryClientes.EOF do	begin	ComboBoxCli.Items.Add(VarToStr(ZqryClientesNome.Value));	ZqryClientes.Next;	end;	  ZqryCotacoes.Close;   ZqryCotacoes.ParamByName('Nome').Value:=ZTableClientesNome.Value;   ZqryCotacoes.Open;   ZqryCotacoes.First;	 //Verifica se encontrou	while not ZqryCotacoes.EOF do	begin	ComboBoxCli.Items.Add(VarToStr(ZqryCotacoesNomeCli.Value));	ZqryCotacoes.Next;	end;	 if not ZqryClientes.IsEmpty then	   begin		 ZTableCotacoesCodigo_Cliente.Value:=ZqryClientesId.Value;		 ZTableCotacoesLocal_Cobranca.Value:=ZqryClientesEndereco.Value;		 ZTableCotacoesCPF.Value:=ZqryClientesCpf.Value;		 ZTableCotacoesCNPJ.Value:=ZqryClientesCNPJ.Value;	   end	 else	   begin		 ZTableCotacoesCodigo_Cliente.AsString:='';		 ZTableCotacoesLocal_Cobranca.AsString:='';		 ZTableCotacoesCPF.AsString:='';		 ZTableCotacoesCNPJ.AsString:='';	   end   endend;end.

Share this post


Link to post
Share on other sites

Carcleo, não adianta você me postar um code se você não fala qual o problema...Por favor, quando postar seja mais especifico....Fale... não estou conseguindo tal coisa quando clico em um botão tla e executa tal ação!!!!

Share this post


Link to post
Share on other sites

Ok.

Vamos la Então.

Eu tenho o FormCotacoes(Pedidos).

Nele pus 2 componentes ZTables: ZTablesClientes e ZTablesCotacoes.

Puxei pro form os campos do ZTablesCotacoes.

O Primeiro campo do ZTablesCotacoes é ID (ID de cada pedido)

O Segundo campo do ZTablesCotacoes é NomeCli(Nome do Cli a ser pesquizado na tabela Clientes)

O Primeiro campo do ZTablesCotacoes é CPF(CPF do Cli a ser pesquizado na tabela Clientes)

...

 

Para o campo NomeCli do ZTablesCotacoes eu tirei o DBEditCli e puz uma comboboxCli no lugar.

Eu quero que ao começar a digitar um nome de cliente, seja feita uma pesquiza e que o nome do cliente seja autocompletado como por exemplo, digita Carl e autocompleta Carlos Rocha.

 

Daí, pus um componente ZQuery com name de ZqryClientes com SQL="Select * from clientes order by Nome" e um Parameter "Nome" e entrei o evento OnChange da ComboboxCli e pus o codigo abaixo;

procedure TFormCotacoes.ComboBoxCliChange(Sender: TObject);begin   if (ZTableCotacoes.State in [dsInsert,dsEdit]) then //Verifica se a tabela esta em estado de edição ou inserção   begin   ZqryClientes.Close;   ZqryClientes.ParamByName('Nome').Value:=ZTableCotacoesNomeCli.Value;   ZqryClientes.Open;   ZqryClientes.First;	 //Verifica se encontrou	while not ZqryClientes.EOF do	begin	ComboBoxCli.Items.Add(VarToStr(ZqryClientesNome.Value));	ZqryClientes.Next;	end;  end;
Daí ta autocompletando ok.

Quando eu abro a combobox, la estao os omes dos clientes.

Agora eu quero fazer o seguinte:

Ao trocar o nome do cliente na combobox, o DBEditCPF troque tb do CPF do 1º para o CPF do 2° escolhido. É isso que quero.

Share this post


Link to post
Share on other sites

Ponteirar é posicionar a tabela, query, o que seja...em um registro especifico...No caso...Table1.Locate('Cpf','123.123.123-00',[]);com isso a tabela vai parar (posicionar) no registro que tem o cpf 123.123.123-00

Share this post


Link to post
Share on other sites

Então ficaria assim?

procedure TFormCotacoes.ComboBoxCliChange(Sender: TObject);begin   if (ZTableCotacoes.State in [dsInsert,dsEdit]) then //Verifica se a tabela esta em estado de edição ou inserção   begin   ZqryClientes.Close;   ZqryClientes.ParamByName('Nome').Value:=ZTableCotacoesNomeCli.Value;   ZqryClientes.Open;	 //Verifica se encontrou	 ZqryClientes.First;	while not ZqryClientes.EOF do	begin	ComboBoxCli.Items.Add(VarToStr(ZqryClientesNome.Value));	ZqryClientes.Next;	 if not ZqryClientes.IsEmpty then	   begin		 ZTableCotacoesCodigo_Cliente.Value:=ZqryClientesId.Value;		 ZTableCotacoesLocal_Cobranca.Value:=ZqryClientesEndereco.Value;		 ZTableCotacoesCPF.Value:=ZqryClientesCpf.Value;		 ZTableCotacoesCodigo_Cliente.Value:=ZqryClientesId.Value;		 ZTableCotacoesCNPJ.Value:=ZqryClientesCNPJ.Value;	   end	 else	   begin		 ZTableCotacoesCodigo_Cliente.AsString:='';		 ZTableCotacoesLocal_Cobranca.AsString:='';		 ZTableCotacoesCPF.AsString:='';		 ZTableCotacoesCodigo_Cliente.AsString:='';		 ZTableCotacoesCNPJ.AsString:='';	   end	end;   endend;

Share this post


Link to post
Share on other sites

O que eu quero é popular a combobox com os clientes cadastrados na Tabela Clientes do Banco de Dados.A medida que escolho(troco) o cliente na combobox, os outros campos que tenho que preencher da tabela Cotacoes, sejam automaticamente preenchidos com os dados particulares de cada Cliente escolhido na combobox.Com respeito ao autocompletamento do combobox, é o seguinte:Preciso fazer uma consulta na tabela de clientes de forma tal que, se eu começar a digitar o nome de um cliente cadastrado, ele se auto-complete.Se tiver uma forma melhor de fazer isso, por favor me da uma dica.Obrigado por tudoum abraço.Carlos Rocha

Share this post


Link to post
Share on other sites

Amigo, infelizmente não possuo exemplo para lhe passar...

 

mas deixo aqui a minha dica...

if not ZqryClientes.IsEmpty then	   begin		 ZTableCotacoesCodigo_Cliente.Value:=ZqryClientesId.Value;		 ZTableCotacoesLocal_Cobranca.Value:=ZqryClientesEndereco.Value;		 ZTableCotacoesCPF.Value:=ZqryClientesCpf.Value;		 ZTableCotacoesCNPJ.Value:=ZqryClientesCNPJ.Value;  	   end	 else	   begin		 ZTableCotacoesCodigo_Cliente.AsString:='';		 ZTableCotacoesLocal_Cobranca.AsString:='';		 ZTableCotacoesCPF.AsString:='';		 ZTableCotacoesCNPJ.AsString:='';	   end
Esse código que você fez está funcionando de forma correta, só que o problema é que ele pega os dados do Primeiro registro, certo???

 

 

se for isso, por favor, PROCURE SABER a respeito dos seguintes comandos...

 

LOCATE

FILTER

FINDKEY

 

garanto que se der uma olhada com afinco nos mesmos irá solucionar o seu problema... http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Share this post


Link to post
Share on other sites

Hugo!Quero te agradecer pelo esforço em me ajudar mais o que estou querendo, parece-me ser dar um passo maior que minhas pernas.Sou novo em Delphi e só queria fazer um programinha de cotrole de pedidos que tivesse:1) Formulario de Cadastro de Clientes;2) Formulario de Cadastro de Fornecedores;3) Formulario de Cadastro de Produtos;4) Formulario de Cadastro de Pedidos;5) Formulario de Impressao dos Pedidos;Nos Formularios de Cadastro de Clientes e Fornecedores, eu gostaria de fazer aquele squema que ao começar digitar o nome do novo Cliente, autocomplete os dados do cliente ja cadastrado para servir de alerta pro Digitadornão correr o risco de cadastrar "Joao José" sendo que "João José" ja esta cadastrado.No Formulario de Cadastro de Pedidos, eu queria fazer igual aqueles programinhas de cadastro feito em DOS que a medida que voce digita o nome do produto e da enter, os outros campos, Preço, Descrição sao auto preenchidos.Usando Zeos Lib no Delphi 7 com MySql.Tentei muito mas num deu. Mesmo assim quero agradecer pelo boa vontade em ajudar.Caso você teha algum fonte que te ajudou nos teus estudos e possa me passar.......Eu agradeço.Valeu.Carlos RochaE-mail: carcleo@oi.com.brMSN: carcleo1999@hotmail.com

Share this post


Link to post
Share on other sites

Nos Formularios de Cadastro de Clientes e Fornecedores, eu gostaria de fazer aquele squema que ao começar digitar o nome do novo Cliente, autocomplete os dados do cliente ja cadastrado para servir de alerta pro Digitadornão correr o risco de cadastrar "Joao José" sendo que "João José" ja esta cadastrado.

R.: Bom, para fazer essa verificação, você pode procurar porcampso como o CPF/CNPJ por exemplo, não necessáriamente pelo nome...

 

No Formulario de Cadastro de Pedidos, eu queria fazer igual aqueles programinhas de cadastro feito em DOS que a medida que voce digita o nome do produto e da enter, os outros campos, Preço, Descrição sao auto preenchidos.

R.: Dê uma procurada aqui no fórum por campos lookup... garanto que essa pesquisa vai lhe retornar um resultado satisfatório para a conclusão de mais esse passo...

 

flw aew! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Share this post


Link to post
Share on other sites

Rapaz, depois de muito mexer acabei decobrindo outro erro que não estou conseguindo descobrir.Quando mando gravar um novo registro no "V" do DBNavigator, a operação nao é realizada, em da erro.Porem, se tiver algum registro na tabela para alterar, ele altera normalmente.E agora?

Share this post


Link to post
Share on other sites

Ola Hugo!

 

To testando um código que encotrei:

procedure TCPedidos.RecalculaPedido;var  TmpTable:TTable;	TmpTable := TTable.Create(Application);  Total:Currency; // armazena valores do tipo moedabegin	// cria um objeto Table via codificação	TmpTable := TTable.Create(Application);	try		// define DatabaseName e TableName via codificação		TmpTable.DatabaseName := TableItens.DatabaseName;		TmpTable.TableName := TableItens.TableName;		TmpTable.Open;		TmpTable.FindKey([TablePedidosCodigoPedido.AsInteger]);		Total := 0; // inicializa a variavel totalizadora		while (not TmpTable.Eof) and		   (TmpTable.FieldByName('NumeroPedido').AsInteger = TablePedidosNumeroPedido.AsInteger) do		 begin			 // Acumula o Total da linha			 Total := Total + (TmpTable.FieldByName('Preco').AsCurrency * TmpTable.FieldByName('Quantidade').AsFloat);			 TmpTable.Next; // próximo registro		 end;	 finally		 TmpTable.Close; // fecha a tabela		 TmpTable.Free; // libera objeto da memória	 end;	 StaticTextTotal.Caption := FormatCurr('###,###,##0.00', Total); end;
Mas ta danda os seguintes erros:

Build  [Error] CadPedidos.pas(160): ',' or ':' expected but ':=' found  [Error] CadPedidos.pas(160): ',' or ':' expected but '(' found  [Error] CadPedidos.pas(164): Record, object or class type required  [Error] CadPedidos.pas(164): Statement expected, but expression of type 'Enumeration' found  [Error] CadPedidos.pas(167): Record, object or class type required  [Error] CadPedidos.pas(167): Undeclared identifier: 'DatabaseName'  [Error] CadPedidos.pas(168): Record, object or class type required  [Error] CadPedidos.pas(169): Record, object or class type required  [Error] CadPedidos.pas(170): Record, object or class type required  [Error] CadPedidos.pas(172): Record, object or class type required  [Error] CadPedidos.pas(176): Record, object or class type required  [Error] CadPedidos.pas(176): Missing operator or semicolon  [Error] CadPedidos.pas(176): Record, object or class type required  [Error] CadPedidos.pas(176): Missing operator or semicolon  [Error] CadPedidos.pas(178): EXCEPT or FINALLY expected  [Error] CadPedidos.pas(179): 'END' expected but 'FINALLY' found  [Error] CadPedidos.pas(183): Declaration expected but identifier 'StaticTextTotal' found  [Error] CadPedidos.pas(184): '.' expected but ';' found  [Error] CadPedidos.pas(257): Undeclared identifier: 'FindKey'  [Error] CadPedidos.pas(338): Undeclared identifier: 'FindKey'  [Fatal Error] SaneRio.dpr(15): Could not compile used unit 'CadPedidos.pas'

Eis o codigo todo, onde sera que esta o erro:

unit CadPedidos;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, Buttons, DBCtrls, Grids, DBGrids, ExtCtrls, DB,  ZAbstractRODataset, ZAbstractDataset, ZAbstractTable, ZDataset, Mask;type  TCPedidos = class(TForm)	PanelDados: TPanel;	PanelBotoes: TPanel;	DBGridItens: TDBGrid;	DBNavigatorPedidos: TDBNavigator;	SpdBtnAlterar: TSpeedButton;	SpdBtnIncluir: TSpeedButton;	SpdBtnProcurar: TSpeedButton;	SpdBtnCancelar: TSpeedButton;	SpdBtnGravar: TSpeedButton;	SpdBtnExcluir: TSpeedButton;	BitBtnFechar: TBitBtn;	TablePedidos: TZTable;	TableItens: TZTable;	TableClientes: TZTable;	TableProdutos: TZTable;	DSPedidos: TDataSource;	DSItens: TDataSource;	TablePedidosCodigoPedido: TIntegerField;	TablePedidosCondicaoPgto: TStringField;	TablePedidosCodigoCliente: TIntegerField;	TablePedidosNomeCli: TStringField;	TablePedidosLocalFatura: TStringField;	TablePedidosLocalCobranca: TStringField;	TablePedidosLocalEntrega: TStringField;	TablePedidosCPF_CNPJ: TStringField;	TablePedidosCEP: TStringField;	TablePedidosDataCadastro: TDateField;	TableClientesCodigoCliente: TIntegerField;	TableClientesNome: TStringField;	TableClientesTipo: TStringField;	TableClientesEndereco: TStringField;	TableClientesEmail: TStringField;	TableClientesBairro: TStringField;	TableClientesCidade: TStringField;	TableClientesEstado: TStringField;	TableClientesTelefone: TStringField;	TableClientesCPF_CNPJ: TStringField;	TableClientesDataCadastro: TDateField;	TablePedidosNomeCliente: TStringField;	TableProdutosCodigoProduto: TIntegerField;	TableProdutosDescricao: TStringField;	TableProdutosPrecoUni: TIntegerField;	TableItensItem: TIntegerField;	TableItensCodigoProduto: TIntegerField;	TableItensQuantidade: TIntegerField;	TableItensPrecoUni: TIntegerField;	TableItensDescricao: TStringField;	TableItensTotal: TCurrencyField;	TableItensNumeroPedido: TIntegerField;	LabelCodigoPedido: TLabel;	DBEditCodigoPedido: TDBEdit;	LabelCondicaoPagamento: TLabel;	DBEditCondicaoPagamento: TDBEdit;	LabelCodigoCliente: TLabel;	DBEditCodigoCliente: TDBEdit;	LabelNomeCliente: TLabel;	DBLookupComboBoxNomeCliente: TDBLookupComboBox;	LabelLocalFatura: TLabel;	DBEditLocalFatura: TDBEdit;	LabelLocalCobranca: TLabel;	DBEditLocalCobranca: TDBEdit;	LabelLocalEntrega: TLabel;	DBEditLocalEntrega: TDBEdit;	LabelCPF_CNPJ: TLabel;	DBEditCPF_CNPJ: TDBEdit;	LabelCEP: TLabel;	DBEditCEP: TDBEdit;	LabelDataCadastro: TLabel;	DBEditDataCadastro: TDBEdit;	LabelTotalPedido: TLabel;	StaticTextTotal: TStaticText;	procedure FormClose(Sender: TObject; var Action: TCloseAction);	procedure FormCreate(Sender: TObject);	procedure FormDestroy(Sender: TObject);	procedure TablePedidosNewRecord(DataSet: TDataSet);	procedure TableItensCalcFields(DataSet: TDataSet);	procedure TableItensNewRecord(DataSet: TDataSet);	procedure TableItensBeforeInsert(DataSet: TDataSet);	procedure TableItensBeforePost(DataSet: TDataSet);	procedure DBGridItensKeyDown(Sender: TObject; var Key: Word;	  Shift: TShiftState);	procedure TableItensCodigoProdutoValidate(Sender: TField);	procedure TablePedidosDataCadastroSetText(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);  private	procedure AtivarControles(Ativar: Boolean);	procedure RecalculaPedido;	{ Private declarations }  public	{ Public declarations }  end;var  CPedidos: TCPedidos;implementation{$R *.dfm}procedure TCPedidos.FormClose(Sender: TObject; var Action: TCloseAction);beginAction := caFree; // remove o form da memóriaCPedidos := NIL; // informa que foi destruído (não criadoend;procedure TCPedidos.FormCreate(Sender: TObject);beginTableProdutos.Open;TableClientes.Open;TablePedidos.Open;TableItens.Open;end;procedure TCPedidos.FormDestroy(Sender: TObject);beginTableProdutos.Close;TableClientes.Close;TablePedidos.Close;TableItens.Close;end;procedure TCPedidos.TablePedidosNewRecord(DataSet: TDataSet);beginTablePedidosDataCadastro.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  TmpTable:TTable;	TmpTable := TTable.Create(Application);  Total:Currency; // armazena valores do tipo moedabegin	// cria um objeto Table via codificação	TmpTable := TTable.Create(Application);	try		// define DatabaseName e TableName via codificação		TmpTable.DatabaseName := TableItens.DatabaseName;		TmpTable.TableName := TableItens.TableName;		TmpTable.Open;		TmpTable.FindKey([TablePedidosCodigoPedido.AsInteger]);		Total := 0; // inicializa a variavel totalizadora		while (not TmpTable.Eof) and		   (TmpTable.FieldByName('NumeroPedido').AsInteger = TablePedidosNumeroPedido.AsInteger) do		 begin			 // Acumula o Total da linha			 Total := Total + (TmpTable.FieldByName('Preco').AsCurrency * TmpTable.FieldByName('Quantidade').AsFloat);			 TmpTable.Next; // próximo registro		 end;	 finally		 TmpTable.Close; // fecha a tabela		 TmpTable.Free; // libera objeto da memória	 end;	 StaticTextTotal.Caption := FormatCurr('###,###,##0.00', Total); end;procedure TCPedidos.TableItensCalcFields(DataSet: TDataSet);beginif (TableItensQuantidade.AsFloat > 0) and		(TableItensPrecoUni.AsCurrency > 0) then		TableItensTotal.AsCurrency := TableItensPrecoUni.AsCurrency * TableItensQuantidade.AsFloat;		RecalculaPedido; // recalcula e exibe novamenteend;procedure TCPedidos.TableItensNewRecord(DataSet: TDataSet);beginTableItensQuantidade.AsFloat := 1;DBGridItens.SelectedIndex := 0; //códigoend;procedure TCPedidos.TableItensBeforeInsert(DataSet: TDataSet);beginif TablePedidosCodigoPedido.AsString = '' then	begin		if TablePedidos.State = dsInsert then		begin			// grava para salvar o número do pedido na tabela pai			TablePedidos.Post;			// ativa a alteração novamente			TablePedidos.Edit;		end;	end;end;procedure TCPedidos.TableItensBeforePost(DataSet: TDataSet);begin if TableItensNumeroPedido.AsString = '' then		TableItensNumeroPedido.AsInteger := TablePedidosCodigoPedido.AsInteger;	if TableItensCodigoProduto.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 TableItensQuantidade.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		TableItens.Next;		if TableItens.Eof then			TableItens.Append;	end;end;end;procedure TCPedidos.TableItensCodigoProdutoValidate(Sender: TField);beginif TableItensCodigoProduto.AsString <> '' thenbegin	if TableProdutos.FindKey([TableItensCodigoProduto.AsInteger]) then	TableItensPrecoUni.AsCurrency := TableProdutos.FieldByName('PrecoUni').AsCurrency	else	begin		ShowMessage('Código inválido');		Abort;	end;end;end;procedure TCPedidos.TablePedidosDataCadastroSetText(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	TablePedidos.Append; // inclui um novo registro na tabela	DBEditDataCadastro.SetFocus;end;procedure TCPedidos.SpdBtnAlterarClick(Sender: TObject);begin  if TablePedidos.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	TablePedidos.Edit; // permite alterar os dados	DBEditDataCadastro.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		TableItens.First; // posiciona no primeiro item		while not TableItens.Eof do // executa até o fim do arquivo		begin			TableItens.Delete; // exclui o item			TableItens.First;		end;		TablePedidos.Delete; // exclui o pedido	except		ShowMessage('Ocorreu um erro durante a exclusão do pedido');	end;end;procedure TCPedidos.SpdBtnGravarClick(Sender: TObject);beginif TablePedidosCodigoPedido.AsInteger <= 0 then	begin		ShowMessage('Digite o número do pedido!');		DBEditCodigoPedido.SetFocus;		Exit;	end;	if TablePedidosDataCadastro.IsNull then	begin		ShowMessage('Digite a data do pedido!');		DBEditDataCadastro.SetFocus;		Exit;	end;	if TablePedidosNomeCliente.AsInteger > 0 then	begin		// procura pelo cliente usando o código		if not TableClientes.FindKey([TablePedidosNomeCli.AsInteger]) then		begin			ShowMessage('Código de cliente inválido!');			DBEditCodigoCliente.SetFocus;			Exit;		end;	end	else	begin		ShowMessage('Digite o código do cliente!');		DBEditCodigoCliente.SetFocus;		Exit;	end;	TablePedidos.Post;	if TableItens.State in [dsInsert,dsEdit] then		TableItens.Post;	AtivarControles(False); // desativa os controlesend;procedure TCPedidos.SpdBtnCancelarClick(Sender: TObject);begin TablePedidos.Cancel; // cancela inclusão/alteração	AtivarControles(False); // desativa os controlesend;end.

 

onde sera que esta o erro:

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.