Ir para conteúdo
Fórum Script Brasil

Lazaruz

Membros
  • Total de itens

    41
  • Registro em

  • Última visita

Tudo que Lazaruz postou

  1. Olá Jhonas, não , eu não tenho nada assignado neste DBGrid aliaz nem o editor de campos dele não estou usando. Ele carrega default da ZQry com DataSource. Detalhe isso acontece a partir de uns 15 registros. Menos que isso não acontece.
  2. Olá !! alguém saberia de como inibir esta oscilação quando o DBGRID carrega. Isto acontece quando faço Query.open, e agente ve ele carregando e tremendo todinho . É horrivel.. Ao final ele apresenta normalmente os dados. Uso Lazaruz e no Delphi deve ser parecido.
  3. Olá Jhonas. É o mesmo do post anterior: De qualquer forma e qualquer modelo de procedimento que testei esbarra sempre neste detalhe desta constante de cor ou outra qualquer: procedure Tform1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); BEGIN if (Column.Field.FieldName = 'campovalor') then begin if (Dtm.ZQuery1.FieldByName('campoValor').Value < 0) then begin DBGrid1.Canvas.Font.Color:= clRed; end else DBGrid1.Canvas.Font.Color:= clWindowText; DBGrid1.Canvas.FillRect(Rect); DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end; END;
  4. Já li todos as dicas. Agradeço. Ate usei uma delas mas o problema parece outro que nunca vi antes: Não compila com estes erros: Error: Incompatible type for arg no. 1: Got "Constant String", expected "TGraphicsColor" Error: identifier idents no member "DefaultDrawDataCell" Error: identifier idents no member "DefaultDrawDataCell" Uso é com Lazarus 2.0.8.
  5. Olá!! Estou usando esta rotina para tentar pintar valores negativos no DBgrid do Lazarus que deve ser parecido com com Delphi, mas estou recebendo um erro no valor de canvas: DBGrid1.Canvas.Font.Color:= clRed; O Lazarus não reconhece a constante clRed procedure Tform1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); BEGIN if (Column.Field.FieldName = 'campovalor') then begin if (Dtm.ZQuery1.FieldByName('campoValor').Value < 0) then begin DBGrid1.Canvas.Font.Color:= clRed; end else DBGrid1.Canvas.Font.Color:= clWindowText; DBGrid1.Canvas.FillRect(Rect); DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end; END; ERRO: form1.pas Error: Identifier not found "clRed" alguém poderia me auxiliar por gentileza?! grato.
  6. Sim sempre. Já instalei desinstalei várias vezes inclusive na versão anterior que eu usava. O delphi tambem é assim, mas deve haver uma maneira de inibir isto .... não?
  7. Olá , Já procurei bastante mas não encontro nada que me ajude a desconfigurar essa ação que o Lazarus tem de toda vez que vou abrir meu projeto ele abre um novo projeto que eu nem pedi. Isto esta incomodando bastante. O que achei é como colocar ele para abrir o último projeto , mas não serveria. alguém sabe disto?
  8. Desculpe, Jhonas voce fez referencia ao Ricardo. Testei a solução do parceiro e acabei adotando a opção simples do próprio Lazarus conforme já descrito. OBS. No PC desenvolvedor deve estar nas configurações padrões de video inclusive aquele item que trata tamanho de letra 100%,125% etc. No meu caso estava 125% e não dava certo quando eu levava o executável produzido para o lap-top. Com este ajuste funcionou normal e o executável ajusta certinho quando eu executo no lap -top.
  9. gradeço novamente Jhonas. Acabei conseguindo instalar o Lazarus 2.0.8 + Zeos 7.2.6. Confirmo aqui que são compatíveis e funcionais. Uma questão de compatibilidade de tamanho de forms que resolvi com a versão Las2.0.8, e reportei no post relativo. Agora vai...!!!
  10. Olá , Ricardo agradeço a ajuda. Neste meio tempo estive tetando em outro modo mais simples que o Lazarus proporciona, mas vou registrar aqui os seu esforços e guardar para um hora que meus teste não surtirem efeito desejado. Consegui trocar o Lazarus 1.6 para 2.0.8 e este já traz alguns parâmetros bate pronto no Options->Project_>Usar escalonamento e Resurso de manifesto e Scaled nos forms = true. Com isso pelo menos até agora deu certo . Vou continuando aqui com meus testes. Obrigado.
  11. Olá Jhonas, já tinha iniciado o processo de instalação do Z-726 e já funcionando no meu Laz1.6 . Agradeço esta informação mas esclarecendo melhor, esta versão Z-7.2.6 deve funcionar em Lazarus 2.0.4 ? Por que o próximo passo é sair do Laz 1.6 agora.
  12. Tenho um programa que fiz em Lazarus no PC, mas no Laptop as telas não ficam compatíveis. Existe algum componente que trate isso? No delphi existia um Scaled etc..
  13. Alguém saberia se existe Zeos que funcione no Lazarus 2.x em diante? Já tentei por muito fazer funcionar o Z-7.2.4 no Laz 2.x mas eu só consigo exito no Laz 1.6.
  14. Obrigado Jhonas, realmente este procedimento irei precisar mais a frente, mas é bom saber que da para fazer por ele. Eu já ia mesmo apresentar o meu resultado baseado no DOC que postou , onde diz que em resumo entende-se que não só assignar Required só, não faz o efeito, tendo então eu adaptei um ex. que vi em algum outro lugar e ficou bem simples e construi em um função global que agente pode reuzar em qualquer DataSet: //Se for em um arquivo de funcoes simples: unit UnFUNCOES; {$mode objfpc}{$H+} interface USES Classes, sysutils,Dialogs,ZDataset,Forms,Db{TField}; //Declara: function ValidaEntradas(Dset:TDataSet): Boolean; //Varre todos os campos do DataSet e Checa quais tem Required function ValidaEntradas(Dset:TDataSet): Boolean; var i :Integer; Campos :TStrings; begin try Campos := TStringList.Create; //Cria cx de MSGs e guardo os campos //requeridos depois mostro a lista for i:=0 to Dset.Fields.Count-1 do begin if Dset.Fields[i].Required then begin if (Dset.Fields[i].AsString=EmptyStr) then Campos.Add(Dset.Fields[i].DisplayName); end; end; if (Campos.Text<>Emptystr) then begin //indice é a posicao na lista. Campos.Insert(0, ' Campos mantatórios:'); Campos.Insert(1, EmptyStr); ShowMessage(Campos.Text); result := false; end else result := true; finally Campos.Free; end; end; END. Usando dentro de um Datamodule: procedure TDataModule1.Query1BeforePost(DataSet: TDataSet); BEGIN if not ValidaEntradas(DataModule1.Query1) then Abort; //congela e mantem tela de edicao, mesmo se for no Grid END; Agora ficou universal e perfeito.
  15. Voce por acaso não quiz dizer OncolExit, se for isso eu já utilizo alguns assim, mas ColEnter não sei como.
  16. Não sei porque esses compiladores mais novos não faz mais como antes. Tem coisas que não da para entender. No D-5 era so mesmo eu assignar o required e vinha MSG padrão, dai era só traduzir o arquivo de mensagens. Bem.... vamos lá.. |Para testar campo mandatório tentei isto, mas não funcionou. procedure ZQueryTIPOValidate(Sender: TField); begin if ZQuery.FieldByName('TIPO').Required then begin if ZQuery.FieldByName('TIPO').IsNull then begin Raise exception.create('CAMPO OBRIGATORIO.'#10); end; end; end; Obs : Não estou utilizando nenhum componente TEdit, e somente edição em DBgrid.
  17. Olá! Ao utilizar Delphi eu assignava true na propriedade Required dos campos de Query e em modo runtime barrava situação de campo em branco automaticamente sem ter de escrever nada nos edits. É um recurso prático e simples. Isto não esta fazendo efeito no Lazaruz 1.6. com ZQuery. alguém saberia se tenho que setar mais algo?
  18. Showww!! Valeu denovo. Deve ter vindo de algum baú e ainda de algum subterrâneo. Já li tantos livros e nunca vi isto. Funcionou! Abr.
  19. Olá a todos, Eu utiliava Delphi 5 e criei funções que tinham comutação de tuplas, sinais de operação e outro como strings etc. dentro de uma string de SELECT que operava o pseudo SQL de Paradox. ex: If condição = ativo varSinal := '+' else:= '-' SELECT a ' + varSinal + 'b AS RESULTADO FROM TABELA. não reparem a sintaxe, mas é só ilustrativa. Agora utilizo nas Zquery em Lazarus/pascal e não consegui concatenar a variavel que atribui o sinal de operação aritimética. Alguém se habilita por gentileza a um Help? Obrigado.
  20. Valeu, Jhonas. Ta lá o nosso trabalho.  Só não sei ate hoje como coloca os codigos dentro daquele scrollbox no site.abracao.

    1. Jhonas

      Jhonas

      Se voce quiser colocar algum código no seu post, clique no simbolo que aparece no  ( Menu ) a direita do U ( sublinhado )

      ( < > ) quando voce estiver  editando o post.

      Abraço

  21. Com enorme agradecimento ao companheiro Jhonas, que me acompanhou me me ajudou a estruturar a ideia, segue o resultado final, que consegui que fosse bem enxuto e operacional com uma procedure de calculos simples, e como sugerido sem tratar nada em stored procedures de banco. Após a criação das tabelas conforme posts anteriores: procedure Tform.calculaMED(Sender: TObject); begin With Dtm do begin ZQryResultAux.Open; //Criei uma Query igual a TBresult para o laço interno VTabNota.Open ; // Trabalhar no laço externo para agregar as notas nos calulos. //ANALISE: O laco interno é baseado na tabela auxiliar com os mesmos campos da tabela Result. //Tabela RESULT é gravada dado os parametros do laco executado na tabela AUXILIAR. // O laco externo serve para fazer o update nos casos de somas ou calculos de registros agregados. WHILE NOT ZQryNota.EOF do //dece selecionando cada NOTA begin ZQryResultAux.First; with ZQryResultAux do begin; //Posta os valores direto na tab fisica de resultado utilizando sub selects WHILE not EOF do begin //SOMA COLUNA TOT_ITEM E POSTA EM COLUNA TOTCOLUNA ZQryResult.sql.clear; ZQryResult.sql.add('UPDATE tbresult SET totcoluna = (SELECT SUM(tot_item) FROM tbresult WHERE idNC = :Param_numID) WHERE idNC= :Param_numID ; '); ZQryResult.ParamByName('Param_numID').AsString=:ZQryNota.FieldByName('id').asstring; ZQryResult.ExecSQL ; //CALCULA, POSTA CUSTO DE CADA ITEM ZQryResult.sql.clear; ZQryResult.sql.add('UPDATE tbresult SET custo_item = '+ '(SELECT ((((tot_custos) / tot_opers_liq * 100) * '+ '(tot_item / 100))) '+ 'FROM tbresult WHERE id_result = :ParamIDresult) WHERE id_result = :ParamIDresult; '); ZQryResult.ParamByName('ParamIDresult').AsString := ZQryResultAux.FieldByName('id_result').asstring; ZQryResult.ExecSQL ; ZQryResultAux.Next ; end; //EOF tabela auxiliar end; //Qry auxiliar VZQryNota.Next; end;//EOF notas end;//Dtm end;//Proced CALCULO DE CUSTO PROPORCIONAL: Fica ai para quem precisar. Tem várias utilidades. Obrigado ao site. Suma importância para auxílio ao desenvolvimento.
  22. Bem.... então eu mesmo respondo a questão: procedure TfLISTA.calcula(Sender: TObject); begin //CRIO A TABELA VIRTUAL TEMPORARIA QUE USO SO PARA ARMAZENAR A SOMA: Dtm.ZQryResult.sql.clear; Dtm.ZQryResult.sql.add('CREATE TEMP TABLE IF NOT EXISTS tbtempor(totcoluna FLOAT); '); Dtm.ZQryResult.ExecSQL; with Dtm.ZQryResult do //Faco tudo nesta nesta Query begin; close; -----------------------------------------------ELIMINO O BLOCO ABAIXO------------------------------------------------ Não é nescessário porque eu faço a soma aonde eu preciso (no caso na inclusao da tbtempor) e o campo alias não servira para pegar de outro select. //FACO A SOMA CRIANDO UM CAMPO ALIAS total // sql.clear; // sql.add('SELECT id,idNC, SUM(valorX) AS total FROM tbresult WHERE idNC = 27 ;'); // open; -------------------------------------FACO A SOMA AQUI MESMO COM valorX------------------------------------------- //ARMAZENO A SOMA NA TBTEMPORARIA: sql.clear; sql.add('INSERT OR REPLACE INTO tbtempor (totcoluna) VALUES ((SELECT SUM(valorX) FROM tbresult WHERE idNC = 27)); '); ----------------FAÇO UPDATE NA COLUNA TOTAL JÁ EXISTENTE NA TBRESULT -------------------- sql.clear; sql.add('UPDATE tbresult SET total = (SELECT totcoluna FROM tbtempor) WHERE idNC = 27;'); ExecSQL; ---------------------------------- OK AGORA É SÓ VISUALIZAR -------------------------------------------------------------- //SELECT DE VISUALIZACAO NO GRID sql.clear; sql.add('select * from tbresult; '); open; end;//QueryResult end;//Procedur //RESUMINDO: Um campo criado como ALIAS não serviria para calculo porque ele só processa no próprio select ativo. Para quem esta iniciando como eu fica ai a dica do erro.
  23. Será que estou fazendo certo? //Objetivo : fazer update de um resultado de uma soma anteriormente feita na mesma tabela. //tbresult é uma tabela normal criada em tempo de execução. //Tem 3 registros com ocorrencias de idNC = 27 na tabela tbresult //Criei uma tabela temporaria so para armazenamento de valor da soma porque SQLite não declara procedure. procedure TfLISTA.calcula(Sender: TObject); begin //CRIO A TABELA VIRTUAL TEMPORARIA QUE USO SO PARA ARMAZENAR A SOMA: Dtm.ZQryResult.sql.clear; Dtm.ZQryResult.sql.add('CREATE TEMP TABLE IF NOT EXISTS tbtempor(totcoluna FLOAT); '); Dtm.ZQryResult.ExecSQL; with Dtm.ZQryResult do //Faco tudo nesta nesta Query begin; close; //FACO A SOMA CRIANDO UM CAMPO ALIAS sql.clear; sql.add('SELECT id,idNC, SUM(valorX) AS total FROM tbresult WHERE idNC = 27 ;'); open; //Ok //ARMAZENO A SOMA NA TBTEMPORARIA: sql.clear; //VALUES(totcoluna) sql.add('INSERT OR REPLACE INTO tbtempor VALUES(SELECT total FROM tbresult WHERE idNC = 27); '); ExecSQL; //Ok com um valor fixo ex...values(1234) mas com a expressao do sub select acima não vem nada //TENTO FAZER UPDATE DO RESULTADO DA SOMA (que já deve esta na tbtempor) NA COLUNA TOTAL(já existente e não virtual e nem como alias) DA TBRESULT sql.clear; sql.add('UPDATE tbresult SET total = (SELECT totcoluna FROM tbtempor) WHERE idNC = 27;'); ExecSQL; //SELECT DE VISUALIZACAO NO GRID sql.clear; sql.add('select * from tbresult; '); open; end;//QueryResult end;//Procedur //RESUMINDO: Se eu colocar um valor VALUES(1234) O GRID TRAZ MAS SE EU COLOCAR: VALUES(SELECT total FROM tbresult WHERE idNC = 27) na TBTEMPOR, não VEM NADA.
  24. Correto, minha tbresult esta perfeita. O percebi é que ela é criada com campos como tipo TEXT e não VARCHAR(x), e ai que esta o estranho. Mas depois de testar de toda forma resolvi simplesmente seguir as orientações do site oficial SQLite, onde diz que não há como deletar colunas ou alterar nomes ou tipagem nas colunas, só aceitando ALTER TABLE tbresult ADD ...., portanto até que alguém apresente melhor devemos fazer tudo na mão grande mesmo: Obs.: Não utilizo componente clienteDataSet , uso Dsource e Zquery . 1- Criar tbresul_OLD baseada nos dados da tb operacao: procedure TformLISTA.calculaMED(Sender: TObject); Var i, reg, cc, counter : integer; begin with DTM do begin with ZQryResult do begin Active := false; sql.clear; sql.add('CREATE TABLE tbresult_OLD AS '+ 'SELECT . . . . . . . . . . . .'+ 'FROM tboperacao AS A '+ 'JOIN tbnota AS B ON (B.id = A.idNC) ;'); ExecSQL; { 2-Criar tbresult_NEW no modo normal de criacao declarando todos os campos com nome e tipagens originais:} sql.clear; sql.add('CREATE TABLE tbresult_NEW ('+ 'id INTEGER PRIMAY KEY, '+ 'idNC INTEGER, '+ 'data DATE, '+ { Val1,Val2,Va3 nÃo precisamos mais porque já tenho até aqui a soma deles TOT_CUSTO que servirá para o cálculo final.} 'num_nc VARCHAR(12), '+ 'nome_item VARCHAR(14), '+ 'tot_item FLOAT, '+ 'tot_custos FLOAT, '+ 'tot_coluna_item FLOAT, '+ 'custo_item FLOAT, '+ 'val_med_fin FLOAT); '); ExecSQL; { Seguindo com popular a tbresult_NEW. Deletar tbresult_OLD. Renomear tbresult_NEW para tbresult.} . . . . . . . .end // Query end; //Dtm (datamodule) end; //PROCEDURE Agora continuarei com os cálculos via PROCEDURE pascal como sugeriu e estruturou o laço para mim. Vou postando os resultados como ex para os demais interessados no post. Parece fácil , mas para mim não que estou saindo de outro tipo de bases de dados e estou engatinhando no SQL .
×
×
  • Criar Novo...