Ir para conteúdo
Fórum Script Brasil

António44

Membros
  • Total de itens

    168
  • Registro em

  • Última visita

Posts postados por António44

  1. Testei esta variavel 1º Code , e ela funciona...mas muda o TMP para C:\Windows\Temp...?estou na duvida se ela devia mudar ou não a TMP...??? e não retorna,fica definitivo.????

    No micro onde estou rodando a Aplicação que é na Camara...que vocês no Brasil chamam de Prefeitura penso ? eles usam uma internet Movel por USB e cada vez que liga ela dá um erro de Run Time 32 até ai tudo normal eu pensava que não tinha a ver com o meu programa mas na via das duvidas eu quis testar com a outra variavel que retorna ao TMP original que está no 2º Code primeiro liguei a net entrei na rede e depois executei o meu programa...e lá estava o erro:?????no soft. da Net Movel , sai voltei a executar e não há duvidas, tb eles usam o OpenOfice e ao abrir o editor de texto foi criar uma pasta em Meus documentos com o nome %USERPROFILE%\definicões locais\Temp...???,será que não haveria outra maneira de dar a volta a isso???.

    uses
      Registry; // unit com a declaração de TRegistry
    
    // função para mudança de variáveis de ambiente
    function SetGlobalEnvironment(const Name, Value: string; const User: Boolean): Boolean;
    resourcestring
      REG_MACHINE_LOCATION = 'System\CurrentControlSet\Control\Session Manager\Environment';
      REG_USER_LOCATION = 'Environment';
    begin
      with TRegistry.Create do
        try
          if User then { User Environment Variable }
            Result := OpenKey(REG_USER_LOCATION, False)
          else { System Environment Variable }
          begin
            RootKey := HKEY_LOCAL_MACHINE;
            Result  := OpenKey(REG_MACHINE_LOCATION, False);
          end;
          if Result then
          begin
            WriteString(Name, Value); { Write Registry for Global Environment }
            { Update Current Process Environment Variable }
            SetEnvironmentVariable(PChar(Name), PChar(Value));
            { Send Message To All Top Window for Refresh }
            SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, Integer(PChar('Environment')));
          end;
        finally
          Free;
        end;
    end; { SetGlobalEnvironment }
    
    
    procedure TBrwChaves.FormCreate(Sender: TObject);
    var
      LongPath :array[0..512] of char;
      ShortPath :array[0..MAX_PATH] of char;
    begin
      GetTempPath(SizeOf(LongPath), LongPath);
      if LongPath <> '' then
      begin
        if GetShortPathName(LongPath, ShortPath, MAX_PATH) > 0 then
        begin
          if not SetGlobalEnvironment('TMP', ShortPath, True) then
            ShowMessage('Erro ao tentar mudar a variável de ambiente "TMP"');
        end else
          ShowMessage('Erro ao obter o path curto.');
      end;
    end;
    2º Code.
    uses
      Registry; // unit com a declaração de TRegistry
    
    // função para mudança de variáveis de ambiente
    function SetGlobalEnvironment(const Name, Value: string; const User: Boolean): Boolean;
    resourcestring
      REG_MACHINE_LOCATION = 'System\CurrentControlSet\Control\Session Manager\Environment';
      REG_USER_LOCATION = 'Environment';
    begin
      with TRegistry.Create do
        try
          if User then { User Environment Variable }
            Result := OpenKey(REG_USER_LOCATION, False)
          else { System Environment Variable }
          begin
            RootKey := HKEY_LOCAL_MACHINE;
            Result  := OpenKey(REG_MACHINE_LOCATION, False);
          end;
          if Result then
          begin
            WriteString(Name, Value); { Write Registry for Global Environment }
            { Update Current Process Environment Variable }
            SetEnvironmentVariable(PChar(Name), PChar(Value));
            { Send Message To All Top Window for Refresh }
            SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, Integer(PChar('Environment')));
          end;
        finally
          Free;
        end;
    end; { SetGlobalEnvironment }
    
    // função para obtenção do valor de variáveis de ambiente
    function GetGlobalEnvironment(const Name: string; const User: Boolean): string;
    resourcestring
      REG_MACHINE_LOCATION = 'System\CurrentControlSet\Control\Session Manager\Environment';
      REG_USER_LOCATION = 'Environment';
    var
      Resultado :Boolean;
    begin
      with TRegistry.Create do
        try
          if User then { User Environment Variable }
            Resultado := OpenKey(REG_USER_LOCATION, False)
          else { System Environment Variable }
          begin
            RootKey := HKEY_LOCAL_MACHINE;
            Resultado := OpenKey(REG_MACHINE_LOCATION, False);
          end;
          if Resultado then
            Result := ReadString(Name);
        finally
          Free;
        end;
    end; { GetGlobalEnvironment }
    
    
    procedure TForm1.FormCreate(Sender: TObject);
    var
      TMP,
      WinDir :String;
    begin
      TMPOld := '';  // variável declarada na sessão private do form
      WinDir := GetGlobalEnvironment('windir', False);
    // o código abaixo só irá funcionar no Windows XP e superior, abaixo destes
    // não deve haver problemas com nomes longos
      if WinDir = '%SystemRoot%' then
      begin
        TMP := GetGlobalEnvironment('TMP', False);
        Delete(TMP, 1, Length(WinDir));
        TMPOld := GetGlobalEnvironment('TMP', True);
        if not SetGlobalEnvironment('TMP', 'c:\windows'+TMP, True) then
          ShowMessage('Não foi possível alterar a variável de ambiente "TMP"');
      end;
    end;
    
    procedure TBrwChaves.FormDestroy(Sender: TObject);
    begin
      if TMPOld <> '' then  // se variável foi alterada...
        SetGlobalEnvironment('TMP', TMPOld, True);
    end;

  2. Tem aqui tb outros jeitos de fazer esse filtro.

    dm.q_clientes.Sql.Add('Select * from tbl_clientes where fim_contrato <> ' ' and ( data >= :DataIni and Data <= :DataFim );
    begin
    dm.q_clientes.Close;
    dm.q_clientes.Filter:='Data >= ''' +DateToStr(Date1.date)+ ''' and fim_contrato <= '''+DateToStr(Date2.Date) +'''';
    dm.q_clientes.Filtered:=True;//aqui uso 2 dateTimePicker ou 2 DateEdit
    dm.q_clientes.Open;
    end;

    Abraços.

  3. Tem aqui tb uma forma de mostrar o seu resultado.

    procedure TBusca.SpeedButton2Click(Sender: TObject);
    begin 
    if EdCodigo.text ='' then
    showmessage('Digitar Código...! ')  else
    begin
    if EdCodigo.text  <> DM.GeralCodigo.value then
    showmessage('Não tem esse Código Registado') else
    begin
    DM.Geral.Close;
    DM.Geral.Filter:='Codigo >= ''' + EdCodigo.text +'''';
    DM.Geral.Filtered:=True;
    DM.Geral.Open;
    FormDetalhe.show;//Onde você tem a descricao.
    end;
    end;
    end;

    Abraço ai pro brasil...

  4. Não sei porque da erro...pois eu fiz um teste com um programa meu usando BDE no vista e funcionou certinho....até da para acessar na rede...mas se eu abrir o fonte deste programa no delphi e tentar usar a DATABASENAME DE UMA TABLE OU QUERY ele dá este erro:

    N ERROR OCCURRED WHILE ATTEMPTING TO INITIALIZE THE BORLAND DATABASE ENGINE(ERROR $251E)

    O que pode ter acontecido é que você instalou o BDE antes de ter instalado o D4...? se foi isso então eu sugueria que você desinstale o BDE apague todas as pastas criadas pela instalação do mesmo em C:\Borland ou se criou em C:\Arquivos de Programas e volte a instalar tudo junto com o instalador do D4,isto porque alguns instaladores da BDE que se encontram por ai instalan-se nestes directórios diferentes... para rodar aplicativos já desenvolvidos funcionam bem, mas para aceder a partir do Delphi não funcionan .!O directório tem que estar em C:\Programas\Borland\Common Files\BDE que é onde se encontra tb o Delphi C:\Programas\Borland\Delphi 4

    Tente isso e depois diga algo

    Abraços

  5. Micheus,eu tenho relatórios diferentes,embora os dados estejam todos na mesma DB tanto a informação como o design de cada um deles é diferente não sei o que poderá ser feito mais...quando você fala '' criar as consultas dinamicamente e ajustar o relatório de modo a mostrar os dados conforme opção''.

    você podia dar-me um pequeno exemplo do que podia fazer?

    Abraços.

  6. Colega tem aqui uma dica de como usar seus cursores animados.

    unit UnitLogin;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, jpeg, ExtCtrls,db, Buttons, DBCtrls, yupack, RXCtrls, Mylabel,
      RxGrdCpt;
    const
    MythNo =1; //aqui você declara o cursor, ou os cursores...(só o nome dos cursor sem .ani )
    type
      TFrmLogin = class(TForm)
        iblnome: TLabel;
        iblsenha: TLabel;
        EdSenha: TEdit;
        PnlMensagem1: TPanel;
        SpeedButton1: TSpeedButton;
        SpeedButton2: TSpeedButton;
        EdNome: TComboBox;
        PnlMensagem: TLabel;
        Bevel1: TBevel;
        RxGradientCaption1: TRxGradientCaption;
        Image1: TImage;
        procedure BtnCancelarClick(Sender: TObject);
        procedure FormShow(Sender: TObject);
        procedure EdNomeChange(Sender: TObject);
        procedure SpeedButton1Click(Sender: TObject);
        procedure SpeedButton2Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure EdSenhaKeyPress(Sender: TObject; var Key: Char);
      private
        { Private declarations }
      public
        { Public declarations }
        procedure CreateEdNomeList;
      end;
    
    var
      FrmLogin: TFrmLogin;
    
    implementation
    Para usar o cursor,meta ele no directório da Aplicação e use assim.;)
    procedure TFrmLogin.FormCreate(Sender: TObject);
    begin
    Screen.Cursors [MythNo] := LoadCursorFromFile ('MythNo.ani');//Aqui você chama o cursor ??? .ani.
    Screen.cursor:=MythNo;
    end;

    Espero que tenha ajudado você. :D

    Abraços

  7. Eder, configura o BDE, ;) simples e 100% eficaz.

    BDE Vista.

    Windows Vista pode ser muito restritiva para aplicativos escritos para as versões anteriores do Windows.

    Este é também o caso com o Borland Database Engine (BDE), que não é capaz de funcionar a menos que duas

    configurações foram alteradas:

    A permissão deve ser dada nas janelas registro de dados

    "Net Dir" deve ser deslocado usando Borland's "BDE Administrator"

    Após o Borland Database Engine foi instalado tanto ações devem ser executadas na ordem listada.

    A permissão deve ser dada nas janelas registro de dados

    Primeiro qualquer usuário deve ser concedido direito de ler e editar as propriedades na Borland sub-chave

    para a máquina local no Registro.

    Identificados como administrador, isto é feito da seguinte forma:

    Vá para Iniciar

    Clique em Executar ...

    Digite regedit.

    Abra o ramo HKEY_LOCAL_MACHINE.

    Abrir o software ramo.

    Botão direito do mouse sobre Borland.

    No menu que mostra escolha Permissao ...

    Clique em "Usuários".

    Em "Tipo de Acesso", selecione "Controle Total"

    Clique em OK

    Clique em OK para sair da caixa de diálogo Registry Key Permissions.

    Sair o Editor do Registro janela

    Em seguida, o Borland Database Engine deve ser configurado.

    "Net Dir" deve ser deslocado usando Borland's "BDE Administrator"

    No Borland Database Engine, partilha de dados entre os mais trabalho é controlada pelo arquivo:

    "Pdoxusrs.net". A localização deste arquivo é importante que os trabalhadores que operam na mesma os dados

    devem referir-se ao mesmo arquivo. A configuração padrão para a colocação deste arquivo está na raiz da

    unidade C, que irá falhar no Windows Vista, uma vez que este sistema operacional não permite que novos

    arquivos a ser criado aqui. No entanto, é permitida para criar uma nova pasta (diretório) na raiz da

    unidade C, e, essa nova pasta o arquivo "Pdoxusrs.net" podem ser colocados. O nome da nova pasta é de

    menor importância e que poderia ser chamado de "BDEShare"

    Agora, a BDE deve ser configurado para usar a nova pasta. Isto é feito no painel de controle do Windows,

    onde uma ferramenta de configuração para o "Borland Database Engine" chamado: "BDE Administrador" pode ser

    encontrado.

    Sobre a tabsheet "Configuração" a configuração árvore deve ser expandido para o caminho Configuration /

    Drivers / Native. Na "Paradox" atributo definido, modificar a configuração mais alto: "NET DIR". Neste

    ponto, o caminho da recém-criada pasta está inscrita.

    Se o BDE Administrador não é capaz de fazer a mudança, então, verificar que a permissão no registro, foi

    fixado adequadamente. Se não for este o caso tente a aplicar a permissão, como descrito na acima.

    Se os dados devem ser compartilhados entre os mais trabalho, então, há exigências específicas quanto à

    colocação do arquivo "Pdoxusrs.net". Estas são descritas em detalhe no documento:

    Paradoxo. Como configurar o "Paradox Database Engine"

    em um ambiente multi usuário.

    Abraços ai para o brasil :D

  8. Tem aqui uma função que você pode adptar.

    unit Ext;
    
    
    
    interface
    
    function extenso (valor: real): string;
    
    
    
    implementation
    
    
    
    uses
    
    SysUtils,  Dialogs;
    
    
    
    
    
    function extenso (valor: real): string;
    
    var
    
    Centavos, Centena, Milhar, Milhao, Texto, msg: string;
    
    const
    
    Unidades: array[1..9] of string = ('Um', 'Dois', 'Tres', 'Quatro', 'Cinco',
    
                                       'Seis', 'Sete', 'Oito', 'Nove');
    
    Dez: array[1..9] of string = ('Onze', 'Doze', 'Treze', 'Quatorze', 'Quinze',
    
                                  'Dezesseis', 'Dezessete', 'Dezoito', 'Dezenove');
    
    Dezenas: array[1..9] of string = ('Dez', 'Vinte', 'Trinta', 'Quarenta',
    
                                      'Cinquenta', 'Sessenta', 'Setenta',
    
                                      'Oitenta', 'Noventa');
    
    Centenas: array[1..9] of string = ('Cento', 'Duzentos', 'Trezentos',
    
                                       'Quatrocentos', 'Quinhentos', 'Seiscentos',
    
                                       'Setecentos', 'Oitocentos', 'Novecentos');
    
    
    
    function ifs(Expressao: Boolean; CasoVerdadeiro, CasoFalso: String): String;
    
    begin
    
    if Expressao
    
    then Result:=CasoVerdadeiro
    
    else Result:=CasoFalso;
    
    end;
    
    
    
    function MiniExtenso (trio: string): string;
    
    var
    
    Unidade, Dezena, Centena: string;
    
    begin
    
    Unidade:='';
    
    Dezena:='';
    
    Centena:='';
    
    if (trio[2]='1') and (trio[3]<>'0') then
    
    begin
    
    Unidade:=Dez[strtoint(trio[3])];
    
    Dezena:='';
    
    end
    
    else
    
    begin
    
    if trio[2]<>'0' then Dezena:=Dezenas[strtoint(trio[2])];
    
    if trio[3]<>'0' then Unidade:=Unidades[strtoint(trio[3])];
    
    end;
    
    if (trio[1]='1') and (Unidade='') and (Dezena='')
    
    then Centena:='cem'
    
    else
    
    if trio[1]<>'0'
    
    then Centena:=Centenas[strtoint(trio[1])]
    
    else Centena:='';
    
    Result:= Centena + ifs((Centena<>'') and ((Dezena<>'') or (Unidade<>'')), ' e ', '')
    
             + Dezena + ifs((Dezena<>'') and (Unidade<>''),' e ', '') + Unidade;
    
    end;
    
    
    
    begin
    
    if (valor>999999.99) or (valor<0) then
    
    begin
    
    msg:='O valor está fora do intervalo permitido.';
    
    msg:=msg+'O número deve ser maior ou igual a zero e menor que 999.999,99.';
    
    msg:=msg+' Se não for corrigido o número não será escrito por extenso.';
    
    showmessage(msg);
    
    Result:='';
    
    exit;
    
    end;
    
    if valor=0 then
    
    begin
    
    Result:='';
    
    Exit;
    
    end;
    
    Texto:=formatfloat('000000.00',valor);
    
    Milhar:=MiniExtenso(Copy(Texto,1,3));
    
    Centena:=MiniExtenso(Copy(Texto,4,3));
    
    Centavos:=MiniExtenso('0'+Copy(Texto,8,2));
    
    Result:=Milhar;
    
    if Milhar<>'' then
    
    if copy(texto,4,3)='000' then
    
      Result:=Result+' Mil Reais'
    
    else
    
      Result:=Result+' Mil, ';
    
    if (((copy(texto,4,2)='00') and (Milhar<>'')
    
       and (copy(texto,6,1)<>'0')) or (centavos=''))
    
       and (Centena<>'') then Result:=Result+' e ';
    
    if (Milhar+Centena <>'') then Result:=Result+Centena;
    
    if (Milhar='') and (copy(texto,4,3)='001') then
    
    Result:=Result+' Real'
    
    else
    
    if (copy(texto,4,3)<>'000') then Result:=Result+' Reais';
    
    if Centavos='' then
    
    begin
    
    Result:=Result+'.';
    
    Exit;
    
    end
    
    else
    
    begin
    
    if Milhar+Centena='' then
    
       Result:=Centavos
    
      else
    
       Result:=Result+', e '+Centavos;
    
    if (copy(texto,8,2)='01') and (Centavos<>'') then
    
    Result:=Result+' Centavo.'
    
    else
    
    Result:=Result+' Centavos.';
    
    end;
    
    end;
    
    
    
    end.

  9. Acho que dessa vez a coisa anda.

    E por fim a coisa deu certo... :D eu que já estava para desistir,mas graças a você Micheus acabou tudo dando certinho.O problema era mesmo na hora de extrair o ano da data no DateEdit...simples B)

    Mais uma vez obrigado e se você precisar de algo...que não seja programação.:D porque ai eu ainda sou muito fraquinho.

    Já agora que terminei o aplicativo,pergunto se você se importa que acrescente seu nome na Form ''Créditos'' você merece.

    Qualquer coisa disponha um Portugués ao seu dispor aqui.

    Abraços

  10. WHERE extract(year from data) = extract(year from :DatReferencia) (com espaço antes do ":")

    eu usei assim e deu o mesmo erro ''Type mismatch in expression EDBEngineError''

    Aqui é desatenção sua. Olhe de novo o post onde passei esta consulta e observe que ainda citei abaixo: "veja que usamos a função date do banco, logo será usada a data corrente."

    E voce colocou lá data, logo é claro que vai listar tudo o que você tiver dentro da tabela.

    eu usei ''date'' e deu erro ''invalid word keyword Token:date.
  11. Eu usei assim e organiza o relatório por ano dá tudo de 2008 e o que tem de 2009.

    mostra tudo o que está gravado e organiza pelo ano.

    SELECT extract(year from data) as Ano, extract(month from data) as Mes, T.*
    from Agenda T
    WHERE extract(year from data) = extract(year from data) 
    Order by 1, 2, Clube,Escalao
    procedure TRelatorio.FlatSpeedButton5Click(Sender: TObject);
    begin
    With Report4 do begin
    Query1.Active := false;
    Query1.Prepare;
    Query1.Active := true;
    QuickRep1.preview;
    end;
    end;
    Mas se usar assim.
    SELECT extract(year from data) as Ano, extract(month from data) as Mes, T.*
    from Agenda T
    WHERE extract(year from data) = extract(year from:Data) 
    Order by 1, 2, Clube,Escalao
    procedure TRelatorio.FlatSpeedButton5Click(Sender: TObject);
    begin
    With Report3 do begin
    Query1.Active := false;
    Query1.Params[0].AsDate := Date1.Date;
    Query1.Prepare;
    Query1.Active := true;
    QuickRep1.preview;
    end;
    end;

    Gera um erro na execução do FlatSpeedButton5Click ''Type mismatch in expression EDBEngineError''

    Aqui o parâmetro ''Query1.Params[0].AsDate := Date1.Date;'' que é um ''DateEdit'' eu pretendia selecionar o ano exemplo '' 2008'' e me mostrava só os registos feitos em 2008 dede Janeiro a dezembro..., se tivesse outra data de 2009 daria tudo só de 2009...só que no DateEdit ele data 03-01-2009 é daqui que extraimos o ano ''extract(year from data) = extract(year from:Data) '' não é verdade?

    Abraço Micheus.

  12. mas você está passando parâmetros para ela? Em qual botão você está fazendo isto?

    Ou, por outro lado, você alterou esta SQL, então por acaso você não esqueceu de alterar a propriedade Params, de modo a ter agora o parâmetro Data, ao invés de DataIni e DataFim?

    Eu mudei o parâmetro Data,mas eu terei que ter sempre uma data...''Query1.Params[0].AsDate := Date1.Date;''

    ou não é preciso?

    O SQL está directo no componente Tquery1.

    SQL
    SELECTextract(year from data) as Ano, extract(month from data) as Mes, T.*
    from Agenda T
    WHERE extract(year from data) = extract(year from date) Order by 1, 2, Clube,Escalao
    procedure TRelatorio.FlatSpeedButton5Click(Sender: TObject);
    begin
    With Report4 do begin
    Query1.Active := false;
    Query1.Params[0].AsDate := Date1.Date;
    Query1.Prepare;
    Query1.Active := true;
    QuickRep1.preview;
    end;
    end;

    Continua a não dar.

  13. procedure TRelatorio.FlatSpeedButton6Click(Sender: TObject);
    begin
    botoes:=Tbotoes.Create(self);
    botoes.show;
    end;

    eu uso uma form para escolher o tipo de Report que se quer.

    E tambem uso uma TQuerry para cada Report.

    Esta é que tá dando erro...

    SQL

    SELECTextract(year from data) as Ano, extract(month from data) as Mes, T.*

    from Agenda T

    WHERE extract(year from data) = extract(year from :Data)

    Order by 1, 2, Clube,Escalao

    Dá erro ''List index out of bounds(1).

    Dá tb a variabe D,M,A ''is declared bat never used in EndOfTheMonth''. ...não é erro perdoe-me sou inesperiente. :wacko:

    FlatSpeedButton4Click é para ver um relatório mas mas não é entre datas.

    Da as variabe D,M,A is declared bat never used in EndOfTheMonth.
    posso remover elas é isso?
  14. unit UnitRelatorio;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      TFlatSpeedButtonUnit, ExtCtrls, yupack, Grids, DBGrids, ComCtrls,Quickrpt,
      StdCtrls, Mask, ToolEdit, TFlatComboBoxUnit;
    
    type
      TRelatorio = class(TForm)
        YusoftWallpaper1: TYusoftWallpaper;
        Panel1: TPanel;
        FlatSpeedButton1: TFlatSpeedButton;
        FlatSpeedButton2: TFlatSpeedButton;
        Date1: TDateEdit;
        Date2: TDateEdit;
        Bevel1: TBevel;
        FlatSpeedButton3: TFlatSpeedButton;
        FlatSpeedButton4: TFlatSpeedButton;
        FlatSpeedButton5: TFlatSpeedButton;
        FlatSpeedButton6: TFlatSpeedButton;
        procedure FlatSpeedButton1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure FlatSpeedButton2Click(Sender: TObject);
        procedure FlatSpeedButton3Click(Sender: TObject);
        procedure FlatSpeedButton4Click(Sender: TObject);
        procedure FlatSpeedButton5Click(Sender: TObject);
        procedure FlatSpeedButton6Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Relatorio: TRelatorio;
    
    implementation
    
    uses Unit1,UnitDM, UnitReport1, Manygrp, Unit3, UnitReport4, UnitBotoes;
    
    {$R *.DFM}
    function StartOfTheMonth(aDate :TDateTime) :TDateTime;
    var
      D, M, A :Word;
    begin
      DecodeDate(aDate, A, M, D);
      Result := EncodeDate(A,M, 1);
    end;
    
    function EndOfTheMonth(aDate :TDateTime) :TDateTime;
    var
      D, M, A :Word;
    begin
      Result := StartOfTheMonth(aDate) +32; // forçamos uma data no mês seguinte
      Result := StartOfTheMonth(Result) -1;  // pegamos o último dia do mês
    end;
    procedure TRelatorio.FlatSpeedButton1Click(Sender: TObject);
    begin
    Close;
    end;
    
    procedure TRelatorio.FormCreate(Sender: TObject);
    begin
    Form1.Enabled:=False;
    DecimalSeparator:='.';
    Date1.Text:=(Datetostr(Date));
    Date2.Text:=(Datetostr(Date));
    end;
    
    procedure TRelatorio.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    Form1.Enabled:=true;
    release;
    end;
    
    procedure TRelatorio.FlatSpeedButton2Click(Sender: TObject);
    begin
    With ManyGrpForm do begin
    RepQuery.Active := false;
    RepQuery.Params[0].AsDate := Date1.Date;
    RepQuery.Params[1].AsDate := Date2.Date;
    RepQuery.Prepare;
    RepQuery.Active := true;
    QuickRep.preview;
    end;
    end;
    procedure TRelatorio.FlatSpeedButton3Click(Sender: TObject);
    begin
    With Report3 do begin
    Query1.Active := false;
    Query1.Params[0].AsDate := Date1.Date;;
    Query1.Params[1].AsDate := Date2.Date;;
    Query1.Prepare;
    Query1.Active := true;
    QuickRep1.preview;
    end;
    end;
    
    procedure TRelatorio.FlatSpeedButton4Click(Sender: TObject);
    begin
    With Report1 do begin
    Query1.Active:=false;
    Query1.Prepare;
    Query1.Active:=true;
    Preview;
    end;
    end;
    procedure TRelatorio.FlatSpeedButton5Click(Sender: TObject);
    begin
    With Report4 do begin
    Query1.Active := false;
    Query1.Params[0].AsDate := StartOfTheMonth(Date1.Date); //eu uso aqui no Report4
    Query1.Params[1].AsDate := EndOfTheMonth(Date1.Date);
    //Query1.Params[0].AsDate := Date1.Date; desabilitado
    //Query1.Params[1].AsDate := Date2.Date; Desabilitado
    Query1.Prepare;
    Query1.Active := true;
    QuickRep1.preview;
    end;
    end;
    
    procedure TRelatorio.FlatSpeedButton6Click(Sender: TObject);
    begin
    botoes:=Tbotoes.Create(self);
    botoes.show;
    end;
    
    end.

    Dá erro ''List index out of bounds(1)

    Voc~e entendeu a ideia é filtrar por ano dar tudo de 2008 sem meter datas.

    Da tb as variabe D,M,A is declared bat never used in EndOfTheMonth.

  15. Select extract(year from data) as Ano, extract(month from data) as Mes, T.* 
    from Agenda T
    where data between :DataIni  and :DataFim
    Order by 1, 2, Clube,Escalao
    Assim dá certinho mas usando os dois dateTimePicker entre datas.
    SQL
    Select extract(year from data) as Ano, extract(month from data) as Mes, T.*
    from Agenda T
    extract(year from data) = extract(year from :Data) Order by 1, 2, NomeClube, NomeEscalão
    Order by 1, 2, Clube,Escalao

    Micheus eu uso o velhinho D3 não tem essa unit DateUtils, assim dá erro ''Invalid use of Keyword. Token: extract(year

    abraço.

  16. Select extract(year from data) as Ano, extract(month from data) as Mes, T.* 
    from Agenda T
    where data between :DataIni  and :DataFim
    Order by 1, 2, Clube,Escalao

    Usando assim este SQL tenho que usar dois DateTimePicker.

    O que eu pergunto é o que posso alterar para que em lugar da busca ser feita entre datas ser feita por ano,como extrair só o ano da DataIni ?? e isto terá que ser alterado...where data between DataIni and :DataFim.

    Eu quero um formulário que consulte o ano sem ter que meter a dataIni em 01-01-2008 e DataFim 31-12-2008 bastava que o dataIni tivesse em qualquer data de 2008 só para extrair o ano.

    Abraço a todos e bom ano.

  17. interface
    
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      Db, DBTables, Grids, DBGrids, ExtCtrls, DBCtrls, ComCtrls, Buttons,
      StdCtrls;
    
    type
      TForm1 = class(TForm)
        DBNavigator1: TDBNavigator;
        DBGrid1: TDBGrid;
        SpeedButton1: TSpeedButton;
        Edit1: TEdit;
        DateTimePicker1: TDateTimePicker;
        DateTimePicker2: TDateTimePicker;
        DataSource1: TDataSource;
        Tabela: TTable;
        RadioButton1: TRadioButton;
        RadioButton2: TRadioButton;
        RadioButton3: TRadioButton;
        RadioButton4: TRadioButton;
        SpeedButton2: TSpeedButton;
        TabelaData: TDateField;
        TabelaHorainicial: TStringField;
        TabelaHorafinal: TStringField;
        TabelaClube: TStringField;
        TabelaEscalao: TStringField;
        TabelaAtletas: TFloatField;
        TabelaEspaco: TStringField;
        TabelaBalneario: TFloatField;
        TabelaUtilizacao: TFloatField;
        TabelaValor: TFloatField;
        TabelaNota: TMemoField;
        TabelaDescr: TStringField;
        SpeedButton3: TSpeedButton;
        procedure SpeedButton1Click(Sender: TObject);
        procedure SpeedButton2Click(Sender: TObject);
        procedure SpeedButton3Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
    
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    uses Unit2, Manygrp, Unit3;
    
    {$R *.DFM}
    
    function SetGlobalEnvironment(const Name, Value: string;
    const User: Boolean = True): Boolean;
    resourcestring
      REG_MACHINE_LOCATION = 'System\CurrentControlSet\Control\Session Manager\Environment';
      REG_USER_LOCATION = 'Environment';
    begin
      with TRegistry.Create do
        try
          if User then { User Environment Variable }
            Result := OpenKey(REG_USER_LOCATION, True)
          else { System Environment Variable }
          begin
            RootKey := HKEY_LOCAL_MACHINE;
            Result  := OpenKey(REG_MACHINE_LOCATION, True);
          end;
          if Result then
          begin
            WriteString(Name, Value); { Write Registry for Global Environment }
            { Update Current Process Environment Variable }
            SetEnvironmentVariable(PChar(Name), PChar(Value));
            { Send Message To All Top Window for Refresh }
            SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, Integer(PChar('Environment')));
          end;
        finally
          Free;
        end;
    end; { SetGlobalEnvironment }
    procedure TForm1.SpeedButton1Click(Sender: TObject);
    begin
        Form2.Query1.Active := false;
        Form2.Query1.Params[0].AsDate := DateTimePicker1.Date;
        Form2.Query1.Params[1].AsDate := DateTimePicker2.Date;
        Form2.Query1.Prepare;
        Form2.Query1.Active := true;
       Form2.QuickRep1.preview;
     end;
    procedure TForm1.SpeedButton2Click(Sender: TObject);
    begin
    ManyGrpForm.RepQuery.Active := false;
    ManyGrpForm.RepQuery.Params[0].AsDate := DateTimePicker1.Date;
    ManyGrpForm.RepQuery.Params[1].AsDate := DateTimePicker2.Date;
    ManyGrpForm.RepQuery.Prepare;
    ManyGrpForm.RepQuery.Active := true;
    ManyGrpForm.QuickRep.preview;
    end;
    
    procedure TForm1.SpeedButton3Click(Sender: TObject);
    begin
        Form3.Query1.Active := false;
        Form3.Query1.Params[0].AsDate := DateTimePicker1.Date;
        Form3.Query1.Params[1].AsDate := DateTimePicker2.Date;
        Form3.Query1.Prepare;
        Form3.Query1.Active := true;
       Form3.QuickRep1.preview;
    end;
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    CreateDir('C:\Temp');
    SetGlobalEnvironment('TMP', 'C:\Temp');
    end;
    
    end.

    Ocolega Churc sugere isto:?

    pra você resolver, se você tiver os sources deste quickreport, procure

    por algo como String[30]e altere para MAX_PATH que é 255, o tamanho máximo permitido para um caminho... String[MAX_PATH];

    Eu não sei onde estão os sources do quickreport no delphi3 :rolleyes: ..???

    eu tentei tb usar a variavel acima mas não sei como usa-la...falta qualquer coisa???

  18. tb tenho outro problema quando a Report passa das 2 paginas gera um erro (Cannot Create file...Metafile is not valid)...? se voltar a aceder ao Report programa bloqueia, que chatice isto das reports
    Estive aqui a fazer uns testes e reparei que no meu Micro funciona tudo lindamente sem erro tenho 1.6GHz e 500 MB Ram mas o CPU vai até aos 97% e fica ali até que fecho o Preview do Report e no outro Micro onde dá erro tem 3.2Ghz e 256 MB Ram acontesse que roda o XP e eu estive a ver na memória disponivel ele tem apenas de 233696 sobra 50896 ou seja 50 MB Ram livres...será isto que faz com que ao criar o Report gera erros e bloqueia o programa...? o Report Preview é carregado na memória quando é chamado..? tenhgo duvida aqui se você Micheus me souber dizer qualquer coisa sobre isto eu agradeço.

    Abraços.

    Aqui tb no - TQRGroup (3º) com a propriedade Expression contendo o campo NomeEscalão se tiver só um registo ele fica com um espaço pequeno mas se tiver 20 e por ai fora ele vai alongando o espaço...? tem maneira de manter sempre com o mesmo espaço mesmo que o numero de registos aumentem? é que assim se tiver 100 ou 1000 registos de um escalão fica um espaço em branco enorme eu já olhei com carinho...e nada .

    Problema tá resolvido olhei com mais carinho e retirei o TQRBand com BandType=rbDetail assim fica sem espaço em branco e o que preçiso mesmo é só a contagem.

    Obrigado Micheus.

    Abraço.

  19. Eu dei a olhada com carinho... se não fosse você estaria olhando o resto da vida...obrigado. E deu certo sumou os valores todos bem, o valor da media não?

    QRLabel1.Caption := FormatFloat('0.00', QRExpr1.Value.dblResult/QRExpr2.Value.dblResult);o valor é 1.00.

    Usei QRExpr2.Expression(AVERAGE) e tá dando a Média,não sei se quando o numero de registos aumentar ele fica bem...espero que sim.

    e tb tenho outro problema quando a Report passa das 2 paginas gera um erro (Cannot Create file...Metafile is not valid)...? se voltar a aceder ao Report programa bloqueia, que chatice isto das reports :wacko: uso este code no botão da report será que está certo ou pode ser mais elaborado ?

    procedure TForm1.FlatSpeedButton19Click(Sender: TObject);
    begin
    with Report2 do begin
    Query1.Active := false;
    Query1.Params[0].AsDate := Form1.DateEdit1.Date;
    Query1.Params[1].AsDate := Form1.DateEdit2.Date;
    Query1.Prepare;
    Query1.Active := true;
    QuickRep1.preview;
    end;
    end;

    Aqui tb no - TQRGroup (3º) com a propriedade Expression contendo o campo NomeEscalão se tiver só um registo ele fica com um espaço pequeno mas se tiver 20 e por ai fora ele vai alongando o espaço...? tem maneira de manter sempre com o mesmo espaço mesmo que o numero de registos aumentem? é que assim se tiver 100 ou 1000 registos de um escalão fica um espaço em branco enorme eu já olhei com carinho...e nada .

    Abraço.

×
×
  • Criar Novo...