
Carlos Rocha
Membros-
Total de itens
1.302 -
Registro em
-
Última visita
Tudo que Carlos Rocha postou
-
Surgiu uma situação nova com a checklistbox. Quando eu vou cadastrar um novo pedido, e cliko na opção A Prazo do DBRadioGroupOpcaoPgto, neste momento fica .visible := true a checklistbox, aí SURPREZA:=// La estão marcadas na checklistbox as opçoes do pedido que estava sendo exibido anteriormente. Neste caso, precisarei em algum momento apagar a seleção que esta para que o proximo pedido possa fazer a sua opção de pagamento a prazo. Mas como? Valeu pessoal, essa eu consegui sozinho Var I : Integer; begin for I:= 0 to CLBpgto.Count - 1 do begin CLBpgto.State[I] := cbUnchecked; end; Outra Situação: Preciso verificar se, caso o cara clique DBRadioFGroupOpcaoPgto na opção 'A Prazo' e não marque nenhuma opção de mês na Checklistbox, da uma mensagem dizendo que ele optou por venda a prazo mas esqueceu de preecher as opções de meses na checklistbox. Como fazer isso? Obrigado de novo, matei mais essa com o código abaixo if (DBRadioGroupCondicaoPagamento.ItemIndex = 1) then begin for Idx := 0 to CLBpgto.Items.Count -1 do begin if not CLBpgto.Checked[idx] then begin ShowMessage('Voce escolheu pagamento a prazo, favor preencher os meses'); CLBpgto.SetFocus; // posiciona o cursor Abort; // não grava e continua editando end; end; end; Agora preciso fazer o seguinte: O pedido esta exibido. Vou imprimir no QuikReport. Chegando no QuickReport estou faszendo o seguite mas num está dando certo: procedure TRPedidos.QRDBText5Print(sender: TObject; var Value: String); begin If QryPedidosCondicaoPgto.AsString = 'A Prazo' then begin CLBpgto.Visible := true; CPedidos.InicializaListaPgto; end else begin CLBpgto.Visible := false; end; end; O que devo fazer?
-
Sera que existe DBCheckListBox? Dessa vez eu tentei fazer QryPedidosListaPgto.Value := CLBpgto.Checked[indice]); QryPedidos.Post; Mas só da erro: Undeclared Identifier: 'indice'; Como faço agora?
-
Tenho um DBRadioGroup para escolher Se vai ser a vista ou a prazo o PGTO Caso seja a Prazo, aparece um ChecklistBox pra mandar as opções pro banco 15 dias 30 dias 45 dias 60 dias 90 dias Eu estou mandando os dados pro banco assim: QryPedidosListaPgto.Value := CLBpgto.Items.Text; QryPedidos.Post; Isso porque o CheckListBox não tem acesso nativo a dados. E no banco esta gravando com uma string : 15 dias (Espaço que são 2 quadradinhos) 30 dias...As opções selecioadas no CheckListBox. Porem, agora preciso, na hora de listar os dados do pedido cadastrado, que a CheckListBox va o banco, pegue os valores e marque as opções selecionadas pelo cliente. Como fazer isso? alguém me ajuda aí! '
-
Ola, tenho um formulario de Pedidos e uso um ClientDataSet como Query Temporaria. Tenho um EDitPrecoUni onde, depois de uma consulta que faço ao banco pelo código de um produto, ele me retorna o valor do produto. Porem, esse edit não esta liberado para digitação e eu preciso as vezes trocar(dar desconto) o preço do produto. Nesse caso, como liberar o Edit para Digitação. Motivo da edição: Retirado questionamento sobre CheckListBox por já estar sendo discutido em outro tópico (tópico)
-
Essa já resolvi. Obrigado a todos. Solução: Pegue no pacoter do Zeos, nas pasta lib as dlss que tem la, sãso 3 libmysql40.dll, libmysql320.dll e libmysql323.dll, joga elas na pasta c: Windows do PC do cliente e ok. Um abraço a todos.
-
O que eu fiz: 1) Levei o exe, o instalador do mesmo MySql que uso na minha maquina e o script das tabalas que instalarei no MySql la na casa do cliente. 2) Chegando lá, copiei pra maquina do cliente o Divan.exe; 3) Instalei o MySql e peguei a libmysql e copiei para as pastas C:\Windows, C:\Windows\System32. 4) Ao clikar no executavel Divan.exe deu esse erro ao escolher sim ou não numa tela de Boas Vindas que tem no Sim, um Close e uma procidure mandando criar um FormPrincipal e no não, uma Application.terminate. O que faço agora se na minha maquina funciona mas na do cliente da esse erro? Um abraço.
-
Desenvolvi um sistema de cadastro de pedidos em delfhi 7 zeus 6.6.0 e msql 5 alfa. Levei para a maquina do cliente ( claro depois de instalar o banco msql com suas tabelas) e o programa está dando erro de inicialização. O Divan.exe encontrou um problema e precisa ser fechado. Na minha máquina funciona perfeito mas na máquina do cliente está dando este erro. O que poderia ser?
-
Ola, estou tendo um probleminha com o datamodule. Tenho o código abaixo o form do datamodule: procedure TDMDivan.DSPedidosStateChange(Sender: TObject); begin CPedidos.SpdBtnAlterar.Enabled := (QryPedidos.State in [dsBrowse]) and (not QryPedidos.IsEmpty); CPedidos.SpdBtnIncluir.Enabled := QryPedidos.State in [dsBrowse]; CPedidos.SpdBtnProcurar.Enabled := (QryPedidos.State in [dsBrowse]) and (not QryPedidos.IsEmpty); CPedidos.SpdBtnCancelar.Enabled := QryPedidos.State in [dsInsert, dsEdit]; CPedidos.SpdBtnGravar.Enabled := QryPedidos.State in [dsInsert, dsEdit]; CPedidos.SpdBtnExcluir.Enabled := (QryPedidos.State in [dsBrowse]) and (not QryPedidos.IsEmpty); CPedidos.SpdBtnImprimir.Enabled := (QryPedidos.State in [dsBrowse]) and (not QryPedidos.IsEmpty); CPedidos.BitBtnFechar.Enabled := QryPedidos.State in [dsBrowse]; CPedidos.DBNavigatorPedidos.Enabled := (QryPedidos.State in [dsBrowse]) and (not QryPedidos.IsEmpty); CPedidos.pnItem.Enabled := QryPedidos.State in [dsInsert, dsEdit]; CPedidos.PanelDados.Enabled := QryPedidos.State in [dsInsert, dsEdit]; end; Preciso criar o form CPedidos antes da primeira linha mas o comando Application.CreateForm(TRPedidos, RPedidos);, não passa o form do datamodule. procedure TDMDivan.DSPedidosStateChange(Sender: TObject); begin Application.CreateForm(TRPedidos, RPedidos); CPedidos.SpdBtnAlterar.Enabled := (QryPedidos.State in [dsBrowse]) and (not QryPedidos.IsEmpty); CPedidos.SpdBtnIncluir.Enabled := QryPedidos.State in [dsBrowse]; CPedidos.SpdBtnProcurar.Enabled := (QryPedidos.State in [dsBrowse]) and (not QryPedidos.IsEmpty); CPedidos.SpdBtnCancelar.Enabled := QryPedidos.State in [dsInsert, dsEdit]; CPedidos.SpdBtnGravar.Enabled := QryPedidos.State in [dsInsert, dsEdit]; CPedidos.SpdBtnExcluir.Enabled := (QryPedidos.State in [dsBrowse]) and (not QryPedidos.IsEmpty); CPedidos.SpdBtnImprimir.Enabled := (QryPedidos.State in [dsBrowse]) and (not QryPedidos.IsEmpty); CPedidos.BitBtnFechar.Enabled := QryPedidos.State in [dsBrowse]; CPedidos.DBNavigatorPedidos.Enabled := (QryPedidos.State in [dsBrowse]) and (not QryPedidos.IsEmpty); CPedidos.pnItem.Enabled := QryPedidos.State in [dsInsert, dsEdit]; CPedidos.PanelDados.Enabled := QryPedidos.State in [dsInsert, dsEdit]; end; Como é que eu saio dessa?
-
Não funciona porque o que eu quero é que, alem de ter a Borda, que a borda seja com os cantos arredodados. Da uma revisada na perguta fazendo favor. Valeu.
-
Ok Eu queria agora o Seguinte: Fiz o meu QReport(Relatório), só que eu preciso que as bordas de cada QRBand, tenham cantos arredondados e preciso tambem, colocar uma figura da Logo da empresa no topo do Relatório e mais uma coisa, Na Aba "Detail", eu queria que, mesmo tendo apenas 2 ou 3 ítens o pedido(por exemplo), a borda fizesse linhas entre eles pelo menos ate que uma folha de "A4" se acabasse. Um abraço.
-
Desculpe. É ZeosDbo 6.6.0
-
então ok. Ficarei aguardando. Desde já meu muito obrigado pela atenção
-
Observe que tem um arquivo com noime SaneRio.Sql, ele tem o script das minhas tabelas e só abrir com o bloco de notas. qualquer coisa, aí vai a estrutura: CREATE TABLE IF NOT EXISTS clientes ( CodigoCliente int(4) unsigned NOT NULL auto_increment, DataCadastro date NOT NULL DEFAULT '0000-00-00' , Tipo char(1) NOT NULL DEFAULT '' , CPF_CNPJ varchar(22) NOT NULL DEFAULT '' , Nome varchar(100) NOT NULL DEFAULT '' , Endereco varchar(200) NOT NULL DEFAULT '' , Bairro varchar(200) NOT NULL DEFAULT '' , Cidade varchar(200) NOT NULL DEFAULT '' , Estado varchar(200) NOT NULL DEFAULT '' , Telefone varchar(22) NOT NULL DEFAULT '0' , Email varchar(100) , PRIMARY KEY (CodigoCliente) ); CREATE TABLE IF NOT EXISTS fornecedores ( CodigoFornecedor int(4) unsigned NOT NULL auto_increment, DataCadastro date NOT NULL DEFAULT '0000-00-00' , Tipo char(1) NOT NULL DEFAULT '' , CPF_CNPJ varchar(22) NOT NULL DEFAULT '' , Nome varchar(100) NOT NULL DEFAULT '' , Endereco varchar(200) NOT NULL DEFAULT '' , Bairro varchar(200) NOT NULL DEFAULT '' , Cidade varchar(200) NOT NULL DEFAULT '' , Estado varchar(200) NOT NULL DEFAULT '' , Telefone varchar(22) NOT NULL DEFAULT '0' , Email varchar(100) , PRIMARY KEY (CodigoFornecedor) ); CREATE TABLE IF NOT EXISTS itens ( Item int(4) unsigned NOT NULL auto_increment, NumeroPedido int(4) NOT NULL DEFAULT '0' , CodigoProduto int(4) NOT NULL DEFAULT '0' , Quantidade int(4) NOT NULL DEFAULT '0' , PrecoUni int(11) NOT NULL DEFAULT '0' , PRIMARY KEY (Item) ); CREATE TABLE IF NOT EXISTS pedidos ( CodigoPedido int(4) unsigned NOT NULL auto_increment, CondicaoPgto varchar(200) NOT NULL DEFAULT '' , DataCadastro date NOT NULL DEFAULT '0000-00-00' , CodigoCliente int(4) NOT NULL DEFAULT '0' , NomeCli varchar(100) NOT NULL DEFAULT '' , LocalFatura varchar(200) NOT NULL DEFAULT '' , LocalCobranca varchar(200) NOT NULL DEFAULT '' , LocalEntrega varchar(200) NOT NULL DEFAULT '' , CPF_CNPJ varchar(22) NOT NULL DEFAULT '' , CEP varchar(20) NOT NULL DEFAULT '' , PRIMARY KEY (CodigoPedido) ); CREATE TABLE IF NOT EXISTS produtos ( CodigoProduto int(4) unsigned NOT NULL auto_increment, Descricao varchar(200) NOT NULL DEFAULT '' , PrecoUni int(11) NOT NULL DEFAULT '0' , PRIMARY KEY (CodigoProduto) );
-
você recebeu o e-mail que te passei no MSN? La tem um arquivo zipado com todo o código do programa. Micheus, da um olhada la que você vera qual é o problema.
-
Ok, eu entendi. Tentei usar da forma que você explicou, porem no caso de eu passar um novo pedido(QryPedidos.insert), aí a variavel total não funciona, so fica 0,00. Segue o código completo do Formulario. unit CadPedidos; interface uses 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; implementation uses 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 atual end; 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 moeda begin // 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; } procedure TCPedidos.RecalculaPedido; var TmpQry:TZQuery; // Total:Currency; // armazena valores do tipo moeda begin StaticTextTotal.Caption := '0,00'; // se o pedido não tiver itens ou houver exception, este é o valor apresentado if not QryPedidosCodigoPedido.IsNull then begin // 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 := 'TmpQry'; // *** o Nome do componente deve ser único!!! TmpQry.SQL.Add('Select SUM(PrecoUni * Quantidade) as Total'); TmpQry.SQL.Add('From Itens Where NumeroPedido = :NumeroPedido'); TmpQry.ParamByName('NumeroPedido').Value := QryPedidosCodigoPedido.AsInteger; TmpQry.Open; StaticTextTotal.Caption := FormatCurr('###,###,##0.00', TmpQry.FieldByName('Total').Value); finally TmpQry.Free; end; end; 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 novamente end; procedure TCPedidos.QryItensNewRecord(DataSet: TDataSet); begin QryItensQuantidade.AsFloat := 1; DBGridItens.SelectedIndex := 0; //código end; procedure TCPedidos.QryItensBeforeInsert(DataSet: TDataSet); begin if 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 Enter if Key = VK_RETURN then // pressionou ENTER begin case DBGridItens.SelectedIndex of 0: DBGridItens.SelectedIndex := 2; //quantidade 1: DBGridItens.SelectedIndex := 2; //quantidade 2: DBGridItens.SelectedIndex := 3; //preço 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); begin if 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); begin if 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 controles end; procedure TCPedidos.SpdBtnCancelarClick(Sender: TObject); begin QryPedidos.Cancel; // cancela inclusão/alteração AtivarControles(False); // desativa os controles end; 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. Te enviei por email os arquivos do projeto pra você me dar uma ajuda. Desde já meu muito obrigado.
-
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 está 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 moeda begin // 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;
-
Olá pessoal. Como eu faço, usando ZQuery, para comparar datas. É que eu cadastro produtos e na tabela tem o campo data que é gravada no formato "06/04/2004". No banco(Mysql), o campo Data é "Date"; Eu preciso fazer uma listagem dos produtos cadastrados entre um determinado período. Estou usando o componente DTPicker para digitar as datas. Uma observação, o ZQuery, não tem ".SetRange". Um abraço e até la.
-
A tmp.Qry esta recebendo os dados da QryItens e esta esta atíva.
-
Ola. Essa é a parte do código que esta dando erro: É aqui que a query está voltando valor vazio e a Table retorna valor diferente de vazio. procedure TCPedidos.RecalculaPedido; var TmpQry:TZQuery; Total:Currency; // armazena valores do tipo moeda begin // 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.Open; 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; Quando era com Table(Codigo abaixo), num tava dando erro, depois que passei usar ZQuery está dando o erro. procedure TCPedidos.RecalculaPedido; var TmpTable:TZTable; Total:Currency; // armazena valores do tipo moeda begin // cria um objeto Table via codificação TmpTable := TZTable.Create(Application); try // define DatabaseName e TableName via codificação TmpTable.Connection := TableItens.Connection; TmpTable.TableName := TableItens.TableName; TmpTable.Open; TmpTable.FindField(TablePedidosCodigoPedido.AsString); Total := 0; // inicializa a variavel totalizadora while (not TmpTable.Eof) and (TmpTable.FieldByName('NumeroPedido').AsInteger = TablePedidosCodigoPedido.AsInteger) do begin // Acumula o Total da linha Total := Total + (TmpTable.FieldByName('PrecoUni').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; Onde sera que esta o erro????????
-
Fiz as devidas alterações e continua dando o erro: "error: query was empty" Esse erro da, quando, no menu do form pricipal, eu chamo o form de cadastro de pedidos. Nem está abrindo o formulario. Pois é, tenho 5 querys no form todas com a instrução inicial "Select * from Tabela" e está dando esse erro. QryProdutos QryClientes QryClientes2 QryPedidos. QryItens Como faço pra ver em, que linha da o erro se o programa não da erro na compilação???
-
estava usado o compmnente table num cadastro de pedidos, e resolvi trocar o table pelo componente zquery. Na migração, foi tudo bem porem, quando abro o formulario, da uma mensagen de "sql error: query was empty". mas não consigo matar esse erro. obs: o codigo compila certinho. segue o codigo que estou usando. se alguém puder me ajudar, muito obrigado unit CadPedidos; interface uses 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; LabelCondicaoPagamento: TLabel; LabelCodigoCliente: TLabel; LabelLocalFatura: TLabel; LabelLocalCobranca: TLabel; LabelLocalEntrega: TLabel; LabelCPF_CNPJ: TLabel; LabelCEP: TLabel; LabelDataCadastro: TLabel; LabelTotalPedido: TLabel; DBEditCodigoPedido: TDBEdit; DBEditCondicaoPagamento: 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; Button1: TButton; DBGridItens: TDBGrid; DSPedidos: TDataSource; DSItens: TDataSource; QryClientes2: TZQuery; QryClientes2CodigoCliente: TIntegerField; QryClientes2Nome: TStringField; QryClientes2Tipo: TStringField; QryClientes2Endereco: TStringField; QryClientes2Email: TStringField; QryClientes2Bairro: TStringField; QryClientes2Cidade: TStringField; QryClientes2Estado: TStringField; QryClientes2Telefone: TStringField; QryClientes2CPF_CNPJ: TStringField; QryClientes2DataCadastro: TDateField; DSClientes: TDataSource; QryPedidos: TZQuery; QryItens: TZQuery; QryClientes: TZQuery; QryProdutos: TZQuery; QryPedidosCodigoPedido: TIntegerField; QryPedidosCondicaoPgto: TStringField; QryPedidosCodigoCliente: TIntegerField; QryPedidosNomeCli: TStringField; QryPedidosLocalFatura: TStringField; QryPedidosLocalCobranca: TStringField; QryPedidosLocalEntrega: TStringField; QryPedidosCPF_CNPJ: TStringField; QryPedidosCEP: TStringField; QryPedidosDataCadastro: TDateField; QryPedidosNomeCliente: TStringField; Label1: TLabel; DBLookupComboBoxNomeCliente: TDBLookupComboBox; 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; 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); private { Private declarations } procedure AtivarControles(Ativar: Boolean); procedure RecalculaPedido; public { Public declarations } end; var CPedidos: TCPedidos; implementation uses dmsane, ListaPedidos; //RelatorioPedidos; {$R *.dfm} procedure TCPedidos.FormCreate(Sender: TObject); begin QryProdutos.Close; QryClientes.Close; QryPedidos.Close; QryItens.Close; end; procedure TCPedidos.FormClose(Sender: TObject; var Action: TCloseAction); begin QryProdutos.Open; QryClientes.Open; QryPedidos.Open; QryItens.Open; end; procedure TCPedidos.FormDestroy(Sender: TObject); begin //Action:= cafree;// remove o form da memória //CPedidos := NIL; // informa que foi destruído (não criado end; 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.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 DBEditCodigoCliente.Text := QryClientes2.Fields[0].Value; DBEditLocalCobranca.Text := QryClientes2.Fields[3].Value +', '+ QryClientes2.Fields[5].Value +' - ' + QryClientes2.Fields[6].Value +'/' +QryClientes2.Fields[7].Value; DBEditCPF_CNPJ.Text := QryClientes2.Fields[9].Value; QryClientes2.Next; end; end; procedure TCPedidos.SpdBtnProcurarClick(Sender: TObject); begin Application.CreateForm(TLPedidos, LPedidos); LPedidos.Show; end; procedure TCPedidos.RecalculaPedido; var TmpQry:TZQuery; Total:Currency; // armazena valores do tipo moeda begin // 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.Open; 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.QryItensCodigoProdutoValidate(Sender: TField); begin if QryItensCodigoProduto.AsString <> '' then begin if QryItensCodigoProduto.AsString <> '' then QryItensPrecoUni.AsCurrency := QryProdutos.FieldByName('PrecoUni').AsCurrency else begin ShowMessage('Código inválido'); Abort; end; end; end; procedure TCPedidos.QryPedidosDataCadastroSetText(Sender: TField; const Text: String); begin if 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); begin if 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 else if QryPedidosDataCadastro.IsNull then begin ShowMessage('Digite a data do pedido!'); DBEditDataCadastro.SetFocus; end else if QryPedidosNomeCliente.AsString = '' then begin // procura pelo cliente usando o código if QryPedidosNomeCliente.AsString <> '' then begin ShowMessage('Código de cliente inválido!'); DBEditCodigoCliente.SetFocus; end else begin QryPedidos.Post; if QryItens.State in [dsInsert,dsEdit] then QryItens.Post; AtivarControles(False); // desativa os controles end; end else begin ShowMessage('Digite o código do cliente!'); DBEditCodigoCliente.SetFocus; end; QryPedidos.Post; if QryItens.State in [dsInsert,dsEdit] then QryItens.Post; AtivarControles(False); // desativa os controles end; procedure TCPedidos.SpdBtnCancelarClick(Sender: TObject); begin QryPedidos.Cancel; // cancela inclusão/alteração AtivarControles(False); // desativa os controles end; procedure TCPedidos.QryPedidosNewRecord(DataSet: TDataSet); begin QryPedidosDataCadastro.AsDateTime := Date; //inicia com a data atual end; procedure TCPedidos.QryItensNewRecord(DataSet: TDataSet); begin QryItensQuantidade.AsFloat := 1; DBGridItens.SelectedIndex := 0; //código 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 novamente end; procedure TCPedidos.QryItensBeforeInsert(DataSet: TDataSet); begin if 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 Enter if Key = VK_RETURN then // pressionou ENTER begin case DBGridItens.SelectedIndex of 0: DBGridItens.SelectedIndex := 2; //quantidade 1: DBGridItens.SelectedIndex := 2; //quantidade 2: DBGridItens.SelectedIndex := 3; //preço else DBGridItens.SelectedIndex := 0; //código QryItens.Next; if QryItens.Eof then QryItens.Append; end; end; end; end.
-
Tenho em um formulario de pesquiza: 1 edit um combobox e um dbgrid Com o Edit eu digito um nome ou CPF ou CNPJ Com a combobox eu escolho qual consulta fazer na tabela se é por Nome ou se é por CPF_CNPJ na query. No DBGrid eu listo os registros da tabela. O que eu quero fazer é o seguite: Quando abrir o form, o DBGrid mostra todos os registros da tabela porem eu queria validalos. Tem um campo Tipo, que valida F 'Física' ou J 'Jurídica' e um campo CPF_CNPJ, que traz o value do campo O Código que to usando é o seguite nesse form: Estou usando usando o código abaixo que esta dando certo, porem esta dando um loop infinito, a barra lateral do DBGrid fica "Doida", subindo e descendo direto e não sei como parar isso. Código: procedure TPCli.BitBtnProcurarClick(Sender: TObject); begin if EditNomeCPF_CNPJ.Text='' then begin showmessage('Digite algum texto para ser pesquisado!'); abort; end else if QryClientes.IsEmpty then begin ShowMessage('Não há registro!'); Abort; end; end; procedure TPCli.BitBtnSelecionarClick(Sender: TObject); begin CClientes.QryClientes.Locate('Nome',dbgriddados.SelectedField.AsString,[]); close; end; procedure TPCli.BitBtnCancelarClick(Sender: TObject); begin Close; end; procedure TPCli.EditNomeCPF_CNPJChange(Sender: TObject); begin if ComboboxEscolha.Text='' then begin showmessage('Escolha o tipo da Pesquiza!'); ComboboxEscolha.setfocus; Abort; end; QryClientes.Close; QryClientes.SQL.Clear; QryClientes.SQL.Add('select * from Clientes where '+ComboboxEscolha.Text+' like:vardigito order by Nome'); QryClientes.Parambyname('vardigito').asstring:= EditNomeCPF_CNPJ.text +'%'; QryClientes.Open; end; procedure TPCli.QryClientesTipoGetText(Sender: TField; var Text: String; DisplayText: Boolean); begin // Aqui funciona mas da loop quando entro com a linha da mascara if Sender.Value = 'F' then begin Text := 'Pessoa Física'; QryClientesCPF_CNPJ.EditMask :='999\.999\.999\-99;0;_'; end else if Sender.Value = 'J' then begin Text := 'Pessoa Jurídica'; QryClientesCPF_CNPJ.EditMask :='99\.999\.999\/9999\-99;0;_'; end end; procedure TPCli.QryClientesTipoSetText(Sender: TField; const Text: String); begin // Aqui funciona mas da loop quando entro com a linha da mascara if Text = 'Pessoa Física' then begin Sender.Value := 'F'; QryClientesCPF_CNPJ.EditMask :='999\.999\.999\-99;0;_'; end else if Text = 'Pessoa Jurídica' then begin Sender.Value := 'J'; QryClientesCPF_CNPJ.EditMask :='99\.999\.999\/9999\-99;0;_'; end end; end. Como resolver esse problema?
-
Oh pessoal. Da uma força aí. Obrigado.
-
Oh pessoal. Da uma força aí. Obrigado.
-
Ola pessoal, estou com um problema com mascaras Como autenticar mascaras para ela representar como valor vazio. Preciso colocar mascara para mostrar os dados dos campos Estado e CPF_CNPJ e Telefone de uma tabela de certa forma que a mascara não represente caracters digitados para não atrapalhar as auteticações de campo vazio ou verificar a quantidade de caracters digitados. Muito obrigado a todos que de uma maneira ou de outra contribuirem. Meu muito obrigado. Carlos Rocha