Ir para conteúdo
Fórum Script Brasil

Micheus

Veteranos
  • Total de itens

    3.189
  • Registro em

  • Última visita

Tudo que Micheus postou

  1. helena.dm, como você utiliza o DSPack, dê uma olhada neste post que fiz outro dia. O exemplo indicado, que acompanha o DSPack, exemplifica como utilizar os filtros para gravar em outro formato. Veja se é isto que você procura.
  2. Eder, este é o problema típico da "metodologia" que era utilizada para aplicações mono-usuário e que são aplicadas às multi-usuários. Você só deve obter o "código incremental" apenas no momento em que vai gravar a informação. Quando você tem apenas um usuário acessando o banco, sem problemas. Mas, quando mais que um podem iniciar uma inclusão simultaneamente, é garantido que ambos oberão o mesmo valor. Como resultado, o primeiro a gravar, consegue manter o número obtido, mas o segundo tentará gravar um código (chave) que já existe - resultado: "Key violation". Dá uma olhada nestes outros 2 posts que seriam sugestões para contornar a questão: post 1 post 2 Qualquer dúvida extra é só postar aqui. Abraços
  3. robinhocne, o erro já diz tudo: 'QryLoja:Field'Codigo ' not found'destrinchando: QryLoja = sua query em questão, sendo acessada Field 'Codigo ' = campo 'Codigo ' que você deve estar tentando acessar. Neste caso, o espaço em branco no final do campo pode ser o problema, caso você me responda que existe um campo chamado Codigo nesta sua tabela. not found = não encontrado. Evidentemente, no seu componente QryLoja Verifique o que mencionei em negrito.
  4. acho que não mudou muita coisa. Continuou não ajudando muito. :unsure: Normalmente quando você executa o programa "por dentro" do Delphi, após ocorrer uma exceção é comum que o fluxo do programa seja desviado para dentro da IDE do Delphi, e neste caso, o cursor normalmente é posicionado na linha (ou próximo a ela) em que a tentativa de acesso a uma variável gera o erro. Como disse antes: Voce se deu ao trabalho de ao menos verificar isto? (se o objeto vCpo e vVlr estão inicializados) Não é fácil advinhar a causa do erro quando não temos o código. Tem que ter uma pista de onde ocorre o erro. O erro pode ainda estar ocorrendo dentro dos procedimentos AlterarRegistro ou IncluirRegistro. Se você não der uma pista de onde ocorre o erro, não vai dar para ajudar. Voce sabe utilizar Break-points? Se souber, coloque um no início do procedimento e siga executando passo-a-passo até que ocorra o erro. "para adicionar um break-point, você tecla F5 (a linha deve ficar vermelha e um ponto vermelho aparece na margem esquerda do editor). Este procedimento adiciona um Break-point (ponto de parada). Quando você executar seu programa (normalmente via F9), ele irá parar nesta linha no momento em que ela estiver para ser executada. Neste momento você estará devolta a IDE do Delphi e poderá utilizar o avaliador de expressões (diálogo Evaluate/Modify) - tecland CTRL+F7. Na caixa Expression você digita o nome variável/componente que você quer verificar/alterar o conteúdo" Voce poderá verificar se as variáveis citadas estão nulas (nil). Veja o que consegue.
  5. Esse é o erro: robinhocne, por acaso o programa não desvia para linha do erro dentro do editor do Delphi? Seria de mais ajuda. Como esse seu projeto já está "velho" em termos de dúvidas (você já postou outras), eu sei que vCpo e vVlr são listas de strings (TStrings/TStringList). Por acaso elas estão inicializadas? Parece-me que este erro pode der pelo acesso a estas variáveis sem terem sido inicializadas. Dê uma verificada. Pirambu!, se quiser entender um pouco sobre a pergunta, dá uma olhada neste outro post do robinhocne.
  6. Isto foi o que eu li. Será que desaprendi? Eu estou vendo uma declaração de variáveis onde V1 está com "V" maiúsculo, mas também estou vendo um Pos com um "v" minúsculo. Bom, quando eu leio a afirmação: "... está o seu erro | voce definiu V1 maiúsculo" eu entendo que definição neste caso seria a declaração da variável. Não consigo entender outra coisa, então desculpe se não consegui captar sua idéia. como viu, não foi a isso que me referi. apesar de não ser grande coisa, mas depois de mais de uma década de programação pascal, este é o tipo de dúvida que não tenho. ;) Mais uma vez, desculpe se lhe entendi mal. só para completar, pois novatos as vezes entendem o que lêem: TRIM: eliminar os espaços em brancos da string no início e no fim dela apenas (não no meio)
  7. Jonas, estamos falando de pascal (a linguagem), não de C - o fato de a variável ser definida em maiúscula ou minúscula não quer dizer nada.Acho que você se refere ao fato de eventualmente o colega jorge jr ter escrito na fórmula o(s) "V" em caixa alta, daí sim haveria o tal problema. Eu estou achando estranha esta função FindReplace. Eu conheço AnsiReplace e StringReplace que poderiam ser utilizadas. Tenta com StringReplace (unit SysUtils) e veja no que dá:case i of 1 : formula := StringReplace(formula, 'v'+inttostr(i), floattostr(v1), [rfIgnoreCase]); 2 : formula := StringReplace(formula, 'v'+inttostr(i), floattostr(v2), [rfIgnoreCase]); 3 : formula := StringReplace(formula, 'v'+inttostr(i), floattostr(v3), [rfIgnoreCase]); 4 : formula := StringReplace(formula, 'v'+inttostr(i), floattostr(v4), [rfIgnoreCase]); end; Observe que com esta função também não haverá problemas com maiúscula ou minúscula, já que definimos rfIgnoreCase Se ainda houver qualquer erro, por favor coloque a mensagem de erro original. Só vi você falar em erro, mas não achei qual o tal erro. :huh:
  8. Acredito que o questionamento do Jonas é no sentido de você demonstrar como guarda esta informação - isto não está claro. Lendo o tópico desde o início, parece que você tem campos pré-definidos (V1, V2, V3 e V4) em uma tabela e tem outro campo que seria a fórmula, dizendo que e como usar estes campos. Por ex., para o cálculo de um exame X você teria os valores de V1 e V2 V1 = 10; V2 = 20.5; V3 = 0; V4 = 0; Já a fórmula para este exame seria V1 +V2 para o cálculo de um exame Y você teria os valores de V1, V2 e V3 V1 = 14.5; V2 = 50.5; V3 = 15; V4 = 0; Já a fórmula para este exame seria V1 +V2 -V3 Daí o que teria de ser feito é interpretar a fórmula e utilizar os campos. Seria algo neste sentido?
  9. Acho que você pode tentar testar se o controle ativado (ativo) não seja algum dos quais você quer que nada seja feito. Supondo que o seu TDBNavigator tenha o nome DBNavigator1, o código deveria ficar assim:procedure TFormAbaste.DBLookupComboBox1Exit(Sender: TObject); begin if (ActiveControl = DBNavigator1) then Exit; If QVei_Consulta.Locate('PLACA', DBLookupComboBox1.Text,[]) then begin NrPlacaAba := QVei_Consulta.fieldbyname('unidade').asstring; DbCombobox1.field.value:=NrPlacaAba; end; end; Funciona com outros controles, com o DBNavigator eu nunca usei. Abraços
  10. Talvez. Depende de que skin se está falando. Se for da VCLSkin, dá para tentar definir no componente TSkinData (que deve estar adicionado ao form), via sua propriedade Skin3rd (que é uma lista de nomes de classes), a equivalência entre o TPngBitBtn e o TBitBtn. Fica assim, ao final da lista: TPngBitBtn=TBitBtn Se for o caso, é testar para ver se funciona.
  11. tratando especificamente deste problema, e sem alterar outros comportamentos da sua tela, acho que você poderia apenas interceptar as teclas DOWN e UP (no evento OnKeyDown do seu DBGrid) durante a edição ou inserção evitando o efeito mencionado: procedure TBrwTesteDBEdit.DBGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if ((Key = VK_DOWN) or (Key = VK_UP)) and // seta para baixo ou para cima ((Sender as TDBGrid).DataSource.State in [dsInsert, dsEdit]) then // e estando em modo inserção/edição Key := 0; // descarta a tecla end;o código é genérico e pode ser copiado/colado em qualquer outro dbgrid Abraços
  12. Obrigado por compartilhar a solução do problema. Abraços
  13. Só parece complicado - é muito simples! como fazer um order by por um campo (total) que você não tem na sua consulta? Com a sua consulta inicial, no máximo, você conseguiria ordenar os valores para uma mesmo nome. Mas tudo bem. Se eu tiver um tempinho, faço um para você ver que não tem nada de complicado. ;)
  14. Se não me engano, você havia dito que na groopFooter estaria o valor total de fretes daquele cliente, não é? Supondo quea resposta seja sim, então a query naquele formato não vai resultar no que você quer. Eu só vejo uma saída para esta situação - utilizar duas consultas: - uma agrupa os valores pelo nome; - a outra baseada no nome, busca os itens (fretes individuais) Vejamos se consigo exemplificar: SELECT PAGADOR_NOME, SUM(VALOR_FRETE) AS VALOR_FRETE_TOTAL FROM CTRC WHERE REMET_CIDADE = "BLUMENAU" GROUP BY PAGADOR_NOME ORDER BY 2 DESC Esta query agrupará (somará) os fretes de cada pagador e ao final ordenará pela 2ª coluna (o resultado do SUM). Se alguma das outras colunas que eu suprimi aqui, se repetirem para cada linha de registro do pagador, você pode a acrescentá-la aqui, do contrário, terá que trazê-la na outra consulta. Você já deve entender como funciona uma consulta com GROUP BY, não?! Nesta condição (hanking) acho que você poderia colocar o valor total, na mesma banda que o nome do pagador. Isso simplificaria bastante as coisas. Você teria uma banda Detail com o PAGADOR_NOME o valor total VALOR_FRETE_TOTAL. Para detalhar estes pagamentos, você utilizaria a seguinte consulta:SELECT DATA_EMISSAO, SIGLA_CTRC, NUMERO_CTRC, REMET_CIDADE, VALOR_FRETE FROM CTRC WHERE REMET_CIDADE = "BLUMENAU" AND PAGADOR_NOME = :PAGADOR_NOME ORDER BY SIGLA_CTRC, NUMERO_CTRC Veja que nesta consulta é esperado um parâmetro, que não por acaso tem o mesmo nome do campo que iremos buscar na query principal. Esta query deve ser ligada, via propriedade MasterSource, ao datasource da 1ª query. Você então adiciona uma banda SubDetail para mostrar os dados obtidos nesta query e define em sua propriedade Dataset esta segunda query. Como vai funcionar: - ao mostrar seu relatório, você abre as duas queries; - para cada linha na 1ª query (impressa na banda detalhe), a 2ª query obterá o parâmetro da primeira (automaticamente, por isso o nome do parâmetro ser igual ao campo lá obtido) - havendo resultados na 2ª query, seus dados serão mostrados através da banda subdetail. Será que me fiz entender?!
  15. isto parece-me um problema a ser questionado aos responsáveis pelo próprio fotolog. De qualquer modo, estou movendo para uma área mais abrangente por não ter relação com o forum de programação Delphi/Kylix
  16. Dá uma olhada neste outro tópico para ver se você consegue ir a diante => Query.Locate
  17. Micheus

    Tab Por Enter

    se o usuário não quer ter que usar o mouse, diga como utilizar as teclas para se movimentar em uma aplicação Windows:- TAB => Avança próximo campo (tem que cuidar com a definição do TabOrder em sua aplicação) - SHIFT + TAB => Retrocede ao campo anterior em caixas de lista: - ALT + seta para baixo (DOWN) => abre a caixa. Daí é só utilizar as setas (UP ou DOWN), PgUp ou PgDn para navegar na lista. Após posicionado no item tecla ENTER para selecionar. A caixa se fecha - TAB vai avançar. - ALT + seta para cima (UP) => com a caixa aberta, fecha ela. Teclar ESC tem o mesmo efeito. Apenas uma questão de hábito.
  18. R.: Na Group tenho o Pagador_nomena detail tenho somente o campo VALOR_FRETE na footer o totalizar ou seja um Qrexp somando o valor_frete R.: é simples é o nome_pagador na Group e na detail a relação dos valores e na groupFooter totaliza a cada Pagador_nome e na Sumary o total geral....isto então confirma o que eu imaginava que você estivesse fazendo no seu relatório. Pelo seu SQL, a única coisa que deve estar duplicada é PAGADOR_NOME E REMET_CIDADE. O VALOR_FRETE deve ser diferente para cada linha listada - exceto, se por algum problema você tem realmente estes dados duplicados na base:PAGADOR_NOME | REMET_CIDADE | VALOR_FRETE Eder | BLUMENAU | 45,00 Eder | BLUMENAU | 35,00 Eder | BLUMENAU | 53,00 Micheus | BLUMENAU | 45,00 Micheus | BLUMENAU | 15,00 Micheus | BLUMENAU | 23,50 A cidade sempre vai repetir, já que você à utiliza no filtro e o nome repetirá para cada registro de valor frete que existir. Não era este tipo de resultado que você esperava?
  19. Eder, se você tem 3 campos no seu select (PAGADOR_NOME, REMET_CIDADE, VALOR_FRETE), está agrupando por PAGADOR_NOME (GroupBand) e tem uma banda detalhe onde supostamente tem algo nela (suponho: REMET_CIDADE, VALOR_FRETE), parece lógico que se um pagador tiver mais que um registro haja a impressão das respectivas bandas detalhes. - Que informações você tem nas bandas Group, Detail, Footer? - Como deveria ser o lay-out de saída do seu relatório?
  20. Micheus

    Codigo De Barras

    robinhocne, tente novamente fazer o seu login.Pelo menos agora, no seu perfil você já está validado e adicionado ao grupo Membros. Segundo o Admin aparentemente você não acessou o link de ativação da conta que você recebeu por e-mail. Abraços
  21. já que está tentando qualquer coisar, qual a versão do MDAC instalado: - MDAC 2.8 Lost connection bug fixed (ref. SQL Server Data Access Components) se for o caso, MDAC Downloads para baixar o MDAC 2.8 SP1
  22. Micheus

    [resolvido] Gauge

    dá só uma olhada nesta parte do código dentro do loop: If Linhas > 3 then//aqui verifica e desconcidera AS 4 primeiras linhas do CSV if (Copy(Entrada, 1, 1) = '3') then //AQUI CONSIDERA SOMENTE AS LINHAS QUE TEM O CAMPO 1 = 3 begin gauge1.Progress:=80; Table1.Insert;//Abaixo converte pra *.DB..lembrando que antes deve criar o DB no DataBase Você tá definindo fixo: gauge1.Progress:=80; daí não vai dar mesmo :blink: R. Não consigui abrir o que você mandou dentro do zip. :( volta lá no outro post e tenta baixar do link que coloquei.
  23. vms, estive verificando e o problema é que o Locate não é aplicado a campos Memo. Via query, você poderia utilizar o LIKE, mas a consulta é case-sensitive (difere maiúscula de minúscula) e não dá para utilizar a função UPPER sobre o memo: Acho que você teria que utilizar outra abordagem.
  24. Micheus

    [resolvido] Gauge

    tá parecendo que você já começa com algum valor em progress. acho que uma coisa que você ainda precisa fazer é, após a linha Table1.Next (dentro do loop), adicionar a linha Application.ProcessMessages. Quando você faz um loop desta grandeza, o sistema praticamente para de processar mensagens, como WM_PAINT que resultará na repintura dos componentes, neste caso, prejudicando a atualização visual da barrinha do Gauge. De qualquer modo, talvez fosse conveniente você colocar o seu código atualizado para uma avaliação. Dê uma olhada neste (download) exemplo para ver se você compreende o que digo.
  25. Cautela nesta informação. Se a versão do quickreport que o colega an_cp utiliza é a Standard (versão 3) não dá suporte à exportação para Excel - veja este outro post Abraços
×
×
  • Criar Novo...