Ir para conteúdo
Fórum Script Brasil

Micheus

Veteranos
  • Total de itens

    3.189
  • Registro em

  • Última visita

Tudo que Micheus postou

  1. se já não dá erro, pode ser um bom sinal.Como você utiliza os componentes da paleta IB, acrescente o seguinte comando após a linha em que tem aquele ExecSQL: Transaction.CommitRetaining; Outra coisa, como você utiliza um IBQuery para visualizar os dados, para que você visualize as informações atualizadas você terá que Fechar e Reabrir a sua consulta, de modo que as informações sejam atualizadas no seu DBGrid (estamos falando das informações sobre o lançamento - Ok!) Se você mostra nesta sua consulta a data de pagamento da parcela, após a atualização, ela deverá aparecer preenchida no campo que você mostra no DBGrid (aquele que está mostrando o lançamento - Ok!)
  2. não vai ficar acostumado. :P no evento OnCreate ou OnShow do form: UpDown1.Min := 0; // você limita ao mínimo valor para ActivePageIndex UpDown1.Max := PageControl1.PageCount -1; // você limita ao máximo valor para ActivePageIndex UpDown1.Position := PageControl1.ActivePageIndex; // inicializa o UpDown no evento OnClick do dito cujo: 1ªalternativa) PageControl1.ActivePageIndex := UpDown1.Position; // aqui você faz com que a página seja trocada // caso você tenha algum procedimento no evento OnChange do seu PageControl, adicione, // a linha abaixo, porque mudar de página via as propriedades ActivePageIndex e ActivePage // não gera os eventos OnChange e OnChanging PageControl1Change(PageControl1); 2ª alternativa) if PageControl1.ActivePageIndex > UpDown1.Position then // se você clicou para diminuir PageControl1.SelectNextPage(False) else if PageControl1.ActivePageIndex < UpDown1.Position then // se você clicou para aumentar PageControl1.SelectNextPage(True) // Caso ambos sejam iguais, significa que você já está em um dos extremos, então não fazemos nada // Esta abordagem, se não me engano, gera os eventos OnChange e OnChanging A idéia é mais ou menos esta. Confira se funciona.
  3. tux_boy, siga os passos que o colega Jhonas descreve neste post. A título de informação: - o arquivo DCR é o que contém o ícone do componente e que será mostrado na paleta de ferramentas da IDE do Delphi; - o arquivo DCU é a unit já compilada, mas ela depende da versão do delphi em que foi gerada. Neste caso, você vai intalar o fonte (.pas) Abraços
  4. então o que se fez até agora deveria funcionar, não é?!Na aba de lancamentos é onde você tem o lance do radiobutton e o tal botão em que colocou-se o procedimento para fazer o UPDATE - não é?!
  5. para criar um campo calculado neste seu dataset, siga a dica deste post (acho que ajuda). No seu caso, o evento oncalcfield, você chamará a função com o campo mencionado e atribuirá o retorno ao seu campo calculado, que poderá ser um string se a sua função retornar um string (dê tamanho suficiente a ele na definição), pode ser um Tdatetime se sua função retornar um tdatetime...
  6. Na tabela alunos? :huh: Achei que fosse na lançamentos! Veja o que viemos (eu, pelo menos) trabalhando encima do que começou-se a "falar", e lá pelo post#5, vou por aqui o que eu entendi que era a consulta que você fazia: ... With DtmIza.DsAluLan do Begin Close; Sql.Clear; Sql.Add ('Select L.Aluno, L.Parcela, L.Vencimento, L.Valor, L.Emissao, L.Aluno From Lancamento L,' +'Lancamento I Where L.Aluno=' + TxtMat.Text + ' AND I.Codigo=L.Aluno ORDER BY L.Parcela, L.Vencimento'); Open; end;Eu só vejo referência a tabela lancamento. esta resposta fica para depois da resolução do questionamento acima.
  7. Sabe que nunca havia notado isto. As vezes que o inclui nos projetos, sempre utilizei o evento OnClick verificando a propriedade Position.
  8. Aqui você disse que criou um campo data de pagamento na sua tabela lancamentos para guardar a data da baixa. Não é isto?! mas veja só: o fato de você gravar no seu banco, junto a parcela "x" uma data de pagamento, já não está significando que foi dado baixa nesta parcela que estava em aberto?A prinípio, não há necessidade de você ter as duas coisas para dizer uma. Se tem data de pagamento, então foi baixada! Isto não lhe serve? robinhocne, tudo bem que eu já não estou nem mais conseguindo manter o raciocínio, mas é só dá uma olhada para ver que troquei "DtPgto" por "DtPagto". Se você já tivesse captado o "espírito da coisa", voce agora estaria me corrigindo. Pelo jeito, ainda não consegui ajudá-lo neste sentido. :( Vai então a correção: ... SQL.Add('SET DTPGTO = :DtPgto'); if RdbBaixa.Checked then ParambyName('DtPgto').AsDateTime := Date // isto deve definir a data do pagto para data atual else ParamByname('DtPgto').Clear; // isto deve deixar o parâmetro null - limpando o campo
  9. que eu saiba, esta seqüência writeln e readln no evento OnClick não vai rolar não... a melhor opção é aquela anterior, a de compilar este código com um compilador pascal. ;)
  10. Agora você quase pegou o "espírito da coisa". Voce não vai guardar uma data (DTPgto)? Então, como você pode continuar passanto o parâmetro "Tipo" da mesma forma como antes? if RdbBaixa.Checked then ParambyName('Tipo').AsInteger := 1 else ParamByname('Tipo').AsInteger := 0; não faz o menor sentido! Voce vai provavelmente passar uma data, que muito provavelmente é a atual (mas pode ser que você queira que o sujeito digite a data). Então, se o cara faz uma baixa, você vai por a data da baixa. Se o cara desmarcar a baixa, supostamente, você vai deixar a data em branco. Primeiramente sugiro que você mude o nome do parâmetro, porque já não tem mais nada há ver com a abordagem inicial. Digamos que seja DtPgto, de modo que a tal linha ficaria: SQL.Add('SET DTPGTO = :DtPagto'); logo, para passar corretamente o parâmetro (uma data) iremos continuar avaliando o tal radiobox: if RdbBaixa.Checked then ParambyName('DtPgto').AsDateTime := Date // isto deve definir a data do pagto para data atual else ParamByname('DtPgto').Clear; // isto deve deixar o parâmetro null - limpando o campo Siga em frente...
  11. Mandrack, especificamente neste erro, voce parece estar utilizando a sintaxe incorreta para inclusão da unit em suas units (forms/datamodules). Esta sintaxe: <nome_unit> in '<nome_unit>.pas' {<nome_form>} é utilizada apenas no source (fonte) do projeto (veja no menu Project->View Source) e gerenciado pelo Delphi (observe que o nome do form que visualizamos quando teclamos SHIFT+F12 no editor, é exatamente aquele que aparece entre as chaves - "{" e "}"). Na demais units, a inclusão é feita apenas pelo nome na unit, no seu caso ficaria algo como: uses ULogin, DB;este procedimento, deve resolver alguns de seus problemas de compilação. Abraços
  12. Micheus

    Relatorio

    Jhonas, o colega traira007 diz ter feito o relatório no Rave Report, não no Quick Report...
  13. então, supondo que:- seu form principal chame-se MDIForm1; - seu datamodule chame-se DataModule1; - seus datasources chamem-se respectivamente Datasource1 (para MDIChild1), Datasource2 (para MDIChild1), Datasource3 (para MDIChild1) você poderia colocar no evento OnActivate do form MDIChild1: procedure TMDIChild1.MDIChild1Activate(sender :TObject); begin MDIForm1.DBNavigator1.DataSource := Datasource1; end; você poderia colocar no evento OnActivate do form MDIChild2: procedure TMDIChild2.MDIChild2Activate(sender :TObject); begin MDIForm1.DBNavigator1.DataSource := Datasource2; end; Algo assim. Verifique ser vai funcionar corretamente.
  14. Micheus

    (Resolvido) Horas

    certo, mas o lance de testar "QtdHora = 0" e deixar o QRLabel.Caption = '' - não funcionou?
  15. eu queria duas explicações, primeira: SQL.Add('SET baixado = :Tipo'); No caso dá o erro aqui no Baixado, mas me explica essa intrução para eu poder entender. É, eu já sei qual é o problema. Você não tem um campo para indicar baixa - o tal "Baixado", e isso acabou ficando lá do início. Este tópico já está tão comprido que o tico e o teco não estão gravando mais nada. :D Então, olhando lá no post#9, vejo que sua tabela lancamento tem apenas os campos: Logo, vem a pergunta: Com que campo você pretende indicar essa baixa na parcela? Sem dúvida vai ter que ter alguma coisa em algum lugar no seu banco de dados que possibilite guardar esta informação! Voi explicar a instrução completa do UPDATE, se você não entender, passo a bola para outro. ;) A instrução UPDATE tem como objetivo alterar o valor de uma determinada coluna ou colunas em uma tabela. Voce restringe os registros (linhas) na tabela que serão afetados utilizando alguma condição na cláusula WHERE. UPDATE Lancamento // indica que o update será realizado na tabela Lancamento SET baixado = :Tipo // supondo a existência do campo baixado, SET indica que a coluna/colunas seguintes serão atualizadas com o valor após o sinal de "=" WHERE Codigo = :Codigo and Vencimento = :Vencimento // aqui o objetivo é filtrar (selecionar) apenas um registro - aquele em que o código seja = ao do parâmetro Codigo e que a data de vencimento seja = ao parâmetro Vencimento. voce já não utilizou passagem de parâmetros antes? Já não viu inúmeros posts neste forum exemplificando isto?Estes são os parâmetros que seriam passados para o IBQuery com o UPDATE.
  16. acredito que não, porque como o componente continua existindo, o valor fica na área de memória reservada para ele até que você o mude. Talvez o que você possa fazer, já que não destroi o datamodule, é antes de abrir seu clientedataset limpar seus parâmetros. Experimente criar esta procedure no seu DataModule: procedure LimpaParams(CDS :TClientDataSet); var Idx :Integer; begin for Idx := CDS.Params.Count -1 do CDS.Params[Idx].Clear; end; daí, quando você abre seus forms, você chama ela passando os seus clientdataset, para limpar o valor do parâmetro. Testa aí.
  17. fajo, a impressão que dá é que os clientdataset não estão sendo destruidos junto com o form. Por acaso, eles estariam em um datamodule, utilizado pelos forms?
  18. Micheus

    (Resolvido) Horas

    eu testei e abriu, mas segue a função aqui (fica faltando a explicação que está lá): function FullTimeToStr(SUMTime: TDateTime): string; var StrHor, StrMin :string; TotHor :double; begin TotHor := SUMTime *24; if (TotHor -Trunc(TotHor)) > 0.9999 then TotHor := Round(TotHor); StrHor := FormatFloat('##0:', Int(TotHor)); StrMin := FormatDateTime('nn:ss', Frac(TotHor)/24); Result := StrHor +StrMin; end; então, ao invés de utilizar TimeToStr naquela parte do exemplo que postei: if QtdHora = 0 then QRLabel1.Caption := '' // na primeira linha não há diferença else QRLabel1.Caption := TimeToStr(QtdHora); voce altera para: if QtdHora = 0 then QRLabel1.Caption := '' // na primeira linha não há diferença else QRLabel1.Caption := FullTimeToStr(QtdHora); Confira aí.
  19. voltamos ao "espírito da coisa" (já não está parecendo a piadinha de todo o domingo no fantástico: "Nunca na história deste país...") :P Voce lembra que o objetivo o update é atualizar os dados do registro visualizado no DBGrid? Então, de onde é mesmo que tem que vir as informações do campo selecionado no DBGrid? Eu acho que é do dataset que está ligado a ele - QryAluLan. Então por que é que você ao invés de trocar o texto DtsAluLan ali do post#23 (que é o datasource) por QryAluLan, voce foi justamente trocar pelo UpAluLan (que o seu IBQuery para execução do UPDATE)? só para não ficar dúvida: troque as linhas: ParambyName('Codigo').AsInteger := DtmIza.UpAluLan.FieldByName('Aluno').AsInteger; ParambyName('Vencimento').AsDateTime := DtmIza.UpAluLan.FieldByName('Vencimento').AsDateTime; por ParambyName('Codigo').AsInteger := DtmIza.QryAluLan.FieldByName('Aluno').AsInteger; ParambyName('Vencimento').AsDateTime := DtmIza.QryAluLan.FieldByName('Vencimento').AsDateTime;
  20. É isso aí!Mãos à obra! E vamos para as próximas dúvidas. :D
  21. Sim. Voce só precisa de um datasource ligado a este dataset se for utilizá-lo para alguma coisa. Não é o seu caso. Voce vai utilizar este dataset UpAluLan apenas para executar uma instrução SQL (UPDATE) - não vai retornar nada que precise ser mostrado em um DBGrid, por exemplo. até eu! :blink: O IBDataSet foi um papo lá do início, era uma das alternativas (1ª) e se você ler denovo o post#6, verá que faz tempo que estamos falando da 2ª opção (uso de um IBQuery). Não é mesmo?!
  22. Voce já consegue colocar seu DBNavigator no form principal. Certo?! Então, acho que você poderia utilizar o evento OnActivate dos form's filhos para alterar o dataset ligado ao DBNavigator lá no form principal. Onde estão os datasets em questão? Estão cada qual no respectivo form filho (MDIChild) ou estão em um datamodule? O datasource ao qual você liga seu DBNavigator está no form principal ou em um datamodule?
  23. Vixe digo eu. :o Sugestão, utilize nomes mais claros para seus componentes. Por exemplo, para um datasource utilize as iniciais DS; para dataset utilize Dst; Eu costumo prefixar com Qry os datasets do tipo TIBQuery, Tab os do tipo TIBTable e Dst os do tipo TIBDataSet, ... e por aí vai. Vamos denovo, ao "espírito da coisa": - de onde vem os dados que são mostrados no seu DBGrid? vem do UpAluLan ou do QryAluLan? Pelas minhas contas vem de QryAluLan! - para mostrar estes dados de QryAluLan no DBGrid você precisa de um DataSource no meio, não é? Pelas minhas contas poderia/deveria ser o seu DtsAluLan! então, você terá no seu DBGrid, na propriedade DataSource, o componente DtsAluLan selecionado. Por sua vez, você terá no seu componente DtsAluLan, na propriedade DataSet, o componente QryAluLan selecinado. Pronto! Agora o seu DBGrid estará mostrando os dados que vem da sua consulta QryAluLan. O componente UpAluLan só será utilizado para executar a instrução de UPDATE - você não ligará ele a coisa alguma. Então, não precisa de um DataSource para ele. Pelas minhas contas o tal DsAluLan!
  24. Micheus

    (Resolvido) Horas

    veja bem, desde que você tem dois campos: um Date e um Time, não vejo nada de complicado você somar os dois. Nos posts abaixo, já comentei um pouco sobre esta questão de data e hora em campos TDateTime: http://scriptbrasil.com.br/forum/index.php...st&p=450082 http://scriptbrasil.com.br/forum/index.php...st&p=373041 e neste post está a explicação de como formatar um texto para mostrar um campo TDateTime que contém dias (ou seja, mais que 23:59:59.999hs).
  25. neste caso, a princípio, esta pergunta eu não saberia responder. Talvez alguém se habilite.
×
×
  • Criar Novo...