Ir para conteúdo
Fórum Script Brasil

DanielR

Membros
  • Total de itens

    50
  • Registro em

  • Última visita

Tudo que DanielR postou

  1. DanielR

    Ponteiros

    Boa tarde a todos. uma dúvida. Tenho um objeto criado no local A do software do tipo TCliente, nele temos as seguinte propriedades nome e telefone (preenchidas). No local B vou precisar também de um objeto do tipo TCliente, devido a isso criei uma variável do tipo TCliente e já instanciei a mesma. Dentro do local A eu passo o meu objeto instanciado no local A para o local B assim; LocalB.VarTipoCliente := LocalA.VarTipoCliente; Isso esta correto, percebo que recebo todas as informações ligadas ao objeto , no entanto a minha duvida é quando vou dar um free na variável LocalB.VarTipoCliente percebo que a variavel LocalA.VarTipoCliente já não esta mais acessível tb. Porque?
  2. Boa noite a todos. Estou migrando um banco de firebird para postgres no entanto tem algo no firebird que não achei ainda no postgres trata-se do Post_Event. Sabem de alguma função, procedimento ou similar no postgres que tem similaridade no postgres? Obrigado a todos
  3. Pessoal, como não poderia ser diferente o erro é nosso, mas ta corrigido. O Firedac deve ser mais criterioso que o interbase, por isso onde cometemos o erro tenha passado a tanto tempo. O erro estava na origem (no select) no inner join. Select parcela.* from Documento inner join parcela on (documento.chaveA = parcela.chaveA) and (documento.chaveB = parcela.chaveB) o select usado não é esse mas o erro sim, como era um select de mais de 8 anos como falei, nem desconfiei dele, quando fui olhar o select esta buscando o documento fazendo um inner com parcelas, as linhas de resultado serão as mesmas com certeza, no entanto a importação de chave e demais constraints serão da tabela documento e não da tabela parcelas, por isso o erro de key violation O Select correto é: Select parcela.* from Parcela inner join Documento on (documento.chaveA = parcela.chaveA) and (documento.chaveB = parcela.chaveB) Obrigado a todos.
  4. Pessoal parece que hoje é o meu dia de postar. Obrigado pela paciência, no entanto não postaria se não fosse diferente. Vamos lá, como já disse num outro post estamos mudando de: interbase para FireDac no acesso ao banco de dados Firebird. O erro que apresento nesse momento é muito comum, e a resposta para ele também, porém no meu caso é diferente. Vejam, o erro é o famoso key violation. Segue o código: FcjParcelas.Insert; FcjParcelas.fieldbyname('empresa' ).AsInteger := self.GetEmpresa; // faz parte da chave FcjParcelas.FieldByName('codigo' ).AsInteger := Ficodigo; // faz parte da chave FcjParcelas.FieldByName('parcela' ).AsInteger := i; // faz parte da chave (aqui eu incremento cfe qtd de parcelas) FcjParcelas.FieldByName('dt_Vcto' ).AsDateTime := FdDtvcto; FcjParcelas.FieldByName('status' ).AsString := 'A'; FcjParcelas.FieldByName('valor' ).AsFloat := strToFloat(FcValorAuxParcela) + FdDiferenca; FcjParcelas.FieldByName('forma_pgto' ).AsInteger := FaFormaPgto.ID_FORMAPGTO; FcjParcelas.FieldByName('descricao' ).AsString := FaFormaPgto.DESCRICAO; FcjParcelas.Post; Posso lhes garantir que cada linha é diferente e como prova disso é que a mesma rotina funciona no interbase e esta rodando em produção a pelo menos 8 anos. outro detalhe, somente as grades de parcelas (que passam pelo código acima) que estão apresentando esse comportamento, as demais (até agora) estão incluindo, alterando, excluindo bem tranquilo cfe já funciona do mesmo. Se alguém já passou por algo parecido e quiser compartilhar agradeço.
  5. Pessoal foi localizado a configuração e já tudo certo. Vou colocar a imagem para que (se alguém precisar) possa ser útil para outra pessoa. Obrigado.
  6. Boa tarde a todos. Desde já agradeço pela atenção. Seguinte tenho um projeto que nasceu em 2008 com o firebird utilizando dentro do delphi os componentes do interbase, tudo ok. Pensamos em mudar para o firedac, porque o mesmo nos dá suporte a outros bancos (só por isso). Nos testes realizados estamos tendo problemas em cima de algo que esta funcionando no interbase normalmente. Vou dar um exemplo. Num pedido temos a grade e essa por sua vez exibe 'n' colunas que vem de um join entre tabelas do banco. Faço então meus inserts, updates e deletes na grade e depois entrego um olevariant para uma camada que vai persistir os dados no banco. Detalhe não ligo a grade diretamente ao banco. Nessa grade (com o firedac) estou tendo o seguinte erro: Campo ' NOME ' não pode ser modificado Veja bem pessoal, é o mesmo codigo, com o mesmo banco de dados porém conectados via interbase não tem esse erro. Pergunta. Tem alguma configuração do FIreDac que estou esquecendo de fazer? Estou pesquisando na internet e fazendo meus testes, se resolver ates de alguma resposta, posto aqui o caminho para a solução. Obrigado.
  7. Obrigado Jhonas por sua resposta, completa como sempre, no entanto demorei para ver a resposta no post, logo terminei por criar (meu colega de trabalho quem fez) uma aplicação para ler todos os arquivos .pas de uma unica vez e alterar o texto desejado neles. Deu certo. De qualquer maneira agradeço por todo o empenho desprendido.
  8. Boa tarde a todos. já agradeço a atenção de todos. Obrigado. Pessoal, tenho um projeto onde preciso trocar uma classe em suas chamadas, o detalhe é que são diversos arquivos (cerca de 5.000 arquivos) e gostaria de fazer isso de uma unica vez. Conheço o replace (mas não confio 100%), também conheço a refatoração, mas essa ultima não consegui executar a tarefa, se alguém puder ajudar agradeço. Como o codigo esta var query : TIBDataSet; // quero alterar essa classe,... begin query := TIBDataSet.Create(nil); try try Query.database := self.conn; // essa linha,... . . . Como o codigo deve ficar var query : TFDQuery; // ... por essa classe. begin query := TFDQuery.Create(nil); try try query.Connection := self.conn; // ... por essa linha . . .
  9. Opa Jonas, obrigado pelo retorno, mas não mencionei um outro detalhe, quanto ao componente testei o TDBGrid, assim como a grid o JEDI. Em ambos o mesmo resultado. já quanto ao build completa não cheguei a fazer. O que fiz foi mudar de checkbox para uma imagem que imita um, assim sendo passei por outros métodos e não tive o problema da lentidão, mas vou testar porque com certeza não normal o que aconteceu.
  10. Boa tarde a todos! Pessoal, hoje me deparei com uma situação bem inusitada( pelo menos pra mim), trata-se do checkbox no dbgrid. Bem, eu utilizo esse recurso a anos, porém hoje ao criar uma nova grade em uma nova tela percebo uma lentidão incrível. Ao rodar a aplicação e clicar no ckeckbox dava para ir tomar um cafezinho e voltar para então ver o check marcado ou desmarcado. Levei um susto e fui conferir algumas grades, a minha surpresa estava tudo normal. Pensei é aqui o problema, vamos atras, nada encontrei de anormal. Bom para descargo de consciência criei uma tela semelhante a outra que esta funcionado, chamando os mesmos métodos, buscando os mesmos dados no banco, a grid com as propriedades setadas igualmente e o resultado é o seguinte: access Violation na linha Check := IS_CHECK[Column.Field.AsInteger = 1]; outro detalhe, na maquina do colega desenvolvedor, o access violation não ocorria mesmo dentro de um try except end, no entanto a lentidão era a mesma. Alguém já viu algo parecido? Obrigado pela atenção. Segue o código. procedure TfrmGerenciamentoFinanceiro.dbgContasReceberDrawColumnCell( Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); const IS_CHECK: array[Boolean] of Integer = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED); var Check : Integer; R : TRect; begin inherited; if cdsContasReceber.Active then begin with dbgContasReceber do begin if Column.FieldName = 'IMPRIMIR' then begin Canvas.FillRect(Rect); Check := IS_CHECK[Column.Field.AsInteger = 1]; // Aqui estou tendo access Violation R := Rect; InflateRect(R, -2,-2); DrawFrameControl(Canvas.Handle, Rect, DFC_BUTTON, Check); end end; end; end;
  11. Boa tarde Jhonas. Obrigado pela resposta, no entanto não pude executar o comando pela seguinte razão: O comando SFC /SCANNOW irá verificar a integridade dos arquivos do Sistema Operacional. Ao se deparar com arquivos corrompidos ou falhos, ele irá substituir tais arquivos. O Sistema até pode voltar a funcionar. No entanto, algumas outras aplicações instaladas, poderão falhar por estar usando um arquivo desatualizado ou alterado. Com base nisso o cliente não autorizou a execução do comando na máquina dele, infelizmente não pude testar. Obrigado.
  12. Bom dia a todos. Com certeza não iria postar se não fosse no minimo estranho. Tenho uma consulta simples e a coloco num clientdaset, ate ae tranquilo, no entanto o erro key violation aparece antes mesmo de ser exibido os dados na grade, porem não é só isso, esse erro ocorre somente numa maquina num acervo de 200 maquinas aproximadamente onde o sistema esta instalado. No momento estou descartando a aplicação por simplesmente funcionar em outras centena de maquinas. Estou descartando o banco por simplesmente outras cetenas de pessoas o estão acessando incluindo, alterando, excluindo, consultando numa boa, fiquei somente com a maquina, não queria simplesmente formata-la sem antes saber exatamente o que se passa. Esta maquina esta rodando windows 7 x64 original. Banco de Dados: Firebird centralizada num servidor. Algém já se deparou com isso ou algo parecido e deseja compartilhar ? Obrigado.
  13. Boa tarde a todos. Não colocaria no forum se não fosse no minimo intrigante (pra mim pelo menos), tenho uma aplicação e nela faço o seguinte calculo: 24 * 0,189 = 4,54 (já arredondado para 2 casas) isso na maquina A. Agora a mesma aplicação fazendo o mesmo calculo na maquina B temos: 24 * 0,189 = 4,32 Na maquina B esta sendo ignorado completamente a terceira casa fazendo o calculo como se fosse: 24 * 0,18 = 4,32 Alguém já passou por isso? Obrigado!
  14. Bom dia a todos! pessoal estou criando um fluxo de caixa aqui na empresa, porém estou me enrolando no tal do select. Vejam preciso trazer as seguintes informações ||||||| Recebido ||| A Receber ||| Total |||||||||| Pago ||||||||||| A pagar ||||||||| Total |||||| Recebido/Pago ||| A Receber/A pagar ||| Final |||||||| jan||| 100,00 |||||| 50,00 ||||||||| 150,00 ||||||| 75,00 |||||||||| 50,00 |||||||||||| 125,00 |||| 25,00 ||||||||||||| 0,00 |||||||||||||||||||| 25,00 |||||||| fev mar abril e assim por diante. tenho nomeu banco um relacionamento da seguinte forma: DOCUMENTOS (tudo passa por aqui) DOC_PAGAR DOC_RECEBER (se o documento é a pagar vai ser gravado na tab DOCUMENTOS e DOC_PAGAR, o mesmo acontece com DOC_RECEBER) todo documento tem PARCELAS mesmo que avista terá 1 parcela então ligado a tabela DOCUEMENTOS tenho a tab PARCELAS e ligado a ela a tabela PARCELAS_BAIXA. pronto. Basicamente é isso. Para pegar o valor recebido, a receber, pago e a pagar, foi tranquilo. os totais que estão apertando. vamos pegar: Recebido||||||||| A Receber ||||||||||||||||||||||||||||||| Total ok __________ é o valor nominal - valor recebido___ aqui tenho que calcular o Recebido + a Receber, porém deu esse erro: Column unknown VALOR_RECEBIDO. Vejam o select SELECT DOCUMENTOS.VALORTOTAL AS VALOR_NOMINAL, COALESCE((SELECT sum(PARCELA_BAIXA.VALOR_TOTAL) FROM PARCELA_BAIXA WHERE(1 = 1) AND(PARCELA_BAIXA.EMPRESA = PARCELAS.EMPRESA) AND(PARCELA_BAIXA.CODIGO = PARCELAS.CODIGO) AND(PARCELA_BAIXA.PARCELA = PARCELAS.PARCELA)),0) AS VALOR_RECEBIDO, COALESCE( PARCELAS.VALOR - VALOR_PAGO, PARCELAS.VALOR ) AS VALOR_ABERTO, (VALOR_RECEBIDO + VALOR_ABERTO) AS TOTAL /* aqui estou com o problema */ FROM DOCUMENTOS INNER JOIN PARCELAS ON (DOCUMENTOS.EMPRESA=PARCELAS.EMPRESA) AND (DOCUMENTOS.CODIGO=PARCELAS.CODIGO) LEFT OUTER JOIN PARCELA_BAIXA ON (PARCELAS.EMPRESA=PARCELA_BAIXA.EMPRESA) AND (PARCELAS.CODIGO=PARCELA_BAIXA.CODIGO) AND (PARCELAS.PARCELA=PARCELA_BAIXA.PARCELA) INNER JOIN DOC_RECEBER ON (DOCUMENTOS.EMPRESA=DOC_RECEBER.EMPRESA) AND (DOCUMENTOS.CODIGO=DOC_RECEBER.CODIGO) WHERE (1 = 1) AND (DOCUMENTOS.LANCAMENTO_ORIGEM <> 'FAT') Obrigado pela ajuda! Daniel
  15. Resolvido em partes o problema. O problema estava no select vejam: esse é o select com o problema. SELECT PESSOAS.NOME, PESSOAS.ID, DOCUMENTOS_ITENS.ITEM, ITENS.NOME as NOME_PRODUTO, DOCUMENTOS_ITENS.VALOR_TOTAL, DOCUMENTOS.DATA_INCLUSAO FROM ... esse é o select com a solucao. SELECT PESSOAS.NOME as NOME_CLIENTE, PESSOAS.ID, DOCUMENTOS_ITENS.ITEM, ITENS.NOME as NOME_PRODUTO, DOCUMENTOS_ITENS.VALOR_TOTAL, DOCUMENTOS.DATA_INCLUSAO FROM ... depois que mudei o nome da coluna 'pessoas.nome' para 'NOME_CLIENTE' o QR quebrou as linhas, porém acho que o primeiro select tb esta correto, mais ai é outra historia que tenho mais tempo para pesquisar. de qualquer forma obrigado a todos e até proxima.
  16. Muito obrigado mais uma vez pelo desprendimento em me ajudar! mas... ok. como disse, você prefere colocar os componentes de acesso ao banco dentro do proprio QR, mas nada impede de não colocar tb certo? eu já prefiro alimentar no QR um clientdataset e apartir dele fazer bom uso dos recursos do proprio clientdaset e das bandas e etc... No meu software tenho as classe de persistencia e nelas que faço a busca dos dados. As pesquisas sempre trago em formato olevariant que pode ser populado tranquilamente dentro de um clientdataset, depois desse ponto é so brincar de visualizar e imprimir se for o caso, mas o qr não esta fazendo a parte dele (eu acho) ou eu não estou enxergando o meu erro. Faço Assim: tenho um form padrão que traz num lisbox a lista de campo do recem populado clientdaset. e mais sugestões de filtros que são aplicados no CDS ao invés de ir novamente ao banco. porém esses filtros e indexações que o usuario vai escolhendo é gravado em listas respectivas sempre que ele clica em um determinado botão. quando o usuario resolve visualizar os dados filtrados e ordenados passo então esses dados para o relatorio base que recebe a tabela obviamente com todos os dados e passo os filtros e indices escolhidos, la volto a filtrar e indexar deixando a tabela do mesmo jeito que ele escolheu. A partir dai é visualizar ou imprimir. veja a chamada do relatorio: loFaturamentoProduto := TfrmFaturamentoClienteReport.Create(nil); try loFaturamentoProduto.filtro := self.filtrocds; loFaturamentoProduto.indice := self.indicecds; loFaturamentoProduto.dadosole := cds_lista.Data; loFaturamentoProduto.QRGroup1.Expression := TutilCDS.ExtrairGrupo( Self.indicecds); loFaturamentoProduto.doPreview; except on E: Exception do Tutil.doTrataException('Não foi possivel visualizar o Relatório de faturamento,' + #13#10 + 'verifique os dados escolhidos ou reporte o erro ao suporte' + #13#10,e); end; metodo doPreview procedure TfrmBaseReport.doPreview; begin Screen.Cursor := crHourGlass; DoConfigHeader; if doAbreDados > 0 then begin main.Prepare; Screen.Cursor := crDefault; main.Preview; end else if doAbreDados = 0 then begin ShowMessage('Não há registros para listar!'); Screen.Cursor := crDefault; exit; end; end; metodo doAbredados function TfrmBaseReport.doAbreDados : integer; var loutil : TutilCDS; begin loutil := TutilCDS.create; try loutil.cds := cdsDados; loutil.filtro := self.filtro; loutil.indice:= self.indice; result := 0; cdsDados.Close; cdsDados.Data := self.dadosole; cdsDados.Open; loutil.Executar; result := cdsDados.RecordCount; finally loutil.free; end; end; metodo executar procedure TutilCDS.Executar; begin Filtrar; Indexar; end; metodo filtrar procedure TutilCDS.Filtrar; begin try TClientDataSet(FCDS).Filtered := false; TClientDataSet(FCDS).Filter := ExtrairFiltro(FFiltro); TClientDataSet(FCDS).Filtered := true; except on E: Exception do Tutil.doTrataException('Erro ao Filtrar os dados solicitados ' , E); end; end; metodo indexar procedure TutilCDS.Indexar; begin try TClientDataSet(FCDS).IndexFieldNames := ExtrairIndice(FIndice); except on E: Exception do Tutil.doTrataException('Erro ao Indexar a Grade solicitada' , E); end; end; seguindo esses passos todos os dados são passados corretamente para o relatorio com os filtros e indice escolhido e consigo visualizar tranquilamente, porém não quebra, já no relatorio de produtos que faço uso da mesma estrutura funciona. veja somente a chamada pois o restante é igual. loFaturamentoProduto := TfrmFaturamentoProdutoReport.Create(nil); try loFaturamentoProduto.filtro := self.filtrocds; loFaturamentoProduto.indice := self.indicecds; loFaturamentoProduto.dadosole := cds_lista.Data; loFaturamentoProduto.agrupamento := self.agrupamento; loFaturamentoProduto.QRGroup1.Expression := TutilCDS.ExtrairGrupo( Self.indicecds); loFaturamentoProduto.doPreview; except on E: Exception do Tutil.doTrataException('Não foi possivel visualizar o Relatório de faturamento,' + #13#10 + 'verifique os dados escolhidos ou reporte o erro ao suporte' + #13#10,e); end; end; pronto é isso, agora que raios que o outro relatorio não quer quebrar nem que a vaca tussa! só uma duvida o fato de ter populado o CDS do relcliente com dados provindos de 3 tabelas faz a diferença? essa é a unica diferença do relproduto para o relcliente.
  17. Jhonas obrigado pela ajuda ate então, mas lamentavelmente nada feito, observei cada detalhe. 1. criei um novo relclientes copiando as bandas do relprodutos 2. no create setei os data sets 3. antes de imprimir o rel me certifiquei de que o estaria abrindo, filtrando e indexando o cds 4. passei para a qrgroup.expression o nome escolhido pelo usuario no caso 'NOME' e por fim 5. abri a visualização do rel e nada, houve apenas a impressão da lista , porém a quebra negativo, pode ser um bug no quick report, vi num video aula acontecer o mesmo caso e o cara teve que se ajeitar la para contornar. Daniel ps. se for um bug do quick report ele ta me devendo uma, pois criei minha classe base pensando nessa banda e principalmente nessa funcionalidade da property expression, agora tenho que repensar o processo. *2. setei os dataset dos qrdbtex.
  18. Não vi nada para teste sem comprar.
  19. Confesso que já fiz, porém como vim de feriado estou disposto a fazer novamente e cuidarei dos minimos detalhes se funcionar ou não irei postar novamente. Obrigado por enquanto.
  20. legal, agora já sei que tem a opção de certificado digital.
  21. oi bom dia que eu saiba não existe, oque fizemos foi comprar um certificado e deixa-lo no ambiente de testes para poder fazer o aplicativo de emissão de NFE.
  22. oi Jonas, obrigado pela resposta. sobre: "o raciocínio está correto ... para testar se a tabela está ordenada corretamente, use um dbgrid para visualizar os dados" já estou usando um dbgrid, e esta ordenado de forma correta. ''na tabela voce devera encontrar o campo NOME repetido para cada um dos produtos que estiverem indexados a ele'' isso mesmo, confere! ''se ele aparecer corretamente, então o erro é somente na configuração das bandas do quick report'' penso que o erro esta aqui, mas ai que entra minha questão, pois uso herança visual e a configuração é a mesma do outro relatorio apenas passo para a classe a lista de filtros e indices e os metodos Indexar e Filtrar fazem sua parte. Exemplo RelBase (propery Filtros: StringList; Indices:StringList - Metodos: Indexar:string; filtrar:string; AbreDados(ele pega um cds e da o open depois filtra e indexa) ; doPreview; doPrint (esses dois metodos tem a função de verificar se tem registro no cds e preparar o rel para exibir ou imprimir) basicamente isso. RelProdutos = filho de RelBase (tenho um constructor que pega os qrdbtex e seta os dataset deles) pronto RelClientes = filho de RelBase (tenho um constructor que pega os qrdbtex e seta os dataset deles) pronto oRelBase tem as bandas pageheader e pagefooter. oRelClientes e RelProdutos tem as bandas citadas acima com as mesma configurações em relação a altura, tamanho, fonte etc, porém a banda qrGroup tem a propriedade expression, que faz a diferença e essa mudo em tempo de execução cfe o que o usuario escolheu, a propriedade Master recebe por padrão main que é o meu relatorio, a propriedade LinkBand recebe o valor de detailband1 e a property footerband recebe recebe o qrgroupfooter, pronto funciona beleza a listagem e a quebra no relProdutos e no relClientes não funciona a quebra; já olhei uma a uma das propriedades, já chquei se esta chegando ordenado como quero e tudo ta certo, porém no relClientes não acontece a quebra. Obrigado por enquanto qualquer novidade postarei e se puderem me ajudar agradeço Daniel
  23. Oi. porque você não cria uma rede virtual 'privada' dentro da rede publica de internet, tem tecnologia para isso. ai você fika refem apenas da internet e você não precisa mexer na sua aplicação. Ex. Tenho um cliente com várias lojas o servidor de dados esta na loja 1, as demais lojas acessas a loja 1 via rede 'privada' de dentro da banda de internet que eles tem. quanto a demora as vezes acontece mas ai é um caso de internet mesmo. A tecnologia usada é gratuita ou paga dependendo da necessidade e chama-se HAMACHI. pra mim deu certo. Espero ter ajudado! Daniel
  24. Boa tarde pessoal. Bem fiz o relatorio no quick report a partir de um ClientDataSet utilizando uma banda de grupo para quebrar as informações. os dados do relatorio deveriam sair assim: Cliente X (quebra) Produto A Produto B Cliente Y (quebra) Produto C Produto D porém estão saindo assim: Cliente X (quebra) Produto A Produto B Produto C Produto D já pesquisei na net e parece que estou repetindo os mesmos erros de outros, mas sinceramente (posso estar esquecendo de algo) chequei as possibilidades. o relatorio tem como dataset o clientedataset que falei la em cima. o clientedataset esta populado e indexado desta forma ID|NOME|ITEM|NOME_PRODUTO|VALOR_TOTAL|DATA com order by na coluna 'NOME' as bandas usadas são qrgroupHeader (TQRGroup) ( aqui a property expression esta setada para 'NOME') detail (TQRBand) grGroupFooter (TQRBand) Basicamente é isso e simplesmente não funciona nesse relatorio, o que é estranho é que o relatório de produtos por grupo_familia funciona. Uso herança visual e o relatorio é exatamente o mesmo, apenas populo o clientdataser com outros dados, modifico a property expression e coloco obviamente os outros dbtexts. o que posso estar fazendo de errado. Obrigado pela ajuda!
×
×
  • Criar Novo...