Ir para conteúdo
Fórum Script Brasil

SCIENTIST

Membros
  • Total de itens

    67
  • Registro em

  • Última visita

Tudo que SCIENTIST postou

  1. Estou utilizando um relacionamento Master-Detail de Vendas (Master) com Serviços e Pagamentos (tabelas Details), utilizo o TClientDataSet configurado para o commandType = ctQuery, tenho aproximadamente 20K de Vendas, sendo que cada Venda tem vários produtos e pagamentos. Trabalho da seguinte forma: Eu tenho Querys prontas parametrizadas e apenas utilizo elas quando necessário, ex: clientDataSet.close; clientDataSet.commandText := FIND_BY_COD_VENDA; clientDataSet.Params.paramByName('cod_venda').AsInteger := 134; clientDataSet.open; Ocorre que como estou trabalhando com Master-Detail, além de carregar os dados da VEnda, ele carrega os dados dos Serviços e Pagamentos, deixando a consulta um pouco mais lenta do que eu esperava. Gostaria de saber se tem como dizer de alguma forma: "Não carregue os details, apenas quando eu for editar um registro eu carrego os details".
  2. Jhonas, descobri que calcular manualmente nos botões não irá funcionar, pois preciso mostrar a lista de valores em um dbgrid.
  3. Bom, dar refresh na tabela resolve porém não acho que seja a solução, pois iremos trabalhar com uma grande quantidade de dados e isso iria deixar o sistema lento. Não tem como usar o internalCAlc pois não posso calcular o valor da percentagem se eu não tenha o total geral, a única solução possível que me restaé calcular os campos em cada atualização do registro manualmente. Porém onde eu iria armazenar esses valores? Em um campo calculado? Ou crio um campo internalcalc? Ps: só para responder sua pergunta, eu prefiro trabalhar com o tempo de resposta, pois o cliente não deseja lentidão no sistema.lento
  4. Vamos la, supondo que eu queria calcular o total geral. então toda vez que eu clicar no botão ok eu deveria somar o total de produtos com o total de serviços. E toda vez que eu calcular o total geral eu devo calcular o valor da percentagem, não seria um processo trabalho e dsspendioso ou e a maneira certa de se trabalhar nesse caso?
  5. não vai dar muito certo. Dentro da tela de projetos eu tenho outras telas, como a de adicao de servicos, se eu adiciono um novo servico não tem como fazer estes procedimentos. Adicionar ou deletar servicos e produtos devem consequentemente alterar o total geral e isso não da pra ser feito no onexit.
  6. Bom, uso firebird 2.1 Na verdade eu ainda não entendi muito bem como fazer isso. O que eu entendi até agora foi que eu devo calcular o TOTAL_GERAL via SQL e não no InternalCalc, assim devo fazer com o VALOR_PERCENT, já pegar o mesmo calculado pelo SQL e não internalCalc. Porém não entendi onde aplicar o RefreshRecord. Imagine, o usuário abre a tela de PROJETOS, lá em baixo tem TOTAL GERAL DO PROJETO, então ele adiciona um Serviço e nada acontece com o TOTAL GERAL que deveria mudar. Onde aplico o RefreshRecord para que este TOTAL GERAL que foi calculado pelo SQL mude conforme as alterações. Se puderes, eu tenho TeamViewer em minha máquina, vocÊ poderia acessar rapidamente só para entender melhor a situação. Posso enviar via Mensagem o ID e SENHA de acesso, claro só se você puder.
  7. Bom, deixa eu ver se entendi. Tenho um determinado registro, se eu não o editar, posso usar o RefreshRecord ? QUal a utilidade disso ? Lembrando que eu preciso que ao adicionar um novo serviço ou produto o valor do TOTAL_GERAL (pego do SQL) seja atualizado automaticamente. Tem mais uma coisa, o registro (no código acima) só será atualizado se eu mudar de registro (mudar a linha).
  8. Bom dia, tenho a seguinte situação: Uma Tabela PRODUTOS, onde nesta tabela tenho um campo VALOR e outra PERCENT. Dessa forma fazemos o seguinte SQL: "SELECT P.*, (P.VALOR*(P.PERCENT/100)) AS NOVO_VALOR FROM PRODUTO". Até aqui tudo bem, porém no ClientDataSet todos esses campos ficam em memória e só são atualizados novamente após um REFRESH, o que demanda tempo e deixa o sistema lento. Então imagine se o usuário altera o valor do produto ou do percent o valor NOVO_VALOR que foi calculado no SQL não irá mudar até que seja dado um REFRESH. Então, como fazer isso sem dar um REFRESH em toda a tabela ?
  9. Jhonas, eu sei que posso calcular o TOTAL_GERAL e o VALOR_PERCENT pelo SQL, porém há um grande problema nisso. Se em tempo de execução, o usuário adicionar um SERVIÇO por exemplo, o TOTAL_GERAL não mudará, a não ser que eu de um REFRESH no CLIENTDATASET. Olha, fiz uma modelagem rapida do meu problema (MER) de uma olhada por gentileza. http://s14.postimage.org/6ifpphef5/imagem_modelagem.png
  10. desculpe mas não entendi, poderia me dar um exemplo baseado no caso real que coloquei no post, com as tabelas : PROJETO, SERVICOS, PRODUTOS E COMISSAO ?
  11. Olá Jhonas, eu já havia lido este artigo na Devmidia porém em nada me auxiliou para resolver meu problema. Como disse no POST, o meu problema maior está em: "Como calcular um valor na tabela DETAIL com base em um campo na tabela MASTER que ainda nem foi calculado ?"
  12. Bom dia, Tenho uma Tabela PROJETO (Master), SERVICOS (Detail), PRODUTOS (Detail), COMISSOES (Detail). Nas Tabelas SERVICOS e PRODUTOS tenho em ambas 1 campo chamado TOTAL (aggregate). Na Tabela PROJETO tenho um InternalCalc chamado TOTAL_GERAL que soma TOTAL DE SERVICOS + TOTAL DE PRODUTOS. Na Tabela COMISSOES tenho um campo InternalCalc VALOR_PERCENT que pega o TOTAL_GERAL da Tabela PROJETO e retira 10% deste. Aqui ocorre o problema: Identifiquei que os Campos Calculados do Detail são executados primeiro do que do Master, dessa forma eu não tenho como pegar o TOTAL_GERAL se ele ainda nem foi calculado. Como resolver isso ?
  13. BOm, tenho um StringGrid no delphi onde o usuário preenche com Nome do Serviço, data, valor e quantidade do serviço. Isso não será salvo no banco, é apenas para mostrar no relatório, ele pode colocar 2 ou 20 serviços, como passo isso para o Crystal ?
  14. Resolvido ! O problema estava no meu banco !
  15. Bom dia, utilizo o DELPHI XE + Firebird 2.1. No banco tenho um campo FK que pode ser NULO, e tenho no meu DataModule tudo modelado com o required deste mesmo campo marcado como FALSE. Porém ao tentar salvar um registro que tenha este campo NULO da o seguinte erro: violation of FOREIGN KEY constraint "@1" on table "@2" Foreign key reference target does not exist
  16. Quando tento da um refresh em uma tabela detail da o seguinte erro: Missing DataProvider or Data Packet
  17. Boa tarde, utilizo o Delphi 2010 com firebird 2.1 e estou com o seguinte problema: Tenho um relacionamento MasterDetail deste tipo: VENDA -> VENDA_PRODUTO Onde, na tabela VENDA_PRODUTO tenho um aggregate chamado SUBTOTAL que soma QTD*VALOR de todos os produtos de uma determinada VENDA. Até ae funciona tudo perfeitamente. Então coloquei um campo TOTAL_COMISSAO do tipo InternalCalc e no OnCalcFields faço o seguinte: cdsVENDA.FieldByName('TOTAL_COMISSAO').AsFloat := cdsVENDA_PRODUTO.FieldByName('SUBTOTAL').AsVariant * 0,5; O Problema é o seguinte: O Campo TOTAL_COMISSAO só altera se eu der um refresh na tabela, mesmo se houver alteração no campo SUBTOTAL o INTERNALCALC não é chamado, o certo não deveria ser: sempre que o SUBTOTAL sofrer modificações o OnCalcFields é chamado ?
  18. Boa noite, no firebird quando tento fazer um LIKE em um campo INTEGER, funciona normal, ex: select * from cliente where cod_cliente like '%45%' Ele pesquisa todos os clientes que tem 45 no cod. Porém se tento fazer isso no FILTER do DELPHI da o erro:Could not convert variant of type (OleStr) into type (Boolean). Tentei assim: FILTER:= 'COD_CLIENTE LIKE '+QuotedStr('%45%');
  19. Boa tarde, percebi que no DELPHI quando salvo um campo vazio em vez de ele salvar no banco como NULO ele salva como vazia (string vazia), isso me da muitos problemas, pois quando tenho uma chave unica e se ele salvar 2 vazias ele da VIOLATION. Como fazer para quando a string for vazia ele salvar como NULL ?
  20. Jhonas, eu setei no ProviderFlags do Campo CPF o pfinKey e parou de dar o erro "KEY VIOLATION". Algum explicação para isso ?
  21. Bom dia, estou utilizando 1 campo E-MAIL unique key no FIREBIRD 2.1. Sabemos que em 1 CAMPO UNIQUE ele não pode se repetir, porém ele pode gravar nulo. Fiz o teste no firebird criando várias registros com o EMAIL nulo e funciona perfeitamente. Porém no DELPHI, se eu tentar criar email's vazios ele da KEY VIOLATION. Qual será o problema ?
  22. Boa noite, estou usando FIREBIRD 2.1 com charset ISO8859_1 e nos campos varchar o COLLATE PT_BR, mesmo assim quando tento inserir um dado com acento ele coloca um caracter estranho no lugar, ex: A palavra ESTÉTICA, fica ESTÑTICA
  23. Bom dia, utilizo o Banco Firebird 2.1 + Delphi XE e estou com o seguinte problema: No meu banco tenho uma tabela com chave primária e auto-incrementável da seguinte forma: Tabela Região Coluna1 - codigoRegiao (chave primaria e auto-incremento) Coluna2 - nomeRegiao No meu DataModule configurei o SQLDataSet normalmente colocando o "codigoRegiao" como chave primaria e required. O problema é que como "codigoRegiao" é autoIncremento pela GENERATOR + TRIGGER no FIREBIRD eu não preciso preenche-lo só que no DELPHI se eu não preencher diz que é obrigatório o preenchimento com a seguinte mensagem: "Field "codigoRegiao" required". Então tirei o required do "codigoRegiao", e o erro ficou assim: "Field value required" E agora ?
×
×
  • Criar Novo...