
robinhocne
Membros-
Total de itens
854 -
Registro em
-
Última visita
Tudo que robinhocne postou
-
(Resolvido) Ajuda no relatório de cheques
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Quando eu busco ele mostra que está recebendo o valor, mas nada mostra, agora a questão,se for no form voce tem que referenciar a unit do form no QR se for no QR voce tem que referenciar a unit do QR no form, ??????????? :wacko: :mellow: :blink: -
(Resolvido) Fazer atualização no Banco de dados sem interferir no
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Tentei o MScript.lines e dá o mesmo erro! -
(Resolvido) Fazer atualização no Banco de dados sem interferir no
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Dá esse erro na hora de compilar: -
(Resolvido) Fazer atualização no Banco de dados sem interferir no
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Resposta: Neste ponto peço ajuda aos universitários de plantão. Pois trabalho com MySQL e não sei nada de Firebird. Tá para o caminho eu fiz simples mesmo: Coloquei: >TEdit (TxtCaminhoBanco) >SpeedButton (SpbLocBanco) >OpenDialog (OpnBanco) >IbDatabase (DbaUp) >IbQuery (QryUp) >IbTransaction (TraUp) No botão coloquei esses comandos: if ( not opnBanco.Execute ) then Exit; txtCaminhoBanco.Text := opnBanco.FileName; Toda a Estrutura: procedure TFrmIzaUpDate.SpbATualizarClick(Sender: TObject); begin DbaUp.DatabaseName := TxtCaminhoBanco.Text; DbaUp.Connected := True; with QryAtualizacao do begin close; SQL.Clear; SQL.Add('#39 + MScript + #39'); ExecSql; end; DbaUp.Connected := False; DbaUp.Connected := True; end; procedure TFrmIzaUpDate.SpeedButton1Click(Sender: TObject); begin if ( not opnBanco.Execute ) then Exit; txtCaminhoBanco.Text := opnBanco.FileName; end; end. Ai estou conectando em um banco de dados e acrescentando tipo assim: Alter Table Cidades Add Local Varchar (50) E clico no botão para atualizar, mas dá esse erro: Dynamic SQL Error SQL error code = -104 Token unknown - line, char 0 # E agora? -
(Resolvido) Ajuda no relatório de cheques
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
voce tem certeza que valor1 := QrySomasLancados.FieldByName('Soma').AsFloat; está recebendo valor da QrySomasLancados ? verifique... Tenho sim, pois está assim: With QrySomasLancados do Begin QrySomasLancados.Close; QrySomasLancados.Sql.Text :='Select sum(Valor)as "SOMA" From Lancamento where cheque is not null'; QrySomasLancados.Open; end; valor1 := QrySomasLancados.FieldByName('Soma').AsFloat; -
(Resolvido) Ajuda no relatório de cheques
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
no evento onprint do QrLabel Total coloque Value := FloatToStr(valor1); abraço Não aconteceu nada continua na mesma. -
Acho que terminei um relatório, mas ele não me mostra a soma total: Uso o Delphi 7 e Firebird 2.0 Primeiramente montei um relatório no QuickReport 4 bandas, 1> RbTitle = com o titulo de relatórios 2> RbColumnReader = especificando os dados. 3> RbDetail = com os campos que vai me mostrar no relatório, no caso me mostra: o codigo do aluno, numero do cheque, conta, agencia e data de vencimento do cheque. 4> RbSummary = com um QrLabel nome de Total, onde vai me mostrar o meu total da soma: Os dados ficaram assim: Primeiramente declarei uma variavel na public: valor1, valor2, valor3 : Real; Acrescentei uam IbQuery para a instrução do relatório, a : > DtmIza => DataModule > QryIza => IbQuery que busca os dados do relatório na tabela de lancamentos de acordo com a instrução: > QrySomasLancados => IbQuery responsavel pela soma de valores para mostrar no QrLabel (Total), Pois estou fazendo um filtro para buscar os cheques por data de vencimentos. O Relatório (QuickRep1) esta linkado ao (DtmIza.QryIza). E no botão para exibir o relatório coloquei esses dados: With DtmIza.QryRelEmp do Begin Close; Sql.Clear; Sql.Add ('Select Codigo, Empresa, Cnpj From Empresa'); Open; end; With DtmIza.QryIza Do begin Close; Sql.Clear; Sql.Add('Select Aluno, Valor, Vencimento, Pagamento, Conta, Agencia, cheque, Tipo From Lancamento'); Sql.Add('where (Vencimento >= :d1) and (Vencimento <= :d2) and cheque is not null Order By Cheque, Vencimento '); ParambyName('d1').value := FormatDateTime ('dd/mm/yyyy' , StrToDate (TxtDataInicial.Text)); ParambyName('d2').value := FormatDateTime ('dd/mm/yyyy' , StrToDate (TxtDataFinal.Text)); Open; End; If DtmIza.QryIza.RecordCount = 0 Then Begin ShowMessage('Sem dados para relatório!'); exit; End Else With QrySomasLancados do Begin QrySomasLancados.Close; QrySomasLancados.Sql.Text :='Select sum(Valor)as "SOMA" From Lancamento where cheque is not null'; QrySomasLancados.Open; end; valor1 := QrySomasLancados.FieldByName('Soma').AsFloat; With TFrmRelChequePre.Create(Application) Do Try QuickRep1.Preview; Finally Free; end; close; Pois no Evento BeforePrint da banda QrSummary onde mostra os valores eu acrescentei : procedure TFrmRelChequePre.QRBand4BeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean); begin Total.Caption := FloatToStr(valor1); end; Onde o Total é o QrLabel que me mostra o total. Mas o problema é que não mostra o resultado da soma pois aparece zero igual a imagem abaixo, pois preciso de ajuda nisso. http://www.4shared.com/file/36411957/4e2ae...ulo-1_cpia.html E ai o que será? :blink:
-
(Resolvido) Fazer atualização no Banco de dados sem interferir no
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Oi, 'robinhocne'! Não tenho acesso ao site que você enviou. Sou adepto ao quanto mais simples melhor. Se você vai executar isto no cliente sem a sua presença, então não há necessidade de floreamento. basta uma tela(label) informando que está sendo atualizado e outra que, ao fim do processamento, informe que foi atualizado. É apenas um processamento batch. Mas, vá fundo. Dê asas à sua criatividade. É a melhor coisa do mundo. Um abraço Esse projeto eu iria fazer no cliente mesmo, não iria mandar, mas andei vendo hoje e acho que vou fazer assim se possivel: Coloquei um (TFilenameEdit) do pacote do RxLib esse componente é igual o outro de caminho que comentei: -O Nome ficou como (TxtCaminhoBanco): >Então ai eu busco o banco a ser atualizado - Ok? -Coloquei um TMemo com o Nome de (MScript): >Então aqui eu iria colocar as alterações de tais tabelas - Ok? -Coloquei uma IbQuery com o Nome de (QryAtualizacao): >Ai seria mais ou menos assim na Query: procedure TFrmIzaUpDate.SpbATualizarClick(Sender: TObject); begin with QryAtualizacao do begin close; SQL.Clear; SQL.Add('#39 + MScript + #39'); ExecSql; end; end; >>No caso esse comando seria no Botão(SpbAtualizar) que vai fazer a atualização, mas ai para a QryAtualizacao saber qual mudança para fazer no banco ele ai pegaria a instrução que eu iria digitar no TMemo (MScript), mas ai ficaria como esse parte >SQL.Add('Alter Table Cliente add Nome varchar (100)');<, pois ai teria que implementar para a instrução fazer do que está escrito no MScript (TMemo), ficaria mais ou menos assim: SQL.Add('#39 + MScript + #39'); Mas outra coisa que faltou e que eu não sei fazer, no TxtCaminho eu teria que pegar o banco e conectar na query para fazer isso, como, eu faço isso para ter o caminho para a Query. -
(Resolvido) Fazer atualização no Banco de dados sem interferir no
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Resposta: Como você quizer. Mas separado é melhor, pois você não mistura a aplicação com a atualização da aplicação. Resposta: Sim. Você poderá usar qualquer script de atualização. Resposta: Sim. Como o nome e extensão que você quizer. Resposta: Basicamente O programa de atualização pega o script de atualização, que neste caso chamarei de arquivo.sql; Lê, linha a linha, sendo que em cada linha há um comando SQL completo. E, a cada linha lida, executa a atualização necessária. De uma olhada na estrutura do projeto que seria: http://www.4shared.com/file/36318934/e1746f08/IzaUpdate.html Pois o que eu teria que ter nesse programa, digo quais componentes, estava pensando assim: Um (JvFilenameEdit1) para a localizacao do banco de dados antigo. Um (DbGrid) ou algo que eu possa vizualizar os dados alterados ou um (TMemo). Um (JvFilenameEdit2) para a localizacao do Script. Um (SpeedButton) para fazer o procedimento de atualizacao. Amigo seria assim a estrutura? depois vamos para os dados.! -
(Resolvido) Fazer atualização no Banco de dados sem interferir no
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Oi, 'robinhocne'! Mais fácil que o exemplo que dei só assim: procedure atualiza; var F TextFile; bufer: string; begin AssignFile(F, 'C:\nomedoarquivo.sql'); Reset(F); Readln(F, buffer); while not eof(F) do begin with query1 do begin Active := False; SQL.Clear; SQL.Add(buffer); grava; end; Readln(F, buffer); end; CloseFile(F); end; procedure grava; begin Try Database.StartTansaction; query1.ExecSQL; Database.Commit; except showmessage('Deu caca na gravacao'); Database.Rollback; end; end; Como você pode observar acima, eu criei um arquivo texto contendo o script de modificações no banco e chamei este arquivo de 'arquivo.sql'. Logo depois, alterei a procedure para abrir o arquivo texto, ler o conteúdo e executar no banco a alteração. O 'arquvo.sql' possui uma instrução para linha. Mas você pode modificar para melhorar o entendimento de quem quizer ler o conteúdo do 'arquivo.sql' A vantagem deste código é que o executável pode ficar no seu cliente e você pode enviar somente o script para atualização . Outra vantagem é que posso ter uma ou N instruções SQl dentro do script. Divirta-se. Ok, Denis então me ajude do começo: 1- Eu vou fazer isso no programa ou vou fazer um programa separado? arquivo 2- Caso seja separado ou junto, fiz um form que tem um edit de busca, esse componente é dos pacotes do Jedi nome dele é JvFilenameEdit1, pois ele localiza o arquivo, ai no caso esse seria para mostrar o caminho do Script, para a atualização. 3- Esse script seria em arquivo txt no caso com o nome de "Arquivo.Sql"? 4- Me explica passo a passo para eu poder enteder melhor, pois isso é bem novo para min "Se Possivel'! -
(Resolvido) Fazer atualização no Banco de dados sem interferir no
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Resposta: Sim em ambos os casos 1 e 2. Resposta: Não. Um form simples com apenas um botão e todo o código escrito é a melhor solução. Resposta: Sim. Seria o código de checagem para evitar que a mesma atualização fosse feita mais de uma vez. Resposta: Já fiz isso no post anterior. Pegue a idéia, transforme para seu banco Firebird e teste. Sim, mas ai eu teria que fazer isso no IbExpert e não poderia desenvolver algo que seria facil. -
(Resolvido) Fazer atualização no Banco de dados sem interferir no
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Sim, mas como onde ? Oi, 'robinhocne'! Não sei que tipo de banco você está usando. Então vou falar de modo genérico, mas com exemplos que o guiarão melhor neste caminho. Crie um programinha delphi e coloque nele os objetos de banco que você utiliza. Neste exemplo vou usar o TQuery, mas você faça como achar melhor. De modo simples o que você necessita é uma execução para cada atualização. Assim, se tenho duas tabelas a atualizar e tenho que enviar a correção para meu cliente, então seria assim em linhas gerais que o codigo seria construido. procedure atualiza; begin with query1 do begin Active := False; SQL.Clear; SQL.Add('ALTER TABLE tabela1 ' + 'ADD COLUMN colunax char(10) NOT NULL'); grava; SQL.Clear; SQL.Add('ALTER TABLE tabela2 ' + 'ADD COLUMN colunax char(10) NOT NULL'); grava; end; end; procedure grava; begin Try Database.StartTansaction; query1.ExecSQL; Database.Commit; except showmessage('Deu caca na gravacao'); Database.Rollback; end; end; P.S. Não testei o código. O que tem aí é só para exemplificar. Um abraço. Ops... Desculpas esqueci o principal, eu uso o Firebird e as minhas conexões eu uso o componente do InterBase com um, IbDataBase, IbQuery e IbTransaction. Sim etendi, mas só não entendi uma coisa, na instrução que você passou: 1-Eu terei que colocar de cada tabela que eu vou alterar? :blink: 2-Tipo assim se eu acrescentei um campo na tabela ou fiz outra tabela, para cada isso terei que fazer na instrução? :blink: 3-Teria como ser assim, no programa que fazerei isso, eu coloquei um componene do Jedi o JvDotNetFilenameEdit1, esse componente busca o caminho do banco certo e ai (agora preciso de ajuda nessas ideias), teria um grid ou alguma coisa que mostra todas as tabelas do banco de dados, e ai eu clicava na tabela que iria atualizar e no outro canto eu teria um TMemo ou algo que vocês posso me ajudar, com os dados da tabela a ser atualizada, ai coloco os dados certo no TMemo. 4-Ai terei um botão, para que faça a toda a atualização já pegando o caminho do banco e falando que seria aquele para ser atualizado e comparando com a tabela a ser altera ou acrescetada. Então será que teria como desenvolver com essa ideia fertil minha? :rolleyes: -
(Resolvido) Fazer atualização no Banco de dados sem interferir no
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Escreva scripts de atualização de tabelas para o seru banco. As instruções variam de banco para banco. Sim, mas como onde ? -
Queria saber como poderia fazer um programa extra de atualização de banco de dados, pois tipo assim: Tenho o meu programa em um comercio, ai eu faço novas atualizaçoes tanto no banco de dados, mas ai quero atualizar ele, mas o cliente já tem os dados cadastrados nele, e ai queria fazer isso sem pegar o banco de dados e ficar mexendo, queria algo que acrecentasse o que e adcionei a mais no banco olhando pelo o banco original e sem alterar os dados que estão salvos no banco de dados! Alguém poderia me ajudar! :mellow:
-
(Resolvido) Como formatar valores no DBGrid?
pergunta respondeu ao Duduh_Capixaba de robinhocne em Delphi, Kylix
Bom eu uso assim para mostrar formatado no meu grid, Na Query que faço a instruçao Sql eu uso o Evento AfterOpen, mas se você uso o ClientDataSet pode usar nele tbém tem o mesmo evento lá: TFloatField(NomeDaQueryouDataSet.FieldByName('NomeDoCampoNoBancoDeDadosDaTabelaAReceberAFormataçao')).DisplayFormat := 'R$ #,##0.00'; -
Mostrar no DbGrid as aulas em vermelho apartir de uma contagem
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
e será que você lembrou de adicionar este campo à sua consulta (SQL na QryPraticas)? Resolvido Faltou colocar na Procedure STPCSLAUL ...BEGIN pOrd = 0; pCuntCatA = 0; pCuntCatB = 0; pCuntCatC = 0; pCuntCatD = 0; pCuntCatE = 0;...[/quote]Então ficou assim: [quote] CREATE PROCEDURE STPCSLAUL ( palu integer) returns ( paul numeric(3,0), pord smallint, pins smallint, pdat date, phor time, pcat char(1)) as declare variable pcuntcate integer; declare variable pcuntcatd integer; declare variable pcuntcatc integer; declare variable pcuntcatb integer; declare variable pcuntcata integer; BEGIN pOrd = 0; pCuntCatA = 0; pCuntCatB = 0; pCuntCatC = 0; pCuntCatD = 0; pCuntCatE = 0; FOR Select P.Instrutor, P.Data, P.Horario, P.Categoria From Praticas P, Instrutores I Where P.Aluno=:pAlu AND P.Status=1 AND I.Codigo=P.Instrutor ORDER BY P.Data, P.Horario INTO :pIns, :pDat, :pHor, :pCat DO BEGIN pOrd = :pOrd + 1; IF (:pCat = 'A') THEN BEGIN pCuntCatA = :pCuntCatA +1; pAul = :pCuntCatA; END ELSE IF (:pCat = 'B') THEN BEGIN pCuntCatB = :pCuntCatB +1; pAul = :pCuntCatB; END ELSE IF (:pCat = 'C') THEN BEGIN pCuntCatC = :pCuntCatC +1; pAul = :pCuntCatC; END ELSE IF (:pCat = 'D') THEN BEGIN pCuntCatD = :pCuntCatD +1; pAul = :pCuntCatD; END ELSE IF (:pCat = 'E') THEN BEGIN pCuntCatE = :pCuntCatE +1; pAul = :pCuntCatE; END SUSPEND; END END E no Evento DrawColumnCell do grid que me mostra esses dados que são buscados pela procedure: procedure Tfrmpraticas.DbgRelDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); Var R : TRect; begin If Not odd(dtmiza.DtsPraticas.DataSet.RecNo) Then If Not (gdSelected in State) Then begin DbgRel.Canvas.Brush.Color:=clSkyBlue; end; if (Trim(DtmIza.QryPraticas.FieldByName('pCat').AsString) = 'A') and (DtmIza.QryPraticas.FieldByName('pAul').AsInteger > 15) or (Trim(DtmIza.QryPraticas.FieldByName('pCat').AsString) = 'B') and (DtmIza.QryPraticas.FieldByName('pAul').AsInteger > 15) or (Trim(DtmIza.QryPraticas.FieldByName('pCat').AsString) = 'C') and (DtmIza.QryPraticas.FieldByName('pAul').AsInteger > 5) or (Trim(DtmIza.QryPraticas.FieldByName('pCat').AsString) = 'D') and (DtmIza.QryPraticas.FieldByName('pAul').AsInteger > 5) or (Trim(DtmIza.QryPraticas.FieldByName('pCat').AsString) = 'E') and (DtmIza.QryPraticas.FieldByName('pAul').AsInteger > 5) then begin DbgRel.Canvas.Font.Color:=clred; end; DbgRel.Canvas.FillRect(Rect); DbgRel.DefaultDrawDataCell(Rect, DbgRel.Columns[DataCol].Field, State); end; -
Mostrar no DbGrid as aulas em vermelho apartir de uma contagem
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Bom ai eu implementei os dados no evento DrawColumnCell do DbGrid que me mostra as aulas marcadas, mas está dando esse erro: procedure Tfrmpraticas.DbgRelDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); Var R : TRect; begin if (Trim(DtmIza.QryPraticas.FieldByName('pCat').AsString) = 'A') and (DtmIza.QryPraticas.FieldByName('pAul').AsInteger > 15) or (Trim(DtmIza.QryPraticas.FieldByName('pCat').AsString) = 'B') and (DtmIza.QryPraticas.FieldByName('pAul').AsInteger > 15) or (Trim(DtmIza.QryPraticas.FieldByName('pCat').AsString) = 'C') and (DtmIza.QryPraticas.FieldByName('pAul').AsInteger > 5) or (Trim(DtmIza.QryPraticas.FieldByName('pCat').AsString) = 'D') and (DtmIza.QryPraticas.FieldByName('pAul').AsInteger > 5) or (Trim(DtmIza.QryPraticas.FieldByName('pCat').AsString) = 'E') and (DtmIza.QryPraticas.FieldByName('pAul').AsInteger > 5) then // coloque aqui a sua query ou table begin DbgRel.Canvas.Font.Color:=clred; // define uma cor de fundo DbgRel.Canvas.FillRect(Rect); // pinta a célula DbgRel.DefaultDrawDataCell(rect,Column.Field,State); // pinta o texto padrão end; DbgRel.DefaultDrawDataCell(Rect, DbgRel.Columns[DataCol].Field, State); end; -
como consigo encontrar esse 'RxCtl7.res'? você tem o executavel dele é melhor instala tudo de uma vez. http://www.delphibr.com.br/baixar.php?tipo=4&id=23
-
Mostrar no DbGrid as aulas em vermelho apartir de uma contagem
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
robinhocne, você utiliza alguma ferramenta para mexer com a estrutura do banco de dados? Tipo IBExpert, por exemplo? Sim Exatamente, eu utilizo o IbExpert para mexer no banco de dados, e estou fazendo o procedimento no Ib Mesmo -
Bom Andreia, o principal seria você instalar o Firebird na maquina do cliente e ai instalar o programa normal, na maquina do cliente!
-
Mostrar no DbGrid as aulas em vermelho apartir de uma contagem
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Micheus, fiz o procedimento no bando de dados, mas está dando erro na Declare pCuntCatA, nas declarações! -
Mostrar no DbGrid as aulas em vermelho apartir de uma contagem
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Você viu o seu post que eu mencionei?Lá tem o código da Stored Procedure STPCSLAUL em seu banco. Não é dela que você obtém os dados para serem mostrados no DBGrid? Se for, o que eu queria dizer é que você poderia acrescentar mais um campo a ser retornado por ela, como você fez quando criou o campo pOrd apenas para retornar um número sequencial. A diferença é que este sequencial seria por categoria. Será que captou agora? Se não for, ignore o que eu disse até agora. Abraços Tá então seria mais ou menos assim: CREATE PROCEDURE STPCSLAUL ( palu numeric(6,0)) returns ( pord numeric(3,0), pAul Numeric (3,0), pins numeric(2,0), pdat date, phor time, pcat char(2)) as BEGIN pOrd = 0; FOR Select P.Instrutor, P.Data, P.Horario, P.Categoria From AulasPraticas P, Instrutores I Where P.Aluno=:pAlu AND P.Status=1 AND I.Codigo=P.Instrutor ORDER BY P.Data, P.Horario INTO :pIns, :pDat, :pHor, :pCat DO BEGIN pOrd = :pOrd + 1; pAul = :pAul + 1; SUSPEND; END END Mas tá então ele iria contando a aula e apartir da 16 aula ele iria começar a contar como extra e me mostrar de vermelho ? -
Mostrar no DbGrid as aulas em vermelho apartir de uma contagem
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
R.: Nesses Edits eu só mostro o total de aulas marcadas da respectiva categoria. R.: Não, a listagem para esse procedimento que estou tentando fazer é para as categorias B,C,D e E.É, então como está não vai rolar. :( Observe o seguinte, vamos supor que a categoria "C" tenha umas 7 aulas, então o seu TxtC.Text terá seu valor igual a "7". Certo?! Nesta condição, quando você testar: (Trim(DtmIza.QryPraticas.FieldByName('pCat').AsString) = 'C') and (StrToInt(TxtC.Text) > 5) o resultado vai ser verdadeiro e, por tanto, para cada linha a ser pintada no grid, a cor será alterada para clRed. Como resultado, você verá todo o seu grid em vermelho e não apenas os itens que ultrapassam a contagem 5. Esta contagem de excedentes é baseada na quantidade de aulas para o dia? Acho que você poderia utilizar aquela procedure que você criou no banco, para retornar estes dados no DBGrid (procedure STPCSLAUL neste post), e além de retornar o seqüencial (Ord), você poderia também retornar o número de ordem por categoria. Deste modo, supondo o nome pOrdCat, ao invés de você testar os Txt?.Text, você testaria este campo. Por ex.: (Trim(DtmIza.QryPraticas.FieldByName('pCat').AsString) = 'C') and (DtmIza.QryPraticas.FieldByName('pOrdCat').AsInteger > 5) acho que é por aí. Não são as aulas totais que tem marcadas independetemente do dia. Mas esse pOrdCat onde eu atribu-o isso? :blink: Me explica melhor! -
Mostrar no DbGrid as aulas em vermelho apartir de uma contagem
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
R.: Nesses Edits eu só mostro o total de aulas marcadas da respectiva categoria. R.: Não, a listagem para esse procedimento que estou tentando fazer é para as categorias B,C,D e E. Só não gostei pela a coisa ter complicado!rsrsr :wacko: Bom dei uma arrumada aqui,mas nada ainda: procedure Tfrmpraticas.DbgRelDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); Var R : TRect; begin if ( ( ( Trim( DtmIza.QryPraticas.FieldByName( 'pCat' ).AsString ) = 'A' ) and ( StrToInt( TxtA.Text ) > 15 ) ) or ( ( Trim( DtmIza.QryPraticas.FieldByName( 'pCat' ).AsString ) = 'B' ) and ( StrToInt( TxtB.Text ) > 15 ) ) or ( ( Trim( DtmIza.QryPraticas.FieldByName( 'pCat' ).AsString ) = 'C' ) and ( StrToInt( TxtC.Text ) > 5 ) ) or ( ( Trim( DtmIza.QryPraticas.FieldByName( 'pCat' ).AsString ) = 'D' ) and ( StrToInt( txtD.Text ) > 5 ) ) or ( ( Trim( DtmIza.QryPraticas.FieldByName( 'pCat' ).AsString ) = 'E' ) and ( StrToInt( txtE.Text ) > 5 ) ) ) then // coloque aqui a sua query ou table begin DbgRel.Canvas.Font.Color:=clred; DbgRel.Canvas.FillRect(Rect); DbgRel.DefaultDrawDataCell(rect,Column.Field,State); end; DbgRel.Canvas.FillRect(Rect); DbgRel.DefaultDrawColumnCell(Rect, DataCol, Column, State); end; ? :blink: :wacko: E agora, como esta indo esse procedimento. -
Olá pessoal, Fiz esse procedimento, para mostrar as aulas no DbGrid. If odd( DtmIza.QryPraticas.FieldByName( 'pOrd' ).AsInteger ) then // coloque aqui a sua query ou table begin DbgRel.Canvas.Font.Color:= clBlack; DbgRel.Canvas.Brush.Color:= cl3DLight; end else begin DbgRel.Canvas.Font.Color:= clBlack; DbgRel.Canvas.Brush.Color:= clMoneyGreen; end; DbgRel.Canvas.FillRect(Rect); DbgRel.DefaultDrawColumnCell(Rect, DataCol, Column, State); } { if ( ( ( Trim( DtmIza.QryPraticas.FieldByName( 'pCat' ).AsString ) = 'A' ) and ( StrToInt( TxtA.Text ) > 15 ) ) or ( ( Trim( DtmIza.QryPraticas.FieldByName( 'pCat' ).AsString ) = 'B' ) and ( StrToInt( TxtB.Text ) > 15 ) ) or ( ( Trim( DtmIza.QryPraticas.FieldByName( 'pCat' ).AsString ) = 'C' ) and ( StrToInt( TxtC.Text ) > 5 ) ) or ( ( Trim( DtmIza.QryPraticas.FieldByName( 'pCat' ).AsString ) = 'D' ) and ( StrToInt( txtD.Text ) > 5 ) ) or ( ( Trim( DtmIza.QryPraticas.FieldByName( 'pCat' ).AsString ) = 'E' ) and ( StrToInt( txtE.Text ) > 5 ) ) ) then begin DbgRel.Canvas.Font.Color:= clRed; DbgRel.Canvas.FillRect(Rect); end; Então funciona o seguinte, este procedimento seria para que acima de 15 aulas da categoria de A e B que são mostradas fazendo uma contagem e mostrando nos respectivos edits, e assim 5 aulas para as categorias C,D e E. Mas ai eu marco alem das aulas para que possa mostrar no grid em vermelha, as aulas que são maiores de 15 e 5, mas ai nada faz. Um exemplo: Ord Data Horario Cat Ins 1 01/01/2008 08:00 C 1 2 01/01/2008 09:00 C 1 3 01/01/2008 10:00 C 1 4 01/01/2008 11:00 C 1 5 01/01/2008 12:00 C 1 6 01/01/2008 08:00 C 1 7 01/01/2008 08:00 C 1 Então seria assim, marco as 5 aulas e apartir da 6 do tal dia e horario ele mostra no grid em vermelho