Ir para conteúdo
Fórum Script Brasil

Micheus

Veteranos
  • Total de itens

    3.189
  • Registro em

  • Última visita

Tudo que Micheus postou

  1. Micheus

    Commit

    ou seja, você está acessando apenas dados "commitados". não saberia explicar exatamente, mas o ambiente mono-usuário pressupõe que apenas uma pessoa está alterando a informação num dado momento. Em "bancos" como paradox, por exemplo não existe implementações sofisticadas como a de verdadeiros Sistemas Gerenciadores de Bancos de Dados (SGBD), onde há recurso que possibilitam e gerenciam a alteração de um mesmo registro por n usuários. eu diria que fica a seu critério. Isto porque se você não o fizer, os componentes em uso automaticamente o farão. Entretanto, nada impede que em situações específicas, você inicie uma nova transação. esta configuração é importante.Dê uma olhada nos posts abaixo. São referentes a esta questão: Atualização De Registros, BD Firebird MDO Transação (a config. da transação é idêntica. MDO é um componente compatível com os da paleta IB, mas otimizado para Firebird) Também tem um artigo sobre o assunto que pode ser interessante ler: "Entendendo os tipos e configurações das transações" (Autor: Claudio Valderrama; Tradução/Adaptação : Carlos Henrique Cantu - FireBase) Obs: Como é necessário registrar-se no site FireBase para acessá-lo, vou deixar uma versão em PDF neste link Abraços
  2. Micheus

    Commit

    Acho que podemos dizer que o post grava as informações alteradas até sua chamada, entretanto a efetiva gravação no banco de dados, ocorre quando você "commita" a transação.Voce precisa utilizar os dois comandos. Mas observe que você pode definir no seu componente TBTransactin que a transação será comitada automaticamente (propriedade AutoCommit = True), bem como definir qual será o tipo de ação padrão (propriedade DefaultAction), normalmente TACommit ou TACommitRetained. Jhonas, apenas cuidado para não confundir o colega. Você esta exemplificando com ClientDataSet (CDS) que chama ApplayUpdates com parâmetros, enquanto o colega programador c++ utilizar componentes IBTable que poderia chamar este método, mas sem parâmetros. Lembrando ainda que, para utilizar ApplayUpdates, deveria ser habilitada a propriedade CachedUpdates do dataset.
  3. Comigo, continua retornando certo. Agora, este código coloca 7 no label. Label1.Caption := IntToStr(MonthsBetween(StrToDate('01/07/07'), StrToDate('31/01/08'))); Você não poderia colocar parte do código onde você manipula a função e/ou variáveis? Parece que há algo no seu código, já que no post inicial, deveria retornar 6 e você obtinha 7; no segundo post, deveria retornar 7 e você diz obter 8... De qualquer modo, esta função retorna uma aproximação. Veja o que diz o help: "Because months are not all the same length, MonthsBetween returns an approximation based on an assumption of 30.4375 days per month. Fractional months are not counted. Thus, for example, MonthsBetween reports the difference between Feb 1 and Mar 1 as 0." traduzindo: Pelo fato de os meses não terem o mesmo número de dias, MonthsBetween retorna uma aproximação baseada em uma média - 30.4375 dias por mês. Fração de meses não são contados. Assim, por exemplo, MonthsBetween retorna a diferença entre 1 de Fev e 1 de Mar como 0 (zero). E isto pode realmente gerar algum transtorno. Para contar dias entre duas datas, você pode utilizar a função que o colega Jhonas citou antes. Mas se for para contar apenas meses, seria o caso de retornar lá na função apenas o valor da variável Mes. Ainda assim, você deve verificar se você pretende fazer algum arredondamento. Por ex. 3 meses e 20 dias, você poderia querer considerar 4 meses. Neste caso, outras avaliações se fazem necessárias.
  4. Micheus

    Relatórios

    não tenho 100% de certeza de que daria para aplicar o exemplo ao pé da letra - talvez o paulobergo posso ajudar. Mas, a princípio, a seria uma questão de filtrar o período de 1 ano, no lugar de 1 semana. Agrupar por mês, ao invés de dia. usando o SUM e agrupando pelo período correspondente ao mês (de 1 a 30 ou 31 - ou 28/29 em fev). dependendo que que banco de dados está utilizando tem uma função/instrução para isto.Qual bando de dados você está utilizando?
  5. aqui, este código coloca 6 no label: Label1.Caption := IntToStr(MonthsBetween(StrToDate('01/07/07'), StrToDate('31/12/07')));
  6. robinhocne, em algum momento estas informações são preenchidas certo?! ... LancamentosCodigo .Value := LancamentosStatus.Value := LancamentosParcelas.Value := LancamentosVencimento.Value := LancamentosValor.Value := LancamentosEmissão.Value := Date; ... Esta tabela Lancamentos parece ser um "header", então as parcelas serão geradas e armazenadas em que tabela? este dia de vencimento a partir do qual você quer gerar os vencimentos, não será informado pelo usuário?Por acaso você queria que fosse informado algo como vencimento todo dia 10 do mês? Se os vencimentos calculados, cairem em num final de semana, o vencimento deverá ser alterado para o próximo dia útil, é isto?
  7. Pedro Paulo Deola, experimente acessar no menu "Component"->"Install Packages...", então, na janela que aparece clique em "Add..." e localize a pasta Delphi7\Bin. Deveria existir nesta pasta o arquivo dclbde70.bpl. Caso exista, selecione-o e tecle ENTER (ou botão Abrir), depois clique em "OK" e a paleta já estará disponível.
  8. gleistoncardoso, duas perguntas:1) No word 2007 também funciona corretamente, como funcionava no 2003? 2) A localização da tabela é a mesma da do documento do word?
  9. samuelsjn, você não informou como está utilizando este valor no programa, mas imagino que você esteja concatenando strings da instrução SQL com os edits. Neste caso você tem algumas opções: 1) fazer uso da função de formatação na instrução SQL do PostGres, apontada pelo colega Jhonas - to_number; 2) formatar o texto antes de concatenar. Neste caso, seguindo o que você disse, seria necessário apenas remover os pontos (".") que possam existir, de modo que haverá, no máximo, uma vírgula a qual será tratada como separador de decimal. Um ex.: ... SQL.Add('Values(212121, '+ StrToFloat(StringReplace(Edit1.Text,'.', '', [rfReplaceAll]) +', 12/10/2007, "BATATINHA", 23'); ...Observe que substituimos o '.' por '' (nulo, ou seja, nada - que resulta em sua remoção). Assim, um número digitado neste formato "12.462.456,90", antes da conversão, ficaria assim "12462456,90", o qual não resultaria em erro. 3) utilizar parametrização, ao invés de concatenação. Abraços
  10. Micheus

    Commit

    programador c++, tentando completar o que o colega Jhonas já postou, teria a acrescentar que: - basicamente, a questão seria sobre usar Commit e CommitRetained, já que estou quase certo de que você tenha associado seu componente TIBTransaction (Transacao) à propriedade DefaultTransaction do seu IBDataBase ou, pelo menos, à propriedade Transaction de seus componentes datasets (TIBQuery, TIBTable, ...). Deste modo, chamar o método a partir de Transacao ou utilizando a propriedade Transaction do seu dataset, seria a mesma coisa. Exceto no caso do uso de múltiplas transações (TIBTransaction); - A verificação se há ou não uma transação em andamento é feita através do teste de Transacao.InTransaction; - Se você quiser "commitar" uma informação e continuar alterando o mesmo registro (sem iniciar uma nova transação), você utiliza CommitRetained.
  11. Eduardo Mendes, caso seu interesse não seja a execução de macros do Access ou Word, talvez um componente que possa ser útil chama-se Pascal Script (freeware). Veja este post na seção Links.
  12. Micheus

    Delphi 4

    Bruno, você também pode dar uma olhada neste post - Seleção DBGrid
  13. tux_boy, você pode começar por habilitar a propriedade KeyPreview (true) do form da sua calculadora. Isto fará com que todos os eventos resultantes do pressionamento de uma tecla, sejam enviados primeiro para o respectivo tratador de evento do form: OnKeyUp, OnKeyDown, OnKeyPress. No evento OnKeyPress o parâmetro recebido é um caracter (ascii), já nos outros dois eventos o parâmetro é um WORD (virtual key code) Para sua aplicação, acredito que utilizar OnKeyPress, seria uma boa opção, pois você poderia testar o código ascii diretamente (Key = '+') em um if ou em um case tipo: case key of '+' : ... '-' : ... '*' : ... '/' : ... end; A título de informação fica um link para a tabela de códigos virutais Virtual Key Codes (ref. About.com) Tem um post não muito antigo com links de calculadoras em delphi caso lhe interesse - post Abraços
  14. gilsonlongo, o motivo para isto acontecer é bem evidente. Observe que você está sempre imprimindo a informação na posição X=0 e Y=100:(...) Printer.Canvas.TextOut(0, 100, Query1.FieldByName('ref').AsString + (...) Tem como fazer a coisa funcionar corretamente, mas a questão é: vale a pena? Por que você não utiliza um gererador de relatórios como o QuickReport (ou outro de sua escolha) que já possuem toda a configuração necessária para gerenciar avanços de linha e de página, além de outras características? Abraços
  15. O que você imagina que deva acontecer no uso de enabled da tabsheet? Eu tenho usado e o que ocorre é que eu posso selecionar entre as várias disponíveis (até as desabilitadas), mas não consigo mover o foco para qualquer item dentro dela. Uso simplesmente nomedatabsheet.enabled := false (ex. TabSheet1.Enabled := False) Agora se você espera que estando desabilitada, não seja possível o usuário clicar e visualizar ela, então será necessário algum outro artifício.
  16. José Luiz, o caminho é por EditMask e DisplayFormat mesmo. Primeiro, no caso de máscara do tipo '9999-9999', você tem que ver como é que está esta informação gravada no seu banco. Supondo que já hajam dados, se as informações incluem a formatação (caracteres como "-", "/"), você deverá informar na máscara que eles devem ser gravados no banco (isto pode influenciar no resultado). Observe que a string de formatação que você usou está incompleta, ela deveria ser '9999-9999;0;' (não grava máscara) ou '9999-9999;1;' (grava máscara). No field que você utilizar o EditMask, se não estou enganado você não precisa definir DisplayFormat.
  17. beleza churc...... e se a gravação fosse na unidade D: ...... posso usar o mesmo sistema? ou a coisa complica? ranilson, como você pode observar o path indica a unidade C:, não é mesmo, então, se você quiser trocar por D: ou F: não haverá qualquer problema.Único problema que você poderia ter é se tentar enviar para uma unidade CD-ROM, onde ela não pode grava nada (uma CD-RW, sim), mas daí são outros quinhentos... Abraços
  18. Foi observado por um colega que para o funcionamento da function IsAdmin é necessário declarar as constastes abaixo: const SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5)); SECURITY_BUILTIN_DOMAIN_RID = $00000020; DOMAIN_ALIAS_RID_ADMINS = $00000220; conforme ref. DelphiTricks.com
  19. sobre esta consulta. Para tentar exemplificar o relatório, é preciso saber: - em que campos estão armazenados os dados referentes a Data e Hora, que campo será colocado na intercessão de ambos (lá onde tem os quadrinhos com 1)? - o relatório terá a seqüência de horas fixa, tipo 08:00, 09:00, 10:00, 11:00, 12:00, 14:00; ou apenas nas horas que tiverem registros? - haverão vários registros para mesma data e hora, ou será apenas 1? - Estão nos Campos da Tabela de Praticas. - Sim Ter que ser de horas fixa. - Será Apenas Um registro. roginhocne, observe que eu perguntei o nome dos campos - "em que campos estão" não "onde os campos estão". (eu lá vou saber o que você tem dentro da tabela Práticas <_<) Eu entendi e até poderia ser uma opção, mas não resolve todos os problemas, se você tiver que gerar uma linha de hora em hora.Vai funcionar bem para o caso de listar apenas as horas que estiverem "ocupadas". Qual sua necessidade? 08:00 xxxx 09:00 sssss 10:00 <nada aqui> 11:00 rrrrr ou 08:00 xxxx 09:00 sssss 11:00 rrrrr paulobergo, acho que esta opção pressupõe uma situação em que hajam poucas consultas deste tipo, já que, dependendo do número de informações, vai fazer o banco trabalhar muito (servidor). Este exemplo pode ser bem aplicado no caso do VLDR (já fiz uma referência no post dele)
  20. Micheus

    Relatórios

    VLDR, dê uma olhada neste post do colega paulobergo. Mesmo em Paradox (não sei se é seu caso) deve funcionar, porém você não utilizará uma data fixa, mas sim um período (between) equivalente ao início e fim do mês. Veja se você consegue entender a lógica da consulta. Isto facilitaria muito o seu relatório.
  21. Micheus

    Relatórios

    é um tipo de relatório chato de fazer com o quick. Na verdade, relatórios deste tipo não são muito simples com a maioria dos geradores de relatórios. O meio que vejo, implica em ter um certo limite no número de colunas, então, vai a pergunta: qual seria o provável número máximo de colunas que este relatório teria? (imprimindo em landscape acredito que dê para um ano.) Se não puder limitar, a coisa complica um pouco.
  22. Isto vai longe... Vamos tentar começar. ;) sobre esta consulta. Para tentar exemplificar o relatório, é preciso saber: - em que campos estão armazenados os dados referentes a Data e Hora, que campo será colocado na intercessão de ambos (lá onde tem os quadrinhos com 1)? - o relatório terá a seqüência de horas fixa, tipo 08:00, 09:00, 10:00, 11:00, 12:00, 14:00; ou apenas nas horas que tiverem registros? - haverão vários registros para mesma data e hora, ou será apenas 1?
  23. robinhocne, se você quer um exemplo mais específico, seria melhor você especificar:- banco de dados utilizado; - componente de acesso ao banco (ADO, DBE, DBExpress,...) - Nome das tabelas envolvidas (há uma que você define a qtd da parcela, mas dever haver a outra que corresponde às parcelas), bem como campos. O que o colega Vivendo&Aprendendo colocou é o básico da coisa, não tem mistério, você vai ter que adicionar um registro na tabela das parcelas para cada enlace do for.
  24. Livio Neiva, o erro é porque em DataModules não é adicionado por padrão a unit Forms (onde Application está declarada) na cláusula uses. Apenas adicione ela.
  25. Pirambu!, acredito que você possa utizar no evento OnShow do TabSheet. Se você ainda vai manter o botão então, no evento OnShow você coloca: Button1.Click; Se não vai mais utilizar o botão, então coloca todo o código neste evento. Como eu disse lá no outro post, o procedimento não deve estar 100% a prova de falhas, mas se você manter o critério da ordenação e sequências das chamadas a InsertNode, tudo deve funcionar perfeitamente. Abraços
×
×
  • Criar Novo...