Carcleo 4 Denunciar post Postado Fevereiro 2, 2007 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; Compartilhar este post Link para o post Compartilhar em outros sites
Hugo Slepicka 0 Denunciar post Postado Fevereiro 3, 2007 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... Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Fevereiro 3, 2007 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. Compartilhar este post Link para o post Compartilhar em outros sites
Hugo Slepicka 0 Denunciar post Postado Fevereiro 4, 2007 é o seguinte... lige os DBEdits referentes ao cliente na query!!! ai eles irão mostrar os dados do cliente corrente... 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 Fevereiro 4, 2007 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! Compartilhar este post Link para o post Compartilhar em outros sites
Hugo Slepicka 0 Denunciar post Postado Fevereiro 4, 2007 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... Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Fevereiro 4, 2007 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. Compartilhar este post Link para o post Compartilhar em outros sites
Hugo Slepicka 0 Denunciar post Postado Fevereiro 4, 2007 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!!!! Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Fevereiro 4, 2007 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. Compartilhar este post Link para o post Compartilhar em outros sites
Hugo Slepicka 0 Denunciar post Postado Fevereiro 4, 2007 é só ponteirar na tabela de clientes... e passar os valores para a tabela de cotações.... 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 Fevereiro 4, 2007 Ponteirar. O que é isso?Como faz isso? Compartilhar este post Link para o post Compartilhar em outros sites
Hugo Slepicka 0 Denunciar post Postado Fevereiro 4, 2007 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 Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Fevereiro 4, 2007 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; Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Fevereiro 4, 2007 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 Compartilhar este post Link para o post Compartilhar em outros sites
Hugo Slepicka 0 Denunciar post Postado Fevereiro 5, 2007 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:=''; endEsse 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 Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Fevereiro 5, 2007 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 Compartilhar este post Link para o post Compartilhar em outros sites
Hugo Slepicka 0 Denunciar post Postado Fevereiro 7, 2007 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 Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Fevereiro 8, 2007 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? Compartilhar este post Link para o post Compartilhar em outros sites
Hugo Slepicka 0 Denunciar post Postado Fevereiro 8, 2007 Bom carcleo... de uma estudada nesse material... www.simioobeso.org/hugo/forum/CaminhoDasPedras.zip garanto que se estudá-lo e se dedicar conseguirá resolver esses problemas... flw aew! 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 Fevereiro 9, 2007 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: Compartilhar este post Link para o post Compartilhar em outros sites