Ir ao conteúdo
  • Cadastre-se

jeffersoncg

Membro Júnior
  • Posts

    16
  • Cadastrado em

  • Última visita

Tudo que jeffersoncg postou

  1. Olá, estou tentando pegar os saldos via SQL, mas estou tendo muito dificuldade em otimiza-lo. Tenho o seguinte código: SELECT (SELECT ROUND(SUM(E.Valor), 2) AS "CREDITO" FROM extratos E INNER JOIN `ctritensacessos` Ct ON Ct.Classe = "PLANOCONTAS" AND Ct.Usuario = :pUsuario AND Ct.Permitido = 1 INNER JOIN planocontas Pc ON Pc.Codigo = Ct.Codigo AND Pc.Ativado = 1 WHERE E.Doc = Pc.Sigla AND E.Contaid = :pEstab AND E.CD = "C" AND DATA BETWEEN :pDataInicio AND :pDataFim) AS CREDITO, (SELECT ROUND(SUM(E.Valor), 2) AS "DEBITO" FROM extratos E INNER JOIN `ctritensacessos` Ct ON Ct.Classe = "PLANOCONTAS" AND Ct.Usuario = :pUsuario AND Ct.Permitido = 1 INNER JOIN planocontas Pc ON Pc.Codigo = Ct.Codigo AND Pc.Ativado = 1 WHERE E.Doc = Pc.Sigla AND E.Contaid = :pEstab AND E.CD = "D" AND DATA BETWEEN :pDataInicio AND :pDataFim) AS DEBITO, ((SELECT ROUND(SUM(E.Valor), 2) AS "CREDITO" FROM extratos E INNER JOIN `ctritensacessos` Ct ON Ct.Classe = "PLANOCONTAS" AND Ct.Usuario = :pUsuario AND Ct.Permitido = 1 INNER JOIN planocontas Pc ON Pc.Codigo = Ct.Codigo AND Pc.Ativado = 1 WHERE E.Doc = Pc.Sigla AND E.Contaid = :pEstab AND E.CD = "C" AND DATA < :pDataFim)- (SELECT ROUND(SUM(E.Valor), 2) AS "DEBITO" FROM extratos E INNER JOIN `ctritensacessos` Ct ON Ct.Classe = "PLANOCONTAS" AND Ct.Usuario = :pUsuario AND Ct.Permitido = 1 INNER JOIN planocontas Pc ON Pc.Codigo = Ct.Codigo AND Pc.Ativado = 1 WHERE E.Doc = Pc.Sigla AND E.Contaid = :pEstab AND E.CD = "D" AND DATA < :pDataFim)) AS SALDOANTERIOR Tentei fazer todo o código com Inner Join, mas a única coisa que conseguir foi travar minha base. A ideia é pegar da base "Extratos" todo o movimento Crédito, Débito, e o Saldo(Crédito-Débito)+Saldo Anterior(Crédito-Débito do período anterior ao atual), mas apenas com condições extremamente fechadas, como descrito abaixo. SELECT ROUND(SUM(E.Valor), 2) AS "CREDITO" FROM extratos E INNER JOIN `ctritensacessos` Ct ON Ct.Classe = "PLANOCONTAS" AND Ct.Usuario = :pUsuario AND Ct.Permitido = 1 INNER JOIN planocontas Pc ON Pc.Codigo = Ct.Codigo AND Pc.Ativado = 1 WHERE E.Doc = Pc.Sigla AND E.Contaid = :pEstab AND E.CD = "C" AND DATA BETWEEN :pDataInicio AND :pDataFim) AS CREDITO Acima, soma o Crédito apenas das contas quais os PLANOS DE CONTA aos quais o usuário tem ('ctritensacessos'). Tentei ao como 'INNER JOIN extratos Cred', 'INNER JOIN extratos Deb', mas a base apenas trava por excesso de uso, será que tem algum jeito de melhorar esse código sem fazer esse monte de SELECT? Agradeço muito a ajuda.
  2. @pomeranodacohab Ah sim, eu tenho gostado bastante da Asus, meu celular e placa-mãe são dela, acho que vou pegar essa da Asus que tu recomendou mesmo. Obrigado. E obrigado a todos que ajudaram
  3. Obrigado PlayerUzumaki, pela pesquisa que fiz rápida aqui no trabalho, creio que essa talvez sirva: https://www.kabum.com.br/produto/135485/placa-de-video-galax-nvidia-geforce-rtx-3070-14-gbps-8gb-gddr6-dlss-ray-tracing-37nsl6md2koc?gclid=Cj0KCQiA6t6ABhDMARIsAONIYyyaZh2IkAI3l1Yo3TS5SOrxo5E5pLkRQRKIQ75DflG4Z2mDbsQG9GcaAnGJEALw_wcB Ela tem aquele DLSS que você havia comentado.
  4. Ah sim, entendi, tem alguma marca em especifico que recomende? Eu vi que tem várias, Evga, Asus e tal... Não sei entre qual escolher, tem diferença?
  5. Muito obrigado, eu estava pensando, se eu colocar duas RTX 2060/70 elas pegam juntas? E meu sistema suporta? Não entendo basicamente nada disso, aí se for o caso, compro uma primeiro, e depois se ficar fraco e for necessário compro mais uma se o Pc suportar
  6. @Angern Creio que consigo até no máximo 15k, vai apertar muito minhas finanças, mas talvez em 12x eu consiga pagar de algum jeito.
  7. Olá, estou querendo comprar uma placa de video para meu computador, mas não sei qual comprar, estou querendo uma placa boa, preferencialmente com Ray Tracing. Algo que consiga rodar graficos desses abaixo. Meu pc usa graficos integrados, então só consigo jogar alguns jogos, e com gráficos no mínimo, sempre em modo janela 720p, isso quando os jogos pegam. Graficos: CPU Z: Especificações: Sistema Operacional: Windows 10 X64 - Enterprise placa-mãe: ROG MAXIMUS X HERO (WI-FI AC) Memoria: 32GB DDR4 - 2666 (2x16) Armazenamento: 2X256GB SSD M.2 (Raid), 3X1TB HDD Interno (Raid), 1X2 TB HDD Externo, 1X10TB HDD Externo Cooler: Water Cooler Corsair H100X Hydro Series Processador: Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz Fonte: Corsair 1000W 80 Plus Gold Modular RM1000X Gostaria se possivel de uma placa da linha RTX, não sei se são compativeis com minha placa-mãe, mas se for, alguma que me permita rodar jogos pessados e com ótimos graficos. Realmente agradeço a ajuda. Obs: Não sei se é assim que se posta as imagens, mas como não consegui de outra forma...
  8. Muito obrigado Fazzioni, deu certinho, passei boa parte dos itens para FindComponent, já que as telas de busca/filtro são as mesmas e eu ficava copiando e colando o codigo em todos os Form's, agora tenho apenas no form "Modulo", e nas outras apenas seguem com o mesmo nome e o codigo identifica qual objeto chamar. Obrigado de verdade amigo.
  9. Boa tarde, estou tendo uma dificuldade de criar um Obejeto no delphi, preciso achar um jeito fácil de chamar esse objeto, preferencialmente através do "FindComponent", mas não sei ao certo como fazer a criação de objetos, tentei de varias formas e em todas me resultou erro. O record que tenho é o seguinte: type TFiltroComboBox = record Itens: TStringList; Ids: TStringList; procedure Create; procedure Free; procedure Clear; procedure Adicionar(Texto: string; Id: Integer); procedure Remover(Index: Integer); function Count: Integer; function Created:Boolean; end; Estou usando a função "Create" apenas para inicializar as TStringList, a free para limpar o record, e a Clear somente para zerar as TStringList. Seria possivel passar isso para TObject? Ai quando eu precisasse localiza-lo pelo nome, eu apenas faria "Form.FindComponent('Component')". Realmente agradeço a ajuda, estou tentando otimizar o codigo do meu sistema, e a localização dos componentes vai me ajudar muito nisso, já que eu estou sempre indicando o record manualmente em cada uso, sendo que eu poderia padronizar os nomes dos components e fazer a busca pelo nome, assim chegando ao objeto que quero.
  10. Amigo era isso mesmo, eu não queria ter que rodar por todo o form e ele ler component por component, já que a lista era pré definida, ai no caso iria mais rápido. O meu código lá de cima não pegava por causa do " as TControl". Coloquei como você fez ai, e deu certo. with (IComp as TControl) do begin ShowHint := xHint <> EmptyStr; Hint := UTF8ToUnicodeString(xHint); end; Muito obrigado mesmo Fazzioni.
  11. Olá, estou tendo um pequeno problema no Delphi, estou tentando carregar um arquivo Ini, e jogar as configurações setadas nesse ini, nos objetos do form, nesse caso em especifico, os Hints. Mas não importa como eu altere essa função, ele não altera os hints do do form, apesar que (na minha cabeça) não parece ter erro nesse código. procedure TModulo.CarregarHints(Form: String); var ArqIni: TIniFile; IForm: TForm; IComp: TComponent; x, CompMax: Integer; CompList: TStringList; xHint: String; begin Form := PegarNomeForm(Form); ArqIni := TIniFile.Create(Config.Desconto_PathConfig+'Hints.ini'); try if not ArqIni.SectionExists(Form) then Exit; IComp := Application.FindComponent(Form); if Assigned(IComp) then IForm := TForm(IComp) else Exit; CompList := TStringList.Create; ArqIni.ReadSection(Form, CompList); CompMax := CompList.Count-1; for x := 0 to CompMax do begin try IComp := IForm.FindComponent(CompList[x]); if Assigned(IComp) then begin xHint := Trim(StringReplace(ArqIni.ReadString(Form, CompList[x], ''), '#13', #13, [rfReplaceAll, rfIgnoreCase])); TForm(IComp).ShowHint := xHint <> EmptyStr; TForm(IComp).Hint := UTF8ToUnicodeString(xHint); end; except on E: Exception do ShowMessage(E.Message); end; end; finally IForm := nil; IComp := nil; if Assigned(CompList) then FreeAndNil(CompList); FreeAndNil(ArqIni); end; end; Com esse código, ele carregaria os hints, e jogaria em cada um dos componentes que estivessem escritos no ini. Eu consegui fazer ele funcionar com o código: Onde: THintsControl é um record com duas array's: ArrayA: Array of Integer; //Guarda o Index do Componente ArrayB: Array of String; //Guarda o Hint do Componente function TModulo.CarregarHints(Form: String):THintsControl; var ArqIni: TIniFile; IForm: TForm; IComp: TComponent; x, CompMax, CompIndex: Integer; CompList: TStringList; xHint: String; begin Form := PegarNomeForm(Form); ArqIni := TIniFile.Create(Config.Desconto_PathConfig+'Hints.ini'); try if not ArqIni.SectionExists(Form) then Exit; IComp := Application.FindComponent(Form); if Assigned(IComp) then IForm := TForm(IComp) else Exit; CompList := TStringList.Create; ArqIni.ReadSection(Form, CompList); CompMax := CompList.Count-1; SetLength(Result.ComponentsIndex, CompMax+1); SetLength(Result.ComponentsHints, CompMax+1); for x := 0 to CompMax do begin try IComp := IForm.FindComponent(CompList[x]); if Assigned(IComp) then begin CompIndex := IComp.ComponentIndex; xHint := StringReplace(ArqIni.ReadString(Form, CompList[x], ''), '#13', #13, [rfReplaceAll, rfIgnoreCase]); Result.ComponentsIndex[x] := CompIndex; Result.ComponentsHints[x] := UTF8ToUnicodeString(xHint); end else begin Result.ComponentsIndex[x] := -1; Result.ComponentsHints[x] := ''; end; except on E: Exception do ShowMessage(E.Message); end; end; finally IForm := nil; IComp := nil; if Assigned(CompList) then FreeAndNil(CompList); FreeAndNil(ArqIni); end; end; E depois, no form que estou querendo carregar os hints, eu faço : var x, xMax: integer; begin HintsCtr := Modulo.CarregarHints(Self.Name); with HintsCtr do begin xMax := Length(ComponentsIndex)-1; for x := 0 to xMax do begin if ComponentsIndex[x] > -1 then TEdit(CadVeiculos.Components[ComponentsIndex[x]]).Hint := ComponentsHints[x]; end; end; end; Mas parece ser uma gambiarra gigantesca fazer assim. Não teria um jeito correto de fazer o primeiro código funcionar? Onde apenas informando o nome do form, eu consigo carregar os hints corretamente? Realmente agradeço a ajuda.
  12. Eu ia tentar lhe enviar por MP pra não fazer post desnecessário, mas como sou novo, não tenho permissão pra enviar MP. Aqui o código como consegui corrigir, não sei se essa é a maneira mais correta, mas é o máximo que consegui. SELECT vca.Codigo, MAX(vca.EstabCodigo) AS EstabCodigo, MAX(vca.EstabNome) AS EstabNome, MAX(vca.VendaCodigo) AS VendaCodigo, MAX(vca.CartaoCodigo) AS CartaoCodigo, MAX(vca.ConvCodigo) AS ConvCodigo, MAX(vca.ClienteCodigo) AS ClienteCodigo, MAX(vca.ClienteNome) AS ClienteNome, MAX(vca.ValorBruto) AS ValorBruto, MAX(vca.ValorLiquido) AS ValorLiquido, MAX(vca.Taxa) AS Taxa, MAX(vca.DescJur) AS DescJur, MAX(vca.VeiculoCodigo) AS VeiculoCodigo, MAX(vca.VeiculoPlaca) AS VeiculoPlaca, MAX(vca.VeiculoModelo) AS VeiculoModelo, MAX(vca.MotoristaCodigo) AS MotoristaCodigo, MAX(vca.MotoristaNome) AS MotoristaNome, MAX(vca.DataVenda) AS DataVenda, MAX(vca.HoraVenda) AS HoraVenda, MAX(vca.VeiculoKM) AS KMAtual, MAX(IFNULL(vcant.VeiculoKM, vei.KMInicial)) AS KMAnterior, MIN(IFNULL(vca.VeiculoKM-IFNULL(vcant.VeiculoKM, vei.KMInicial), 0)) AS KMPercorrido, SUM(IFNULL(vdet.quantidade, 0)) as LitrosAbastQuant, SUM(IFNULL(vdet.valorliquido, 0)) as LitrosAbastValor, MAX((IFNULL(vca.VeiculoKM-IFNULL(vcant.VeiculoKM, vei.KMInicial), 0)/(IFNULL(vdet.quantidade, 0)))) AS MediaAtual FROM vendascartao vca LEFT JOIN vendascartao vcant ON vcant.VeiculoCodigo = vca.VeiculoCodigo AND vca.DataHora > vcant.DataHora JOIN veiculos vei ON vei.codigo = vca.VeiculoCodigo JOIN vendasdetalhamento vdet ON vdet.VendaCodigo = vca.VendaCodigo AND vdet.ProdutoCod = vei.CombustivelCodigo GROUP BY vca.codigo Mais uma vez Joseph, obrigado, tu salvou meu sistema, já que ele é totalmente baseado em controle de frota, e precisava funcionar sem muita lentidão, já que vai estar em computadores fora da rede, via internet.
  13. Muito obrigado Joseph, era exatamente isso que eu precisava, e obrigado também pela explicação. Consegui entender bem melhor agora como trabalhar com SQL. Estou utilizando a versão 5.7 do MYSQL, testei seu código aqui e funcionou perfeitamente. Vou tentar adaptar o outro também. Mais uma vez, muito obrigado, e um forte abraço.
  14. Eu estou tentando seguir sua dica, e otimizar ele usando inner Join, mas me surgiu uma dúvida. Como eu converteria a função seguinte, sem que ela fizesse minha função inteira chamar apenas 1 Record? ifnull((select max(VeiculoKM) from vendascartao where vendascartao.VeiculoCodigo = Cartoes.VeiculoId), KmInicial) as UltimoKM Eu chamo assim, pois quando tento chama apenas o max(veiculoKm), ele faz toda a função retornar apenas um record, além eu não poder fazer verificações nele. Estou tentando chamar ele assim: Como aquele código acima esta muito bagunçado, estou tentando simplificar um mais simples, pra tentar entender melhor a "simplificação", ai tento simplificar ele também. O código que utilizo esse acima é o seguinte: select cartoes.Codigo, Uid, Serial, ConvenioId, ConvenioNome, UtilizadorId, UtilizadorNome, CartaoNumero, Ativado, DtCadastro, DtUltPassagem, Historico, Senha, Bloqueado, VeiculoId, Placa, MarcaModelo, Concat(veiculos.AnoFab, "/",veiculos.AnoMod) as Ano, ifnull((select max(VeiculoKM) from vendascartao where vendascartao.VeiculoCodigo = Cartoes.VeiculoId), KmInicial) as UltimoKM, funcionarios.Codigo as MotoristaCodigo, funcionarios.Nome as MotoristaNome, funcionarios.CPF as MotoristaCPF from cartoes inner join veiculos on veiculos.Codigo = cartoes.VeiculoId inner join funcionarios on funcionarios.Codigo = veiculos.MotoristaCodigo
  15. Eu estava pensando se não tem um jeito de alterar esses SubSelects repetidos, pra uma variavel, deixar apenas um Select, que passa o valor pra variavel e a variavel nos outros, pois varios dos selects são o mesmo, mas é que como são informações diferentes que são puxadas, eu preciso confirmar toda vez. Estava pensando em algo tipo: declare @DtLanc = CnvDt(DATAVENDA,HORAVENDA); declare @KmInicial = (select veiculos.KMInicial from veiculos where veiculos.codigo = vendascartao.veiculocodigo); declare @KmAnt = ifnull((SELECT max(VeiculoKM) from vendascartao as vendascartaoa where vendascartaoa.VeiculoCodigo = vendascartao.VeiculoCodigo and CnvDt(vendascartaoa.DATAVENDA,vendascartaoa.HORAVENDA) < @DtLanc), @KmInicial); declare @KmPerc = (VeiculoKM-@KmAnt, @KmInicial))) declare @CombCodigo = (select veiculos.CombustivelCodigo from veiculos where veiculos.Codigo = vendascartao.VeiculoCodigo); declare @LtsAbst = ifnull((select vendasdetalhamento.quantidade from vendasdetalhamento where vendasdetalhamento.VendaCodigo = vendascartao.VendaCodigo and vendasdetalhamento.ProdutoCod = @CombCodigo), 0); declare @MdAtual = ifnull(KmPerc/LtsAbst, 0); SELECT Codigo, EstabCodigo, EstabNome, VendaCodigo, CartaoCodigo, ConvCodigo, ClienteCodigo, ClienteNome, ValorBruto, ValorLiquido, Taxa, DescJur, VeiculoCodigo, VeiculoPlaca, VeiculoModelo, MotoristaCodigo, MotoristaNome, @DtLanc as DataEHora, VeiculoKM as KMAtual, @KmAnt AS KMAnterior, KmPerc AS KMPercorrido, @LtsAbst AS LitrosAbst, @MdAtual as MediaAtual FROM `vendascartao` O que esta declarado como @Variavel são as definidas, as que não estão, são campos da tabela que vão contem informação. Seria possível fazer algo assim? Isso daria uma ótima reduzida no código, mas eu não entendo de SQL, então não sei a estruturação que se usa na hora de escrever um código.
  16. Bom dia, sou novo aqui no Clube do Hardware, mas sempre acompanhei as dicas que o pessoal passa, dessa vez resolvi me inscrever pra pedir ajuda também. Tenho esse código, mas ele tá muito mal otimizado, eu jogo ele em uma query no Delphi, mas como as vezes tem muitos resultados, fica muito lento. Eu não entendo de SQL, alguém poderia me ajudar a converter ele para uma função/procedimento ou otimiza-lo? Eu realmente agradeço, preciso muito desse código. As condições de busca, eu jogarei depois, ainda estou desenvolvendo essa parte. A função CnvDt apenas junta dois campos separados Date e Time em um DateTime pra poder fazer comparação de data e hora. SELECT Codigo, EstabCodigo, EstabNome, VendaCodigo, CartaoCodigo, ConvCodigo, ClienteCodigo, ClienteNome, ValorBruto, ValorLiquido, Taxa, DescJur, VeiculoCodigo, VeiculoPlaca, VeiculoModelo, MotoristaCodigo, MotoristaNome, CnvDt(DATAVENDA,HORAVENDA) as DataEHora, VeiculoKM as KMAtual, ifnull((SELECT max(VeiculoKM) from vendascartao as vendascartaoa where vendascartaoa.VeiculoCodigo= vendascartao.VeiculoCodigo and CnvDt(vendascartaoa.DATAVENDA,vendascartaoa.HORAVENDA) < CnvDt(vendascartao.DATAVENDA,vendascartao.HORAVENDA)), (select veiculos.KMInicial from veiculos where veiculos.codigo = vendascartao.veiculocodigo)) AS KMAnterior, (VeiculoKM-ifnull((SELECT max(VeiculoKM) from vendascartao as vendascartaoa where vendascartaoa.VeiculoCodigo= vendascartao.VeiculoCodigo and CnvDt(vendascartaoa.DATAVENDA,vendascartaoa.HORAVENDA) < CnvDt(vendascartao.DATAVENDA,vendascartao.HORAVENDA)), (select veiculos.KMInicial from veiculos where veiculos.codigo = vendascartao.veiculocodigo))) AS KMPercorrido, ifnull((select vendasdetalhamento.quantidade from vendasdetalhamento where vendasdetalhamento.VendaCodigo = vendascartao.VendaCodigo and vendasdetalhamento.ProdutoCod = (select veiculos.CombustivelCodigo from veiculos where veiculos.Codigo = vendascartao.VeiculoCodigo)), 0) AS LitrosAbst, ifnull(((VeiculoKM-ifnull((SELECT max(VeiculoKM) from vendascartao as vendascartaoa where vendascartaoa.VeiculoCodigo= vendascartao.VeiculoCodigo and CnvDt(vendascartaoa.DATAVENDA,vendascartaoa.HORAVENDA) < CnvDt(vendascartao.DATAVENDA,vendascartao.HORAVENDA)), (select veiculos.KMInicial from veiculos where veiculos.codigo = vendascartao.veiculocodigo))))/ifnull((select vendasdetalhamento.quantidade from vendasdetalhamento where vendasdetalhamento.VendaCodigo = vendascartao.VendaCodigo and vendasdetalhamento.ProdutoCod = (select veiculos.CombustivelCodigo from veiculos where veiculos.Codigo = vendascartao.VeiculoCodigo)), 0), 0) as MediaAtual FROM `vendascartao` Muito obrigado mesmo, de verdade.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!