
fajo
Membros-
Total de itens
73 -
Registro em
-
Última visita
Tudo que fajo postou
-
Olá, estou dando manutenção num sistema de doações com Delphi 2007 e Firebird 2.0.3, e recentemente me foi pedido para q eu elaborasse uma maneira de gerar parcelas automaticamente para os doadores até um determinado mês de um determinado ano, bom, até ai tudo bem, pois essa rotina já existe só q é executada pelas operadoras, quando necessário, então eu aproveitei essa rotina para fazer o q me pediram, só q a coisa não deu muito certo, quando mando executar, começa tudo bem, mas de repente "unable to allocate memory from operating system.", quando fui ver no Gerenciador de Tarefas do windows, um baita susto, o Firebird consumindo quase 1 GB de memória, assim tb como a aplicação, essa rotina é chamada em um laço para cada um dos registros de uma tabela(ClientDataSet): function Tdm.F_Insere_Parcelas(V_Con: TSQLConnection; P_Id_Doa, P_Qtde_Parc: Integer; P_Mes_Inicial, ResCom, Frequencia: String): ShortString; Var Q_Apaga_Doacoes, Q_Obtem_Doador, Q_Insere_Doacao:TSQLQuery; V_Dia_Venc, V_Cont, Contador, Freq:Integer; V_Venc_Inicial,V_Venc_Aux:TDateTime; V_Dt:String; Begin // showmessage(inttostr(P_Id_Doa)+' '+inttostr(P_Qtde_parc)+' '+P_Mes_Inicial+' '+Rescom); // showmessage(inttostr(P_Qtde_Parc)+','+P_Mes_inicial+','+Frequencia); Q_Insere_Doacao := TSQLQuery.Create(nil); Q_Insere_Doacao.SQLConnection := V_Con; Q_Apaga_Doacoes := TSQLQuery.Create(nil); Q_Apaga_Doacoes.SQLConnection := V_Con; Q_Obtem_Doador := TSQLQuery.Create(nil); Q_Obtem_Doador.SQLConnection := V_Con; Q_Obtem_Doador.Close; Q_Obtem_Doador.SQL.Clear; if (ResCom = 'C') then begin Q_Obtem_Doador.SQL.Add('SELECT Tab_Doadores.Doa_Id, Tab_Doadores.Doa_Dia_Recebimento, Tab_Doadores.Doa_Valor_Parcela, Tab_Doadores.Doa_Operadora, Tab_Bairros.Bai_Fun_Id'); Q_Obtem_Doador.SQL.Add('FROM Tab_Bairros INNER JOIN Tab_Doadores ON Tab_Bairros.Bai_Id = Tab_Doadores.Doa_Bairro_Com'); Q_Obtem_Doador.SQL.Add('WHERE Tab_Doadores.Doa_Id = ' + IntToStr(P_Id_Doa)); Q_Obtem_Doador.SQL.Add('AND Tab_Bairros.Bai_Fun_Id Is Not Null'); Q_Obtem_Doador.SQL.Add('AND Tab_Doadores.Doa_Status = '+asp+'A'+asp); end else begin Q_Obtem_Doador.SQL.Add('SELECT Tab_Doadores.Doa_Id, Tab_Doadores.Doa_Dia_Recebimento, Tab_Doadores.Doa_Valor_Parcela, Tab_Doadores.Doa_Operadora, Tab_Bairros.Bai_Fun_Id'); Q_Obtem_Doador.SQL.Add('FROM Tab_Bairros INNER JOIN Tab_Doadores ON Tab_Bairros.Bai_Id = Tab_Doadores.Doa_Bairro'); Q_Obtem_Doador.SQL.Add('WHERE Tab_Doadores.Doa_Id = ' + IntToStr(P_Id_Doa)); Q_Obtem_Doador.SQL.Add('AND Tab_Bairros.Bai_Fun_Id Is Not Null'); Q_Obtem_Doador.SQL.Add('AND Tab_Doadores.Doa_Status = '+asp+'A'+asp); end; Q_Obtem_Doador.Open; If Q_Obtem_Doador.eof then Begin F_Insere_Parcelas := '0'; // showmessage('Retornou 0'); End Else Begin V_Dia_Venc := Q_Obtem_Doador.FieldByName('Doa_Dia_Recebimento').AsInteger; // showmessage(inttostr(V_Dia_Venc)); V_Dt := IntToStr(V_Dia_Venc) + '/' + F_Replica(copy(P_Mes_Inicial,1,2),2,'0') + '/' + copy(P_Mes_Inicial,4,4); While F_Data_Valida(V_Dt) = False do Begin V_Dia_Venc := V_Dia_Venc - 1; V_Dt := IntToStr(V_Dia_Venc) + '/' + F_Replica(copy(P_Mes_Inicial,1,2),2,'0') + '/' + copy(P_Mes_Inicial,4,4); End; V_Venc_Inicial := StrToDate(V_Dt); // For V_Cont := 0 to P_Qtde_Parc -1 do if Frequencia = 'M' then V_Cont:=1 else if Frequencia = 'B' then V_Cont:=2 else if Frequencia = 'T' then V_Cont:=3 else if Frequencia = 'Q' then V_Cont:=4 else if Frequencia = 'S' then V_Cont:=6 else if Frequencia = 'A' then V_Cont:=12; Contador := 0; Freq := 0; while Freq <= (P_Qtde_Parc - 1) do Begin V_Venc_Aux := IncMonth(V_Venc_Inicial,Contador); if (F_Obtem_Dia_Util(V_Con,datetostr(V_Venc_Aux)) = 'N') and (DayOfTheMonth(V_Venc_Aux) = 1) then V_Venc_Aux := IncDay(V_Venc_Aux,1) else if F_Obtem_Dia_Util(V_Con,datetostr(V_Venc_Aux)) = 'N' then V_Venc_Aux := IncDay(V_Venc_Aux,-1) else if (DayOfTheMonth(V_Venc_Aux) = 1) and (DayOfWeek(V_Venc_Aux) = 1) then V_Venc_Aux := IncDay(V_Venc_Aux,1) else //Se for no domingo a data será decrementada em uma dia(Sábado) If DayOfWeek(V_Venc_Aux) = 1 then V_Venc_Aux := IncDay(V_Venc_Aux,-1); // If DayOfTheMonth(V_Venc_Aux) = 1 then V_Venc_Aux := IncDay(V_Venc_Aux,-1); If Not F_Existe_Doacao(V_Con,P_Id_Doa,V_Venc_Aux) then Begin Q_Apaga_Doacoes.Close; Q_Apaga_Doacoes.SQL.Clear; Q_Apaga_Doacoes.SQL.Add('DELETE FROM Tab_Doacoes'); Q_Apaga_Doacoes.SQL.Add('WHERE Tab_Doacoes.Doc_Doa_Id=' + IntToStr(P_Id_Doa)); Q_Apaga_Doacoes.SQL.Add('AND Tab_Doacoes.Doc_Status_Doacao < 4'); Q_Apaga_Doacoes.SQL.Add('AND Tab_Doacoes.Doc_Status_Impressao = 6'); Q_Apaga_Doacoes.SQL.Add('AND Extract(year from Tab_Doacoes.Doc_Data_Operacao)= ' + FormatDateTime('yyyy', V_Venc_Aux)); Q_Apaga_Doacoes.SQL.Add('AND Extract(month from Tab_Doacoes.Doc_Data_Operacao)= ' + FormatDateTime('mm', V_Venc_Aux)); Q_Apaga_Doacoes.ExecSQL; Q_Insere_Doacao.Close; Q_Insere_Doacao.SQL.Clear; Q_Insere_Doacao.SQL.Add('INSERT INTO Tab_Doacoes'); Q_Insere_Doacao.SQL.Add('(Doc_Doa_Id,Doc_Func_Operadora,Doc_Func_Mensageiro,Doc_Data_Operacao,Doc_Valor)'); Q_Insere_Doacao.SQL.Add('VALUES'); Q_Insere_Doacao.SQL.Add('(' + asp + IntToStr(P_Id_Doa) + asp +','); Q_Insere_Doacao.SQL.Add('' + asp + Q_Obtem_Doador.FieldByName('Doa_Operadora').AsString + asp +','); Q_Insere_Doacao.SQL.Add('' + asp + Q_Obtem_Doador.FieldByName('Bai_Fun_Id').AsString + asp + ','); Q_Insere_Doacao.SQL.Add(asp + FormatDateTime('mm/dd/yyyy',V_Venc_Aux) + asp + ','); Q_Insere_Doacao.SQL.Add('' + asp + Q_Obtem_Doador.FieldByName('Doa_Valor_Parcela').AsString + asp + ')'); Q_Insere_Doacao.ExecSQL; End; Contador := Contador + V_Cont; Freq := Freq + 1; End; F_Insere_Parcelas := '1'; // showmessage('Retornou 1'); End; Freeandnil(Q_Insere_Doacao); Freeandnil(Q_Apaga_Doacoes); Freeandnil(Q_Obtem_Doador); end;
-
Procedimentos dentro do código do seu programa? Se for, é um comportamento bem estranho mesmo. A título de curiosidade (e porque você não citou), que componentes de acesso ao banco você está utilizando? Abraços Oi Micheus, tudo bem, é, realmente esqueci de mencionar os componentes de accesso, DbExpress, mas, já resolvi, como o sistema foi migrado do access para firebird, tem uma rotina q cria na memoria algunas Query's e em uma delas é necessário o retorno da quantidade de registros com um Select e ai já sabe. Coloquei um DSP e um ClientDataSet e pronto. Valeu pelo interesse mais uma vez em ajudar. Como sempre você está a postos. Obrigado.
-
Olá, migrei um Sistema em Delphi e Access para Firebird 2.0.3 usando o Delphi 2007, tudo está funcionando normalmente localmente, quando implemetei o sistema na rede do cliente passaram a aparecer alguns bugs, como por exemplo, rotinas q não executam, mas q testadas localmente funcionam normalmente, congelamentos temporários, etc. O executável e o banco estão no servidor, enquanto nos clientes criei somente um atalho para o sistema,teria alguma melhora se copiasse o exe para os clientes e apontasse para o bd? ou alguma outra sugestão q pudesse ajudar? obrigado.
-
Oi galera, estou numa enrrascada, estou usando o Vista com D2007 atualizado, e um sistema meu está apresentando uns tipos de mensagens estranhas e em diferentes pontos do código, como: Project D:\Sistemas\Sistema.exe faulted with message: 'access violation at 0x77f0d13a: write of address 0x00030fac'.Process Stopped. Use Step or Run to continue. Project D:\Sistemas\Sistema.exe faulted with message: 'access violation at 0x00000000: write of address 0x00000000'.Process Stopped. Use Step or Run to continue. como se fosse algum erro debugador, se eu peço pra executar sem debbug, ele começa o processo e depois para. O sistema é com firebird 2.0.3 Obrigado
-
Como assim, num entendi, sempre trabalhei da forma atual e nunca tive problema.
-
Olá, estou usando D2007 e Firebird 2.1 e meus projetos localmente funcionam normalmente, mas, quando vou colocá-los em rede esse erro aparece, alguém tem idéia do que pode ser? Obrigado
-
Oi, estou com um problema em uma aplicação web, com php e firebird, quando imprimo um boleto, nos campos que contem valores, aparecem os numeros com os separadores decimal e milhar trocados, ex: 4,650.00, o problema é no php, no apache, ou no firebird? Obrigado
-
Gerar relatorio com quebra de paginas a partir de txt
pergunta respondeu ao fajo de fajo em Delphi, Kylix
A segunda opcao é mais interessante do ponto de vista de manter a originalidade do conteúdo do arquivo, agora, fazer, ai é outra coisa, vou bater meus tambores para lhe ajudar a lembrar desse componente. Obrigado -
Gerar relatorio com quebra de paginas a partir de txt
pergunta respondeu ao fajo de fajo em Delphi, Kylix
Já está assim, a questão é que no txt existe as numerção das páginas devido à geração do outro relatorio, então é necessário q eu repasse a quebra de página nesse mesmo local. -
Olá preciso imprimir um arquivo txt gerado por um relatório de um outro programa, esse arquivo já é gerado com toda a formatação, e querem ainda que eu coloque o logo da empresa, então copiei o conteúdo do arquivo para um dbrichedit q está associado a um clientdataset temporário com um único campo que recebe todo o contéudo do arquivo, então gero um relatório no quickreport, beleza, só que o problema é que preciso fazer a quebra de página no relatorio e não estou conseguindo, então o q preciso é localizar uma string no meu relatório(qrdbrichtext) e inserir uma quebra de página nesse ponto, isso tudo lógico antes de mostrar o preview do relatório, complicado? Espero a ajuda de vocês. Obrigado
-
Micheus, como sempre você disse tudo, só foi criar alguns indices q eu tinha esquecido e agora está mais rápido q o access! Valeu.
-
Olá, recentemente fiz uma migração num sistema feito com access para firebird e estou enfrentando problemas de lentidão em várias instruções SQL, como poderão ver algumas delas são idênticas, tirando é claro as particularidades do BD e por isso não entendo porque a diferença de tempo. Seguem algumas instruções: No Firebird: 1. INSERT INTO Tab_Historicos_Doadores ( Hdo_Doa_Id, Hdo_Tmh_Id, Hdo_Dt, Hdo_Fun_Id, Hdo_Complemento) SELECT Doc_Doa_Id, 10 AS Motivo, current_date AS Data, 937 AS Usuario, Doc_Id FROM Tab_Doacoes WHERE (current_timestamp - doc_data_operacao)>60 AND Doc_Func_Operadora = 937 AND Doc_Status_Doacao=2 2. DELETE FROM Tab_Doacoes WHERE (current_timestamp - doc_data_operacao)>60 AND Doc_Func_Operadora = 937 AND Doc_Status_Doacao=2 3. SELECT Tab_Doadores.Doa_Id FROM Tab_Doadores INNER JOIN Tab_Doacoes ON Tab_Doadores.Doa_Id = Tab_Doacoes.Doc_Doa_Id WHERE Tab_Doacoes.Doc_Func_Operadora=937 AND Tab_Doacoes.Doc_Status_Doacao=2 AND Tab_Doadores.Doa_Status="A" GROUP BY Tab_Doadores.Doa_Id HAVING Count(*)<3 No Access: 1. INSERT INTO Tab_Historicos_Doadores ( Hdo_Doa_Id, Hdo_Tmh_Id, Hdo_Dt, Hdo_Fun_Id, Hdo_Complemento) SELECT Tab_Doacoes.Doc_Doa_Id, 10 AS Motivo, Now() AS Data, 937 AS Usuario, Tab_Doacoes.Doc_Id FROM Tab_Doacoes WHERE ((Now()-[doc_data_operacao])>60) AND (Tab_Doacoes.Doc_Func_Operadora)= 937 AND (Tab_Doacoes.Doc_Status_Doacao)=2) 2. DELETE * FROM Tab_Doacoes WHERE ((Now()-[doc_data_operacao])>60) AND (Tab_Doacoes.Doc_Func_Operadora = 937) AND (Tab_Doacoes.Doc_Status_Doacao=2) 3. SELECT Tab_Doadores.Doa_Id FROM Tab_Doadores INNER JOIN Tab_Doacoes ON Tab_Doadores.Doa_Id = Tab_Doacoes.Doc_Doa_Id WHERE (Tab_Doacoes.Doc_Func_Operadora=937) AND (Tab_Doacoes.Doc_Status_Doacao=2) AND (Tab_Doadores.Doa_Status="A") GROUP BY Tab_Doadores.Doa_Id HAVING (Count(*)<3) no Firebird essas 3 instruções levam em média 3,5 segundos para serem executadas e no Access, no máximo 1,5, isso localmente. E está acontecendo essa lentidão com várias outras instruções; o que há de errado? Devo observar q tenho outros sistemas no mesmo pc q rodam normalmente no Firebird.
-
(Resolvido) Não Mostrar Registro Ao Abrir Formulário
pergunta respondeu ao fajo de fajo em Delphi, Kylix
É isso mesmo Micheus, valeu!!! Certinho, certinho!!! Obrigado -
(Resolvido) Não Mostrar Registro Ao Abrir Formulário
pergunta respondeu ao fajo de fajo em Delphi, Kylix
Estão sim Micheus, mas não basta dar um ClientDataSet1.close no fechamento do form! -
Estou com uma aplicação em D2007 e Firebird 2.0.3 usando dbexpress, os meus formulários só são criados quando vou abrí-los, assim como meus clientdataset's são abertos quando da criação dos forms e fechados no fechamento dos mesmos, assim como minhas instruções sql tem na sua maioria parâmetros q são repassados em tempo de execução; se executar a aplicação e abrir o form, nenhum registro é mostrado como deve ser, já q não foi feita consulta para repassar o parâmentro, então faço a consulta, repasso o parametro e é mostrado o registro, beleza, só q se fechar o form e abrir novamente o registro tá lá, como se ele guardasse o parametro e já jogasse no clientdataset, e é exatamento isso q não quero!! Quando abrir o form, quero limpo!! Alguma sugestão? Obrigado
-
Jhonas, resolvi fazer o aconselhado, coloquei um JvGifAnimator, associei uma animação, só que, mesmo ativa, a animação para enquanto a consulta está abrindo, quando termina ai o animate mostra a ativação, como se no momento do processamento, a animação parasse!! Obrigado
-
Estou trabalhando com Firebird e uma consulta está demorando muito, uns 20 segundos, sendo q a tabela só tem 4500 registros; não sei se é normal, se for, gostaria de criar uma progressbar q fosse sendo preenchida enquanto a consulta ia abrindo pra não dar a impressão de q o sistema está travado!! "select distinct(cod_orvnd) from pedidos where not cod_orvnd in (select cod_orvnd from pedidos where entrega is null) order by cod_orvnd" alguma sugestão?! Obrigado
-
Bom, estou migrando um sistema em Access para Firebird e me deparei com um problema, uma de suas consultas tem o conteúdo: "SELECT Tab_Producao.Pro_Fun_Id, Day([Pro_Dt]) AS Dias, Tab_Producao.Pro_Dt, Format([Pro_Dt],'yyyymm') AS Refer, Tab_Producao.Pro_Valor FROM Tab_Producao WHERE Tab_Producao.Pro_Fun_Id = 882 AND Format([Pro_Dt],'yyyymm') = 200705 AND Tab_Producao.Pro_Quinzena = "1" ORDER BY Tab_Producao.Pro_Fun_Id, Tab_Producao.Pro_Dt" que convertendo para firebird ficou assim: "SELECT PRO_FUN_ID, extract(day from PRO_DT) AS DIAS, PRO_DT, (extract(year from PRO_DT) || extract(month from PRO_DT)) AS REFER, PRO_VALOR FROM TAB_PRODUCAO WHERE Pro_Fun_Id = 882 AND (extract(year from PRO_DT) || extract(month from PRO_DT)) = 200705 AND PRO_QUINZENA = 1 ORDER BY PRO_FUN_ID, PRO_DT" o grande problema é na formatação do mês - extract(month from PRO_DT) - pois da forma q está o retorno é 20075, o q é diferente de 200705; alguma sugestão?
-
Valeu Micheus
-
Jhonas, a mensagem continua...
-
Estou necessitando deste select: SELECT Tab_Doacoes.Doc_Doa_Id, 10 AS Motivo, current_date AS Data, 937 AS Usuario, Tab_Doacoes.Doc_Id FROM Tab_Doacoes WHERE (((current_date - doc_data_operacao)>60) AND ((Tab_Doacoes.Doc_Func_Operadora)=937) AND ((Tab_Doacoes.Doc_Status_Doacao)=2)) mas tá dando erro: "expression evalution not supported" uso o Firebird 2.0, há alguma forma de remediar isso? Obrigado
-
Olá, tenho uma tabela com os seguintes campos: n_req cod_orc entrega 1 25/07 sim 2 32/07 sim 3 25/07 <null> 4 45/07 sim 5 32/07 sim sempre que uma requisição tá pronta, é colocado um sim no campo entrega; onde cada orcamento pode ter várias requisições, gostaria que um select, só me retornasse os registros cuja entrega seja "sim" mas por orcamento, ou seja, se aplicada na tabela acima, o retorno tem que ser: 2 32/07 sim 4 45/07 sim 5 32/07 sim o orcamento 25/07 não deve aparecer pois uma de suas requisições está <null>; Obrigado
-
Eis a questão, seria interessante se quando clicasse no botão salvar ele habilitasse a imagem!!!
-
Oi, tenho um relatório em Delphi e Quick Report, e como é impresso em papel timbrado não é impresso com o logo da impresa, só que o relatório também pode ser salvo em pdf, e o que eu gostaria é que quando eu fosse salvá-lo ele inserisse o logo no relatório. tem como? Obrigado
-
Tem não Micheus, só aparece os grupos, RzGroup1, etc..., dentro dos grupos é que estão os itens!!