Ir para conteúdo
Fórum Script Brasil

Carlos Rocha

Membros
  • Total de itens

    1.300
  • Registro em

  • Última visita

Tudo que Carlos Rocha postou

  1. 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í! '
  2. 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)
  3. 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.
  4. 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.
  5. 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?
  6. 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?
  7. 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.
  8. 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.
  9. então ok. Ficarei aguardando. Desde já meu muito obrigado pela atenção
  10. 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) );
  11. 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.
  12. 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.
  13. 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;
  14. 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.
  15. A tmp.Qry esta recebendo os dados da QryItens e esta esta atíva.
  16. 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????????
  17. 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???
  18. 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.
  19. 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?
  20. Oh pessoal. Da uma força aí. Obrigado.
  21. Oh pessoal. Da uma força aí. Obrigado.
  22. 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
  23. Ola pessoal, estou com um problema um pouco semelhante ao do colega. 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
  24. Meu problema agora é o seguinte: 1)Tenho num formulario de cadastro de clientes, 2 querys. Uma pra fazer os posts e os edits e outra pra fazer uma cosulta a tabela MySql pra saber se já existe o CPF cadastrado. Tenho tambem dois Buttos um "Novo" para um novo registro que poe a tabela em estado inserção. e um "Editar" para alterar um registro existente na tabela que poe a tabela em estado edição. Tenho a ídea de, ao clikar no botão gravar, sejam feitas algumas considerações; A - Uma pesquiza usando uma query auxiliar no Form que retornara todos os dados da tabela Clientes onde o Campo cPF_CNPJ seja igual ao preenchido no DBEditCPF_CNPJ.Text. B - Depois verifica o estado da Query principal do Form: Caso seja dsInsert, e caso o CPF ou CNPJ digitado não tenha cadastro na tabela, aí dá um Post e grava. Até aí esta ok. Caso seja dsEdit, e caso o CPF ou CNPJ digitado seja o mesmo do cadastro na tabela, aí dá um Post e grava. Até aí esta ok. Depois verifica se, caso o CPF ou CNPJ digitado não seja o mesmo do cadastro na tabela e não tenha cadastro na tabela, aí não Posta e aborta. Aqui está dando erro, está gravando mesmo assim. Eis o código que estou usando. Onde que esta o erro? procedure TCClientes.BitBtnGravarClick(Sender: TObject); begin QryClientes2.Close; QryClientes2.Sql.Clear; QryClientes2.SQL.Add('Select * from Clientes where CPF_CNPJ = '+''''+DBEditCPF_CNPJ.Text+''''+''); QryClientes2.Open; if QryClientes.State in [dsInsert] then begin // if not QryClientes2.Eof then //já existe cadastro if not QryClientes2.IsEmpty then //já existe cadastro begin ShowMessage ('Já existe Cadastro com este CPF/CNPJ. Pesquize!'); Abort; end else begin QryClientes.Post; ShowMessage ('Cadastro efetuado com sucesso!'); end end; //////////// ShowMessage ('Erro a partir daqui!'); ////////////// if QryClientes.State in [dsEdit] then begin if QryClientesCPF_CNPJ.Value = DBEditCPF_CNPJ.Text then begin QryClientes.Post; ShowMessage ('Alteração efetuada com sucesso!'); end else begin //if not QryClientes2.Eof then //já existe cadastro if not QryClientes2.IsEmpty then //já existe cadastro begin ShowMessage ('Já existe Cadastro com este CPF/CNPJ. Pesquize!'); DBEditCPF_CNPJ.SetFocus; // posiciona o cursor Abort; end else begin QryClientes.Post; ShowMessage ('Alteração efetuada com sucesso!'); end end end; ////////////////////(Até aqui)////////////////////////////////////////// end; 2) Outra situação é a seguite: Tenho em outro formulario 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 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. Eu queria fazer uma busca dizendo que, caso o Tipo seja F, a Mascara é de CPF, e caso o Tipo seja J, a Mascara é de CNPJ. Porem só esta dando para todas os registros, mascara só referente à do primeiro registro, se o primeiro for F todos são mascaras de CPF, se for J, mascara de CNPJ. Parece que falta um loop, sei la. Outra observação é que, no caso de ser feito algum filtro, aí o grid mascara direito, o CPF recebe mascara de CPF e o CNPJ de CNPJ. O Código que to usando é o seguite nesse form: procedure TPCli.EditNomeCPF_CNPJChange(Sender: TObject); begin if ComboboxEscolha.Text='' then begin showmessage('Escolha o tipo da Pesquiza!'); // Limpar o DBEdit: // EditNomeCPF_CNPJ.text := ''; 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; /////// Exibir Mascara no normal do Grid tambem sem filtrar////////// /////// Detalhe: Quando coloco Mascara antes do filtro, parece que precisa fazer um loop para saber qual é o segundo campo Tipo, se é F ou J. if QryClientesTipo.Value = 'F' then begin QryClientesCPF_CNPJ.EditMask :='999\.999\.999\-99;0;_'; end else if QryClientesTipo.Value = 'J' then begin QryClientesCPF_CNPJ.EditMask :='99\.999\.999\/9999\-99;0;_'; end; end; procedure TPCli.FormCreate(Sender: TObject); begin // Por Mascara no Grid quando abrir pela primeira vez // Parece que está pedindo um while na tabela. { While QryClientesTipo.Value = 'F' do begin QryClientesCPF_CNPJ.EditMask :='999\.999\.999\-99;0;_'; // QryClientesCPF_CNPJ.EditMask :='99\.999\.999\/9999\-99;0;_'; Abort; end; While QryClientesTipo.Value = 'J' do begin QryClientesCPF_CNPJ.EditMask :='99\.999\.999\/9999\-99;0;_'; Abort; end; } end; 3) 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 certa forma que a mascara não represente caracters digitados para não atrapalhar as auteticações de campo vazio ou numeros Muito obrigado a todos que de uma maneira ou de outra contribuirem. Meu muito obrigado. Carlos Rocha
×
×
  • Criar Novo...