Ir para conteúdo
Fórum Script Brasil

Micheus

Veteranos
  • Total de itens

    3.189
  • Registro em

  • Última visita

Tudo que Micheus postou

  1. se é na pasta do próprio executável que o chamará, você pode simplesmente passar o nome do mesmo para a função WinExec: WinExec('root.exe', SW_SHOWNORMAL); quando não é informado o path, a função fará a busca na seguinte ordem (conf. help): 1. The directory from which the application loaded. (onde o seu exe foi carregado) 2. The current directory. (no diretório corrente) 3. The Windows system directory. (pasta do sistema System32) 4. The Windows directory. (pasta do windows) 5. The directories listed in the PATH environment variable. (diretórios listados na variável PATH) Abraços
  2. Alan, este DM, seria referente a DataModule? Não estou vendo relação com o tópico em que você postou, assim, após sua resposta estarei separando seu post do tópico (criando um tópico para esta sua dúvida), e então você deve procurar no índice do forum por um tópico de sua autoria. Abraços
  3. Apesar de resolvido o tópico, vou alongar mais um pouquinho, esta discussão, porque acredito que seja útil. robinhocne, para ser sincero, eu diria que nem deste modo deveria ter funcionado. Sempre que você usa uma função de agregação (SUM, COUNT, MIN, MAX, AVG) você tem que declarar a cláusula GROUP BY, onde os campos que a seguem são todos aqueles outros declarados na cláusula SELECT (quando houverem), exceto os utilizados pela função. Lembrando a mensagem que você citou: "invalid expression in the ORDER BY clause ( not contained in either aggregate function or the group by clause )" Veja que ela aponta um erro na cláusula ORDER BY, citando: "expressão inválida na cláusula ORDER BY" e complementa com: "não contida em qualquer função de agregação ou na cláusula group by" Ou seja, a mensagem sugere que você não teria usado campos na cláusula ORDER BY que fossem qualquer um das colunas em que a função de agregação foi usada ou que, pelo menos, fosse um dos campos contidos na cláusula GROUP BY - a qual você não declarou. Resumindo, sua consulta eventualmente pode estar "funcionando", mas não está de acordo com o padrão. Ficam aqui exemplos de algumas situações possíveis: 1) Exemplo de ORDER BY com usando campo de agregação - sem cláusula GROUP BY: select count(JOB_CODE) Qtd_Job, max(MAX_SALARY) Tot_Salary from JOB order by Qtd_Job note que neste caso não se fez necessário o uso de GROUP BY, porque só temos funções de agregação na cláusula SELECT e o ORDER BY será aceito porque faz referência a uma coluna que é uma das funções. A verdade é que apesar de funcionar, na prática não há utilidade porque não haveria o que ordenar, já que o resultado será apenas uma única linha. Mas, ao utilizar a cláusula GROUP BY, já teríamos mais linhas como resultado. 2)Exemplo de ORDER BY usando campo de agregação e agrupamento de valores com o uso de GROUP BY: select count(JOB_CODE) Qtd_Job, max(MAX_SALARY) Tot_Salary from JOB group by JOB_COUNTRY, JOB_GRADE order by JOB_COUNTRY agora estaremos usando, na cláusula ORDER BY, um campo declarado na cláusula GROUP BY e que não aparece na cláusula SELECT. Note também, que estamos agrupando o resultado por campos que não declaramos na cláusula SELECT, porém, a recíproca não é verdadeira. Ao declarar campos na cláusula SELECT, estes deverão ser declarados na cláusula GROUP BY! 3)Exemplo de ORDER BY com campo de agregação e outros para o agrupamento: select count(JOB_CODE) Qtd_Job, max(MAX_SALARY) Tot_Salary, JOB_COUNTRY from JOB group by JOB_COUNTRY, JOB_GRADE order by Tot_Salary descnesta situação, usamos a coluna referente a função de agregação declarada na cláusula SELECT para a ordenação das informações. As consultas exemplo, tem apenas função didática, e você pode testá-las usando o banco EMPLOYEE (um db de teste que acomampanha o IB e FB). No FB, normalmente é instalado na pasta: C:\Arquivos de programas\Firebird\Firebird_2_0\examples\empbuild\EMPLOYEE.FDB Abraços
  4. Na minha opnião, se vai começar, seria mais interessante usar logo os componentes Interbase (paleta IB) que são compatíveis. Assim, você usará a biblioteca client para acessar o FB e não um drive ODBC - que sabidamente, não tem o mesmo desempenho. Abraços
  5. robinhocne, você poderia colocar aqui a SQL que estava causando o erro (com o order by e tudo o mais)? Qual a versão do Intebase que você usava? (seria 7 ou posterior) Qual a versão do Firebird? (seria a 1.5)
  6. Micheus

    Ajuda com gráfico

    Bem, eu disse que era um esqueleto e acabei assumindo que você conseguiria ir completando o que faltava... O erro com o Mod é que acabei esquecendo de por justamente como deve ser o resultado para mostrar que é um número divisível pelo informado. Mude de: if (VlTempo mod VlTempo2) and (Pontos > VlFinalDescida) then if (VlTempo mod VlTempo2) and (Pontos > VlFinalDescida) then para: if ((VlTempo mod VlTempo2) = 0) and (Pontos > VlFinalDescida) then if ((VlTempo mod VlTempo2) = 0) and (Pontos > VlFinalDescida) then é como o K!ko disse.Eu não sei qual a condição... É com você. Abraços
  7. Micheus

    Ajuda com gráfico

    VDLR, eu também fiquei meio :wacko: Então, vou por aqui apenas um esqueleto do que você citou, mas já dará para você saber como você poderia adicionar valores à série em run-time, bem como remover e adicionar a série. Coloque apenas um componente TChart no seu form, os edits e um botão (foi como comecei): procedure TForm1.Button1Click(Sender: TObject); var Idx :Integer; ... VlFinal, VlFinalDescida, VlTempo, VlTempo1, VlTempo2, VlSubida, VlDescida, Pontos :Integer; LineSerie :TLineSeries; begin // libera qualquer série alocada para o TChart for Idx := 0 to Chart1.SeriesList.Count -1 do Chart1.Series[Idx].Free; // elimina séries da lista do TChart Chart1.SeriesList.Clear; VlFinal := StrToInt(Edit2.Text); VlSubida := StrToInt(Edit3.Text); VlTempo1 := StrToInt(Edit4.Text); VlDescida := StrToInt(Edit6.Text); VlTempo2 := StrToInt(Edit7.Text); VlFinalDescida := StrToInt(Edit8.Text); ... // inicializações outras variáveis VlTempo := 0; // início do tempo Pontos := 0; // criação da série do tipo Linha LineSerie := TLineSeries.Create(Self); repeat Inc(VlTempo); if (VlTempo mod VlTempo1) and (Pontos < VlFinal) then Pontos := Pontos +VlSubida; if (VlTempo mod VlTempo2) and (Pontos > VlFinalDescida) then Pontos := Pontos -VlDescida; LineSerie.AddXY(VlTempo, Pontos); // parâmetros: X, Y[, label][, cor] until <condição>; // adiciona a série ao TChar, mostrando-a ao usuário Chart1.AddSeries(LineSerie); end; tem a questão da permanência que eu não entendi direito (imagino que permaneça apenas quando atingir o topo, e não processe os outros tempos neste período), bem como se ao avaliar o tempo1, se poderá avaliar o tempo2 também (com isso, pode ocorrer se somar e em seguida diminuir) Mas se pintar dúvida a gente tenta ajudar. Abraços
  8. João Paulo Taraciuk, com essa, aprendi mais uma. :D Esta "limitação" com o QRExpr eu não tinha pego. Como eu estava imaginando, por algum motivo a banda group não estava sendo reprocessada, ou seja, ela era impressa a primeira vez e não era reavaliada quando da mudança de Mes. O que ocorreu é que o tipo de dados retornado pelo uso da função extract com o MySQL, ou reconhecido pelo Zeos (TLargeIntField), não é reconhecido pela rotina de avaliação da expressão no QRExpr. Digo "com o MySQL", porque ainda não tinha passado por isto com o FireBird (com o Zeos, seria um TSmallField) e Paradox (o exemplo no meu post anterior - TFloatField) - ver figura anexa. Fica a dica, de quando adicionar um campo ou expressão, na propriedade Expression, utilizar o botão Validate para verificar se está tudo ok mesmo. ;) A solução então é usar outra abordagem e fazer uso de funções que você encontra no MySQL (isto minimiza a portabilidade). No caso, passaremos a usar um campo tipo varchar ao usar a função de formatação de data: date_format (ref. documentação MySQL) %m = mês formatado com duas casas (ex.: 01, 04, ...) %d = dia formatado com duas casas (ex.: 02, 09, ...) esta formatação(com duas casas) é necessária para a correta ordenação, do contrário 12 viria antes de 2. Assim, a consulta SQL deverá ficar assim: select date_format(nascimento, "%m") as Mes, date_format(nascimento, "%d") as Dia, nome, nascimento from clientes order by 1, 2 Voce deve substituí-la no seu código e, principalmente, no componente. Inclusive, faz-se necessário que você remova os campos do seu componente e os adicione novamente para que o tipo dos fields seja alterado. Da forma como está esta consulta (sem parametrização), não seria necessário você inicializar a propriedade SQL via código (como você faz), porque ela não mudará em relação a que você adicionou em design-time na propriedade SQL. Abraços
  9. Micheus

    Ajuda com gráfico

    VDLR, esse valor inicial e final não estariam trocados no seu exemplo ou você falou do gráfico em ordem inversa de tempo (esquerda 10min -> direita 0min)? Essa variação (subida e descida) obedece a que critério? É para gerá-los aleatoriamente? Abraços
  10. Micheus

    duvida com QuickRep

    vms, dê uma olhada neste meu post
  11. não estou certo de que a mensagem tenha relação com o "comflito", mas em todos os casos... experimente:- feche seu aplicativo Delphi; - desinstalar o IB e o Firebird; - procurar na pasta c:\windows\system32 pelo arquivo GDS32.DLL e tente apagá-lo. Se não for possível, reinicie o computador após ter desinstalado os servidores dos bancos, e tente removê-lo novamente; - instale o Firebird (de preferência uma versão compatível com a dos seu cliente) e no processo de istalação, haverá uma opção a ser marcada que fará com que seja gravada na pasta system32 uma versão de retro-compatibilidade com o IB (ou seja, será gravada uma cópia da FBCLient.DLL com o nome GDS32.DLL). Neste "manual" que coloquei neste post tem referência a ela (se não me engano). Qual componente que você usa para fazer acesso ao banco? Se forem os da paleta IB não haverá qualquer problema, visto que ele acessa a GDS32.DLL (que você acabou de criar). OBS: Quando for feita uma troca de versão do FB 1.5 para 2.0 ou 2.1, por exemplo, antes de desinstalar uma versão e instalar a nova, é conveniente fazer o backup - via gbak.exe ou IBExpert gerando o .fbk que pode posteriormente ser restaurado.
  12. nicholasbgr, se você observar o sumário dos dois livros (quadro abaixo) verá que "aparentemente" há pouco em comum, isto porque nenhum deles é completo (100%). Ao meu ver, todos os tópicos são importantes (dos dois juntos) e poderão lhe dar condições de desenvolver-se em termos de programação. Essa é a atual vantagem do uso da net - você acha um pouco de tudo e monta um material de estudo bastante "completo". Qualquer livro que você for comprar, tente dar uma olhada no seu conteúdo antes - não compre às cegas. Tem livro que tem tópicos interessantes e, no entanto, o conteúdo é praticamente uma referência - explica muito pouco. Aprendendo a Programar em PascalPascal e Técnicas de Programação1. Conceitos Básicos da Linguagem Pascal2. Saída de Dados 3. Tipos de Dados 4. Entrada de Dados 5. Operadores 6. Estruturas Condicionais 7. Estruturas de Iteração 8. Modularização 9. Manipulação com Vetores 10. Ponteiros ou Apontadores 11. Estruturas de Dados 12. Manipulação com Arquivos 13. Trabalhando com Janelas e Efeitos Gráficos 14. Estudos de Casos Resolvidos 15. Exercícios 1. Ambiente de Programação2. Programação e Solução de Problemas 3. Noções Básicas de Programação 4. Componentes Básicos de um Programa Pascal 5. Áreas de um Programa Pascal 6. Estruturando o Programa 7. Estruturação de Dados 8. Tipos Estruturados 1 – Array e String 9. Tipos Estruturados 2 - Record 10. Tipos Estruturados 3 - File 11. Tipos Estruturados 4 - Set 12. Procedimentos e Funções com Parâmetros 13. Estruturas de Dados Dinâmicas – Pointer 14. Projeto e Depuração de Programas Abraços
  13. Micheus

    Programa em c

    Jefferson, uma simples busca pela palavra menu lista este tópico (entre outros): Calculadora...; Já se buscar por Calculadora encontrará outros. Use o botão Pesquisar para ver os outros posts. ;)
  14. Acho que esta parte do enunciado pode ajudar a compreender a dúvida do colega, com relação a implementação: Neste problema você deverá fazer um programa que recebe uma matriz quadrada An x n de números inteiros e verifica se a matriz é inca, ou seja, se partindo do canto superior esquerdo da matriz, no sentido horário, em espiral, a posição seguinte na ordem é o inteiro consecutivo da posição anterior. (ref. Maratona de Programação - IME-USP)
  15. Milton, faltou algo: "Como seria de fosse de 0 a ?????, ..."até 1? float num_rand_0_1; num_rand_0_1 = rand() / (RAND_MAX *1.0); RAND_MAX *1.0, tem como objetivo gerar um valor float para a operação; rand() gera números entre 0 e RAND_MAX (que é 32767). Assim, se rand() gerar 0 você terá como resultado da divisão 0, bem como, se gerar 32767, o resultado será 1. Outros valores irão gerar os valores intermediários. neste caso, acho que bastaria não permitir que o valor gerado seja 0.Com o uso de random(int <valor max>) daria para contornar isto: num_rand_0_1 = (random(RAND_MAX -1) +1) / (RAND_MAX *1.0); random(RAND_MAX -1), gera um número entre 0 e 32766. ao somarmos +1, passamos a gerar entre 1 e 32767. Com isto, qualquer valor dividido por RAND_MAX não irá gerar um 0 (zero). Espero que seja isto. Abraços
  16. Este download é feito com um programa desenvolvido por você? Se não for, qual é o programa?
  17. Não seria este o caso.Há algo errado sem dúvidas. Vou tentar pensar em algo mais que possamos verificar. Abraços
  18. Clarissa, parece que você não está filtrando os dados neste segundo form. Ao que parece-me, o dataset usado neste segundo form deveria estar vinculado ao campo referente ao horário que você selecionou antes. Seria útil você dar nome aos datasets, bem como seus tipos (table, query) e campos de relacionamento, para facilitar qualquer tipo de explicação. Abraços
  19. Vamos nós denovo. :) Veja este exemplo anexo - é o básico do básico. Compare com o que você tem, porque tem que funcionar. Abraços Relatorio_Aniversario.zip
  20. Bom, em termos de html, você poderia simplesmente definir a propriedade align com justify:<P align=justify> .....</p> mas da forma está sendo implementado no tutorial, você teria que descobrir qual seria o identificador correto (a constante). Baseado na definição das constantes lá, eu arriscaria tentar usar o valor 58 como sendo o justificado - dá uma testada, vai que funciona: IDM_CENTRALIZAR = 57; IDM_JUSTIFICAR = 58; IDM_ALINHARESQ = 59; IDM_ALINHADIR = 60; Se não funcinar, envie um e-mail para o autor do tutorial (tem e-mail lá no tutorial) que é mais provável que ele já saiba a resposta. Abraços
  21. NoBe, experimente: printf("\na = %02d, b = %02d\n\n", a, b); O 2 indica o tamanho (mínimo) de casas com que o número será formatado, enquanto o 0 indica que este será o caracter a ser utilizado no preenchimento (à esquerda) quando for necessário completar o tamanho especificado (do contrário, seria espaço). você encontra esta informação no help se teclar F1 em printf, mas pode também dar uma olhada neste link. Abraços
  22. webdeveloper, parabéns e seja bem vindo ao grupo.
  23. Marcos Santana, avaliar a situação, implicaria em implementar o código e depurá-lo e eu pelo menos não poderia ajudá-lo agora. Mas, deixo aqui uma sugestão de outra rotina em que inclusive é muito similar a do word, visto que mostra ao usuário as sugestões de alterações, e ao meu ver melhor codificada: Spell Checking from Delphi code using MS Word (ref. About.com - site muito bom) - o projeto pode ser baixado na última parte do tutorial. Para quem quiser testar, há no site Delphi3000 um componente que faz uso do mesmo recurso: VCL MS Word Spell Check and Thesaurus OBS: Se precisar traduzir as mensagens do Alemão para Inglês (e depois para o Português), você pode usar o AltaVista - Babel Fish. Abraços
  24. Marcos Santana, no caso do Access e Paradox, quanto maior o banco (e este já está bem grandinho) pior o desempenho.Talvez algo que você possa verificar no sentido de tentar minimizar um pouco esta demora, é verificar se há índices para os campos de pesquisa. Utilizar a opção de compactação do banco (Ferramentas->Utilitários de banco de dados->Compactar e corrigir banco de dados...). Como disse o Jhonas, você pode fazer uma aplicação em Delphi, utilizando ADO, para acessar os dados.Mas, não há como fazer uma aplicação para avaliação "métrica" do desempenho do banco Access. (nunca ouvi falar nesta possibilidade para o access. Talvez você devesse questionar na sessão Banco de Dados -> Access) Abraços
×
×
  • Criar Novo...