Ir para conteúdo
Fórum Script Brasil

Jhonas

Monitores
  • Total de itens

    9.657
  • Registro em

Tudo que Jhonas postou

  1. amigo, voce teria que usar indices em suas tabelas, para poder ordenar um campo da tabela http://www.google.com.br/search?q=criando+indices+no+firebird&hl=pt&gbv=2&o que=indices+no+firebird&gs_l=heirloom-serp.1.2.0i22i30l6.468444.472493.0.477569.19.19.0.0.0.0.210.2227.9j8j2.19.0....0...1ac.1.34.heirloom-serp..6.13.1063.tGCI_POSo2I no entanto, seria muito mais simples de fazer isso, se voce utilizasse o componente TQuery o comando para ordenar um campo tipo date seria assim select * from produtos order by data ( voce pode ordenar por mais de um campo ) OBS: como voce já começou seu projeto usando tables, o jeito é voce procurar solucionar esses problemas Só que está aparecendo ainda as outras datas...... isso só vai acontecer se voce estiver fazendo isso: procedure TForm1.Button1Click(Sender: TObject); begin table1.Active := false; table1.filter := 'DATA >= ' +''''+'03/07/2012'+''''; table1.filtered := true; table1.Active := true; end; abraço
  2. Jhonas

    combobox

    OBS: voce está usando um (ComboBox) ... aqui eu fiz usando um (RadioGroup) a logíca é a mesma para o (ComboBox) ... basta fazer as modificações qual é o nome do Label onde aparece "c_cnpj" ? Label1, Label4 ... qual ? pois voce vai alterar o caption do label, quando for um ou outro exemplo: Funções para validar o CPF e o CNPJ function TFClientes.cpf(num: string): boolean; var n1,n2,n3,n4,n5,n6,n7,n8,n9: integer; d1,d2: integer; digitado, calculado: string; begin if MaskEdit2.text = '' then exit; if MaskEdit2.text <> ' . . - ' then begin n1:=StrToInt(num[1]); n2:=StrToInt(num[2]); n3:=StrToInt(num[3]); n4:=StrToInt(num[5]); n5:=StrToInt(num[6]); n6:=StrToInt(num[7]); n7:=StrToInt(num[9]); n8:=StrToInt(num[10]); n9:=StrToInt(num[11]); d1:=n9*2+n8*3+n7*4+n6*5+n5*6+n4*7+n3*8+n2*9+n1*10; d1:=11-(d1 mod 11); if d1>=10 then d1:=0; d2:=d1*2+n9*3+n8*4+n7*5+n6*6+n5*7+n4*8+n3*9+n2*10+n1*11; d2:=11-(d2 mod 11); if d2>=10 then d2:=0; calculado:=inttostr(d1)+inttostr(d2); digitado:=num[13]+num[14]; if calculado=digitado then cpf:=true else cpf:=false; end; end; function CalculaCnpjCpf(Numero : String) : String; var i,j,k, Soma, Digito : Integer; CNPJ : Boolean; begin Result := Numero; case Length(Numero) of 9: CNPJ := False; 12: CNPJ := True; else Exit; end; for j := 1 to 2 do begin k := 2; Soma := 0; for i := Length(Result) downto 1 do begin Soma := Soma + (Ord(Result[i])-Ord('0'))*k; Inc(k); if (k > 9) and CNPJ then k := 2; end; Digito := 11 - Soma mod 11; if Digito >= 10 then Digito := 0; Result := Result + Chr(Digito + Ord('0')); end; end; function ValidaCNPJ(I:string): Boolean; var cnpj: array[1..14] of integer; apoio: array[0..13] of integer; f: integer;//para uso no for total: integer;//para totalização dos valores D1: integer;//primeiro dígito calculado D2: integer;//segundo dígito calculado begin //Primeiro teste: o número de algarismos if (Length(I)<>14) then result:=false else begin //Antes do teste propriamente dito temos que montar a matriz com os //os algarismos do CNPJ e depois uma matriz apoio) que terá os números //que ajudarão a verificar so dígitos verificadores for f := 1 to 14 do begin cnpj[f]:=0; apoio[f-1]:=0; end; //Monta matriz cnpj for f := 1 to 14 do begin cnpj[f]:=strtoint(I[f]); end; end; //Monta matriz de apoio apoio[0]:=6;//só será usada no cálculo do segundo dígito verificador apoio[1]:=5; apoio[2]:=4; apoio[3]:=3; apoio[4]:=2; apoio[5]:=9; apoio[6]:=8; apoio[7]:=7; apoio[8]:=6; apoio[9]:=5; apoio[10]:=4; apoio[11]:=3; apoio[12]:=2; //Começa cálculo do primeiro dígito verificador total:=0;//variável que conterá a soma da operação com os números for f := 1 to 12 do begin total:=total+(cnpj[f]*apoio[f]); end; D1 := total mod 11; if (D1<2) then D1:=0 else D1:=11-D1; if (D1<>cnpj[13]) then begin //Primeiro dígito verificador não confere Result:=false; end else begin //Entrou aqui, então o primeiro dígito confere! total:=0; for f := 0 to 12 do begin total:=total+(cnpj[f+1]*apoio[f]); end; D2 :=total mod 11; if (D2<2) then D2:=0 else D2:=11-D2; if (D2<>cnpj[14]) then begin //Segunod digito verificador não confere Result:=false; end else Result:=true; end; end; Basta trocar o RadioGroup pelo Combobox e fazer as devidas modificações no seu código procedure TFClientes.RadioGroup2Click(Sender: TObject); begin if RadioGroup2.Items.Strings[RadioGroup2.ItemIndex] = 'Física' then begin myLabel3d19.Caption := 'CPF'; // seria o seu label onde o caption é c_cnpj myLabel3d29.Caption := 'RG'; MaskEdit2.EditMask := '000.000.000-00'; MaskEdit3.EditMask := '##############'; CDS_Cadcli.Edit; CDS_CadcliPESSOA.Value := 'Física'; end; if RadioGroup2.Items.Strings[RadioGroup2.ItemIndex] = 'Juridica' then begin myLabel3d19.Caption := 'CNPJ'; // seria o seu label onde o caption é c_cnpj myLabel3d29.Caption := 'INSCR.EST'; MaskEdit2.EditMask := '000.000.000/0000-00'; MaskEdit3.EditMask := '000.000.000-000'; CDS_Cadcli.Edit; CDS_CadcliPESSOA.Value := 'Juridica'; end; end; procedure TFClientes.MaskEdit2Exit(Sender: TObject); VAR S, s2 : boolean; s1 : string; begin try if myLabel3d19.Caption = 'CPF' then begin if MaskEdit2.text = '' then exit; s := cpf(MaskEdit2.text); if s = true then //showmessage('CIC/CPF Valido') else begin showmessage('CIC/CPF Inválido'); MaskEdit2.Text := '000.000.000-00'; end; end; except MaskEdit2.Text := '000.000.000-00'; end; try if myLabel3d19.Caption = 'CNPJ' then begin if MaskEdit2.text = '' then exit; s1 := MaskEdit2.Text; while Pos('.', S1) > 0 do delete(s1,Pos('.', S1),1); while Pos('/', S1) > 0 do delete(s1,Pos('/', S1),1); while Pos('-', S1) > 0 do delete(s1,Pos('-', S1),1); if Pos('0', S1) = 1 then delete(s1,Pos('0', S1),1); s2 := ValidaCNPJ(s1); if s2 = true then //showmessage('CNPJ Valido') else begin showmessage('CNPJ Inválido'); MaskEdit2.Text := '000.000.000/0000-00'; end; end; except MaskEdit2.Text := '000.000.000/0000-00'; end; DBEdit5.Text := MaskEdit2.Text; end; BS: o uso do componente MaskEdit serve para voce mostrar o numero do cpf ou cnpj formatado ( voce usa se quiser, mas eu acho que fica mais profissional ) siga a lógica e faça as alterações necessarias no seu código abraço
  3. Só que ele mostra uma mensagem; Access Violation.... esse erro ocorre quando voce tenta usar um endereço de memória que já está ocupado somente usando o debugger do delphi para achar esse tipo de erro .... use o break point no inicio do código e siga a execução do código teclando ( F8 ) se esse erro ocorre assim que o programa é executado, então verifique o que foi carregado para a memoria antes da execução abraço
  4. Jhonas

    combobox

    qual é o nome do campo onde aparece "Fisica" ? qual é o nome do Label onde aparece "c_cnpj" ?
  5. fiz um teste aqui com o Firebird ... está funcionando corretamente só mostra os registros com essa data procedure TForm1.Button1Click(Sender: TObject); begin table1.Active := false; table1.filter := 'DATA = ' +''''+'03/07/2012'+''''; table1.filtered := true; table1.Active := true; end; abraço
  6. não deveria ocorrer isso voce está usando Paradox ? ou outro banco de dados ? para o Paradox faça esse teste table1.Active := false; table1.filter := 'DATA = ' +''''+'02/06/2015'+''''; table1.filtered := true; table1.Active := true; OBS: isso deve mostrar somente os registros com essa data ... não tem como mostrar outras datas dependendo do banco de dados, a data pode estar em outro formato ou veja como está definido a configuração da data no seu micro veja no Painel de Controle > Opções Regionais como esta a definição da data .. deve ser dd/mm/aaaa abraço
  7. falta de atenção de minha parte faça assim procedure TForm1.RadioButton1Click(Sender: TObject); begin if RadioButton1.Checked = true then begin table1.Active := false; table1.filter := 'DATA >= ' + ''''+datetostr(now-30)+'''' + ' and ' + 'DATA <= ' + ''''+ datetostr(now)+'''';// pegar o periodo da data atual menos (-) 30 dias table1.filtered := true; table1.Active := true; FRXReport1.LoadFromFile('E:\ProjetoCadastro\Nova Lanchonete\VendaMensal.fr3'); FrxReport1.ShowReport() ; end; end; procedure TForm1.RadioButton2Click(Sender: TObject); begin if RadioButton2.Checked = true then begin table1.Active := false; table1.filter := 'DATA = ' + ''''+datetostr(now)+'''';// pegar a data atual do micro table1.filtered := true; table1.Active := true; FRXReport1.LoadFromFile('E:\ProjetoCadastro\Nova Lanchonete\VendaDiaria.fr3'); FrxReport1.ShowReport() ; end; end; obs: quando tiver duvida sobre um comando, coloque o cursor no comando e tecle F1 ( Help ) Now Returns the current date and time. // Retorna a data corrente e o tempo Unit SysUtils Category datetime routines Delphi syntax: function Now: TDateTime; C++ syntax: extern PACKAGE System::TDateTime __fastcall Now(void); Description Returns the current date and time, corresponding to the sum of the value returned by the global Date and Time functions. Note: Although TDateTime values can represent milliseconds, Now is accurate only to the nearest second. Retorna a data e hora atuais, correspondente à soma do valor retornado pelas funções de data e hora globais. Nota: Embora os valores TDateTime possam representar milissegundos, agora é preciso somente para o segundo mais próximo. abraço
  8. exemplo unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} uses ComObj; procedure TForm1.Button1Click(Sender: TObject); var i : integer; coluna, linha, linha1 : integer; excel: variant; valor: integer; begin valor := 0; try // criar uma planilha no Excell excel:=CreateOleObject('Excel.Application'); //adiciona um Workbook com 3 planilhas (Plan1, Plan2 e Plan3) excel.Workbooks.add; except Application.MessageBox ('Versão do Ms-Excel'+ 'Incompatível','Erro',MB_OK+MB_ICONEXCLAMATION); end; try for linha:=0 to 65900 do begin if linha <= 65535 then // Limite de linhas na planilha begin inc(valor); for coluna:=1 to 1 do excel.cells [linha+1,coluna]:=valor; end else begin // linhas > 65536 passar os dados para a proxima planilha Excel.Worksheets['Plan2'].Activate; inc(linha1); inc(valor); for coluna:=1 to 1 do excel.cells [linha1,coluna]:=valor; end; end; excel.columns.AutoFit; excel.visible:=true; except Application.MessageBox ('Erro na Tabela do Ms-Excel','Erro',MB_OK+MB_ICONEXCLAMATION); end; end; end. abraço
  9. é possivel, mas voce vai precisar de entender como isso funciona no dephi na net tem muito material disponivel sobre o assunto http://www.google.com.br/search?q=View+para+relacionamento+entre+tabelas+delphi+&hl=pt&gbv=2&o que=View+para+relacionamento+entre+tabelas+delphi+&gs_l=heirloom-serp.3...470597.487032.0.487413.32.20.5.7.0.0.373.2878.7j10j1j2.20.0....0...1ac.1.34.heirloom-serp..10.22.2373.wtLR71MP5EA abraço
  10. Jhonas

    WARNING

    Aviso: topicos não relacionados com o forum serão deletados e o membro será considerado spamer Warning: topics not related to the forum will be deleted and the member will be considered spamer
  11. Eu Queria que ele abrisse o relatório com as vendas diárias por exemplo sem eu digitar nenhuma data... Simplesmente automatico.... voce pode pegar a data do micro sem precisar digitar procedure TForm1.RadioButton1Click(Sender: TObject); begin if RadioButton1.Checked = true then begin table1.Active := false; table1.filter := 'DATA >= ' + now-30 + ' and ' + 'DATA <= ' + now ;// pegar o periodo da data atual menos (-) 30 dias table1.Active := true; table1.filtered := true; FRXReport1.LoadFromFile('E:\ProjetoCadastro\Nova Lanchonete\VendaMensal.fr3'); FrxReport1.ShowReport() ; end; end; procedure TForm1.RadioButton2Click(Sender: TObject); begin if RadioButton2.Checked = true then begin table1.Active := false; table1.filter := 'DATA = ' + now();// pegar a data atual do micro table1.Active := true; table1.filtered := true; FRXReport1.LoadFromFile('E:\ProjetoCadastro\Nova Lanchonete\VendaDiaria.fr3'); FrxReport1.ShowReport() ; end; end; OBS: Caso tenha duvidas quanto aos comandos, use o help do delphi ( tecla F1 ) abraço
  12. se voce está usando o componente Table voce pode filtrar os dados exemplo: na propriedade Filter voce pode colocar assim para filtrar os registros da tabela pelo campo DATA por um periodo DATA >= '01/12/2014' and DATA <= '31/12/2014' e na propriedade Filtered basta deixar como true somente os registros com as datas nesse período é que serão mostradas abraço
  13. apostila do fortran 90 http://www.google.com.br/url?q=http://www.dma.ufv.br/tutorial/fortran.pdf&sa=U&ei=c31oVaa0FMGWyATEiYLwBQ&ved=0CC0QFjAE&usg=AFQjCNFVdx73KgWxAUzuA1IdhVGtrPH3dg outras http://www.google.com.br/search?q=fortran+90+tutorial&hl=pt&gbv=2&nfpr=&spell=1&o que=fortran+90&gs_l=heirloom-serp.1.1.0l10.1896036.1897678.0.1912106.10.10.0.0.0.0.200.1352.4j5j1.10.0....0...1ac.1.34.heirloom-serp..3.7.840.EGR-9ycvFx0 quanto ao compilador, depende da versão do seu windows http://www.google.com.br/search?hl=pt&gbv=2&q=fortran+90+download+windows+7&revid=1017222524&sa=X&ei=-X1oVdSYGoWpyQSNu4OQBg&ved=0CFMQ1QIoAw abraço
  14. List index out of bounds (65536) Creio que esteja estourando as linhas, mas como posso resolver ? realmente está ultrapassando o limite de linhas do excel nesse caso, se ultrapassar esse limite voce deve inserir o restante dos dados em uma nova planilha Plan1, Plan2, Plan3 .... etc abraço
  15. if Diário.checked = true then beginFRXReport1.LoadFromFile('E:\ProjetoCadastro\Nova Lanchonete\VendaCaixa.fr3'); FrxReport1.ShowReport() ; end else ShowMessage('Operação incorreta'); End; End; Fiz esta mensagem para testar mais sempre abre o formulário A condição de um RadioButton sempre será true ou false ... observe que em seu código para abrir o seu report sempre será a condição true ...a não ser que voce clique novamente no RadioButton para deixa-lo false no caso do RadioButton, um componente é independente do outro, ou seja, se voce clicar em um ele ficara ( checked = true ) e se clicar em outro, esse tambem ficara ( checked = true ) ... a condição ( checked = false ) só acontece se voce clicar nele novamente. Então é necessario que voce faça um controle, para que quando um for true o outro seja false para evitar isso foi criado outro componente chamado RadioGroup... nele voce coloca quantos RadioButton voce precise, e ele mesmo controla os ( checked ) de cada um, automaticamente. ( quando um está true os outros ficam false ) para chamar relatorios pelo RadioButton, poderia ser assim procedure TForm1.RadioButton1Click(Sender: TObject); begin if RadioButton1.Checked = true then begin FRXReport1.LoadFromFile('E:\ProjetoCadastro\Nova Lanchonete\VendaMensal.fr3'); FrxReport1.ShowReport() ; end; end; procedure TForm1.RadioButton2Click(Sender: TObject); begin if RadioButton2.Checked = true then begin FRXReport1.LoadFromFile('E:\ProjetoCadastro\Nova Lanchonete\VendaDiaria.fr3'); FrxReport1.ShowReport() ; end; end; abraço
  16. voce só consegue isso, se houver uma união ( relacionamento ) entre as suas tabelas, caso contrario, somente na tabela onde foi criado o campo virtual como fazer relacionamento entre tabelas http://www.google.com.br/search?q=como+fazer+relacionamento+de+tabelas+no+delphi&hl=pt&gbv=2&o que=tabelas++delphi&gs_l=heirloom-serp.1.4.0i7i30l3j0i7i5i30l6j0i30.1379502.1380821.0.1387863.8.7.0.0.0.0.1316.8928.7-7.7.0....0...1ac.1.34.heirloom-serp..7.1.1175.HDBi23EjaeQ abraço
  17. para usar o componente RadioButton seria assim: exemplo unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids, DBGrids, DB, DBTables; type TForm1 = class(TForm) DataSource1: TDataSource; DBGrid1: TDBGrid; RadioButton1: TRadioButton; RadioButton2: TRadioButton; RadioButton3: TRadioButton; Query1: TQuery; procedure RadioButton1Click(Sender: TObject); procedure RadioButton2Click(Sender: TObject); procedure RadioButton3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.RadioButton1Click(Sender: TObject); begin if RadioButton1.Checked = true then begin Query1.Active := false; Query1.SQL.Clear; Query1.SQL.Append('select * from produtos order by cod_fornec'); Query1.Active := true; end; end; procedure TForm1.RadioButton2Click(Sender: TObject); begin if RadioButton2.Checked = true then begin Query1.Active := false; Query1.SQL.Clear; Query1.SQL.Append('select * from produtos order by cod_prod'); Query1.Active := true; end; end; procedure TForm1.RadioButton3Click(Sender: TObject); begin if RadioButton3.Checked = true then begin Query1.Active := false; Query1.SQL.Clear; Query1.SQL.Append('select * from produtos order by descricao'); Query1.Active := true; end; end; end. OBS: Essa é uma das maneiras, mas existem muitas outras... nesse caso, quando voce seleciona um RadioButton, voce fecha a query, limpa, substitui o código select, e ativa a query novamente ... o DBgrid vai mostrar os dados da "select" assim que a query é ativada. abraço
  18. já fiz alguns testes nesse sentido.... a performance vai depender da velocidade de conexao com a internet, a configuração do servidor e a distancia fisica do mesmo. depende tambem do trafego de dados ( pesquisas que trazem muitos dados deixa lento ) uma sugestão seria usar um banco local com atualização remota ( bancos sincronizados ) veja se isso te ajuda https://www.howtoforge.com/mysql_master_master_replication abraço
  19. o erro é : Classe PreparedReport não encontrado voce pode ter deletado alguma coisa do relatorio Nota: caso o FastReport não encontre o arquivo, nenhum erro é mostrado, apenas o relatório não exibe nenhum registro. Veja o exemplo desse artigo: http://anaprogramadorajunior.blogspot.com.br/2013/10/fastreport-no-delphi.html abraço
  20. Jhonas

    Dúvida Redes

    veja a configuração wirelles do notebook... pode estar interferindo
  21. procure na pasta DEMOS do delphi ( acho que QR2 ou QR3 ) são exempos de como usar Quick Report, mas tem tambem para o Fast Report ou veja nesses links http://www.google.com.br/search?q=fastreport+delphi+xe7&hl=pt&gbv=2&o que=fast+report+delphi&gs_l=heirloom-serp.1.2.0i10l4j0j0i7i10i30l3j0j0i7i10i30.1335258.1350914.0.1354241.12.12.0.0.0.2.341.1625.5j5j0j2.12.0....0...1ac.1.34.heirloom-serp..5.7.658.6YIZyA8pRJQ abraço
  22. agora vi um detalhe .... voce disse que instalou num micro 64 bits ... baixe o arquivo DataSnapCommon para 64 bits abraço
  23. agora verifique em cada um dos arquivos rtf, se em todos eles aparece isso ( em vermelho ) "mailto:residial@gmail.com" se for isso em todos, basta voce usar o comando POS do delphi para procurar essa string dentro do arquivo e extrair o restante residial@gmail.com verifique tambem o que vem antes de Trabalho ou outra coisa referente ao assunto
×
×
  • Criar Novo...