
robinhocne
Membros-
Total de itens
854 -
Registro em
-
Última visita
Tudo que robinhocne postou
-
(Resolvido) Erro "multiple rows in singleton"
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Bom, não sei o que eu faço estou totalmente sem rumo nesse tópico em referencia a esse tipo de erro, pois já tentei varias maneiras que peguei na internet e que peguei com amigos, gostaria de ver se tem como dar uma arrumada nessa linha: tabela := 'alunos A left join Lancamento L on (L.Aluno = A.Codigo and extract(month from L.Vencimento ) <= extract(month from current_date))'; post5 pois nesse tipo de codigo ele aparece no grid todos as linhas, tipo se um aluno tem 4 promissorias vencidas ai aparece as 4 linha do mesmo nome da pessoa, queria ver e testei algumas vezes e não consegui resolver, queria ver se tem como juntar tudo para uma linha, pois o que eu quero é que se ele tem uma ou duas e assim por diante aparece só o nome em vermelho e não o todo de promissorias. -
(Resolvido) Erro "multiple rows in singleton"
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
robinhocne, aparentemente, não consegui visualizar qual o problema através de um teste de mesa "virtual". O negócio é você tentar verificar a SQL que está sendo executada. Como você parece ter dificuldades ainda no processo de depuração, faça o seguinte, nesta sua unit, na procedure efetuaconsulta, utilize a procedure ShowMessage para mostra a consulta montada antes de sua execução: ... with dtmiza.qryiza do begin close; sql.Clear; sql.add (instrucaosql); ShowMessage(instrucaosql); // <===== AQUI open; end; e tome nota da instrução SQL apresentada e, então, analise ela. Abraços fiz da maneira que você me orientou, e aparece isso de mensagem: e analisei e realmente não sei o que fazer, será que tem outro tipo de pesquisa para fazer dessa consulta em outra tabela? -
(Resolvido) Erro "multiple rows in singleton"
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Então, parece que você tem um problema sério! Não tenho como lhe ajudar. Abraços estou passando os dados do meu form da pesquisa: private indice : integer; procedure AppEventsMessage(var Msg: TMsg; var Handled: Boolean); public tabela, camporetorno : string; end; var frmpesquisa: Tfrmpesquisa; implementation {$R *.dfm} { Tfrmpesquisa } uses funcoes, fprincipal, fdtmiza, FPadrao; procedure Tfrmpesquisa.efetuaconsulta; var instrucaosql:string; a:integer; begin indice := rboidx.ItemIndex; instrucaosql:= 'select '; for a:= 0 to vcpo.count -1 do begin instrucaosql := instrucaosql+vcpo[a]+', '; end; instrucaosql:= copy (instrucaosql,1,length(instrucaosql) -2); instrucaosql:= instrucaosql + ' from ' + tabela + ' order by ' + vcpo[rboidx.itemindex]; with dtmiza.qryiza do begin close; sql.Clear; sql.add (instrucaosql); open; end; txtloc.text := ''; txtloc.setfocus; end; procedure Tfrmpesquisa.txtlocChange(Sender: TObject); begin if (length (trim(txtloc.Text))=0) then begin dtspes.dataset.First; end; if (dtspes.dataset.Fields[indice].datatype=ftstring) then begin dtspes.DataSet.Locate(dtspes.DataSet.fields[indice].fieldname,txtloc.Text,[lopartialkey, locaseinsensitive]); end else if (((dtspes.dataset.Fields[indice].datatype=ftdatetime) or (dtspes.DataSet.Fields[indice].datatype=ftdate)) and edata(txtloc.Text)) then begin dtspes.dataset.Locate(dtspes.DataSet.Fields[indice].FieldName,strtodate(txtloc.Text),[locaseinsensitive]); end else begin if (enumero(txtloc.Text)) then begin dtspes.DataSet.Locate(dtspes.DataSet.Fields[indice].FieldName,strtofloat(txtloc.Text),[locaseinsensitive]); end; end; end; procedure Tfrmpesquisa.cboidxChange(Sender: TObject); begin efetuaconsulta(); end; procedure Tfrmpesquisa.dbgpesDblClick(Sender: TObject); begin retorno := dtmiza.qryiza.fieldvalues [camporetorno]; close; end; procedure Tfrmpesquisa.FormShow(Sender: TObject); begin with rboidx do begin items.assign (vvlr); itemindex :=0; end; end; procedure Tfrmpesquisa.spbfecClick(Sender: TObject); begin close; end; procedure Tfrmpesquisa.rboidxClick(Sender: TObject); begin efetuaconsulta(); end; procedure Tfrmpesquisa.SpbOkClick(Sender: TObject); begin retorno := dtmiza.qryiza.fieldvalues [camporetorno]; close; end; procedure Tfrmpesquisa.AppEventsMessage(var Msg: TMsg; var Handled: Boolean); var Sentido: SmallInt; WndClass :array[0..128] of char; begin if Msg.message = WM_MOUSEWHEEL then begin GetClassName(Msg.hwnd, WndClass, SizeOf(WndClass)-1); if StrComp(WndClass, 'TDBGrid') = 0 then begin Msg.message := WM_KEYDOWN; Msg.lParam := 0; Sentido := HiWord(Msg.wParam); if Sentido > 0 then Msg.wParam := VK_UP else Msg.wParam := VK_DOWN; end; End; end; procedure Tfrmpesquisa.LimpaCampos; VAR A:INTEGER; BEGIN FOR A := 0 TO COMPONENTCOUNT-1 DO BEGIN IF (COMPONENTS [A] IS TEDIT) THEN (COMPONENTS [A] AS TEDIT).TEXT := ''; IF (COMPONENTS [A] IS TMASKEDIT) THEN (COMPONENTS [A] AS TMASKEDIT).TEXT := ''; IF (COMPONENTS [A] IS TMEMO) THEN (COMPONENTS [A] AS TMEMO).TEXT := ''; IF (COMPONENTS [A] IS TCOMBOBOX) THEN (COMPONENTS [A] AS TCOMBOBOX).TEXT := ''; IF (COMPONENTS [A] IS TCHECKBOX) THEN (COMPONENTS [A] AS TCHECKBOX).CHECKED := FALSE; IF (COMPONENTS [A] IS TRADIOBUTTON) THEN (COMPONENTS [A] AS TRADIOBUTTON).CHECKED :=FALSE; END; end; procedure Tfrmpesquisa.dbgpesDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); Var R : TRect; begin inherited; If Not odd(DtsPes.DataSet.RecNo) Then // se for ímpar If Not (gdSelected in State) Then // se a célula não está selecionada begin DbgPes.Canvas.Brush.Color:=clSkyBlue; // define uma cor de fundo DbgPes.Canvas.FillRect(Rect); // pinta a célula DbgPes.DefaultDrawDataCell(rect,Column.Field,State); // pinta o texto padrão end; DbgPes.DefaultDrawDataCell(Rect, DbgPes.Columns[DataCol].Field, State); end; end. então agora como eu posso resolver este tópico? -
(Resolvido) Erro de conversão em função
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
E aparece nessa linha de codigo em azul depois que aperto ok: if ENumero( Copy( nPro, i, 1 ) ) then roginhocne, acho que o erro já diz tudo: a sua função ENumero deve estar fazendo a tentativa de conversão do texto passado (via Copy(nPro, i, 1)) e este texto tem um caracter "-". Aparentemente esta sua função ENumero não está tratando as exceções e por isso gerando erro, mas precisaríamos dela para saber o que sugerir. Entretanto, você não precisa fazer uso desta função para tentar converte para numérico um caracter de cada vez. Use algo mais direto e eficiente - simplesmente teste se o caracter em questão é ou não um caracter numérico: '0', '1',... Assim, sugiro que você troque: for i := 1 to Length( nPro ) do begin if ENumero( Copy( nPro, i, 1 ) ) then nCPr := nCPr + Copy( nPro, i, 1 ); end; por: for i := 1 to Length(nPro) do if nPro[i] in ['0'..'9'] then nCPr := nCPr +nPro[i]; e substitua: for i := 1 to Length( pSHD ) do begin if ENumero( Copy( pSHD, i, 1 ) ) then nHDS := nHDS + Copy( pSHD, i, 1 ); end; por: for i := 1 to Length(pSHD) do if pSHD[i] in ['0'..'9'] then nHDS := nHDS +pSHD[i]; Mas, a título de você ter uma função ENumero que funcione, segue uma sugestão para esta função: function ENumero(StrNumber :string) :Boolean; begin try StrToFloat(StrNumber); Result := True; except Result := False; end; end; Abraços Ok, mudei da meneira que você me passou e deu certo, então este tópico pode colocar como resolvido, obrigado mais uma vez. -
Tópico de origem: Erro "multiple rows in singleton" __________________ Bom, estou ficando meio ausente do forum por falta de tempo por causa da faculdade, mas ainda estou com alguns problemas e um é sobre esse tópico ainda, tinha conversado com Micheus e ele me pediu para fazer um debug, mas na hora de executar pelo "F9" está dando esse erro: E aparece nessa linha de codigo em azul depois que aperto ok: if ENumero( Copy( nPro, i, 1 ) ) then Sei que isso não tem nada haver com esse tópico e erro que estava dando, mas o Micheus pediu para que eu postasse aqui, pois isso é para o programa fazer a verificação do serial do programa, embaixo tem todo o codigo da funcão. Aguardo resposta. function VerificaSerial( pSHD, pSEs : String ) : Boolean; var nPro, nCPr, nHDS, nPa1, nPa2, nSer : String; i : Integer; nRes : Extended; vReg : TRegistry; vAut : Boolean; begin vAut := True; vReg := TRegistry.Create; vReg.RootKey := HKEY_LOCAL_MACHINE; // le a chave ProductID vReg.OpenKey( 'SOFTWARE\Microsoft\Windows\CurrentVersion', False ); nPro := vReg.ReadString( 'ProductID' ); // remove todos os caracteres não numericos da chave do produto nCPr := ''; for i := 1 to Length( nPro ) do begin if ENumero( Copy( nPro, i, 1 ) ) then nCPr := nCPr + Copy( nPro, i, 1 ); end; // remove todos os caracteres não numericos do serial do HD nHDS := ''; for i := 1 to Length( pSHD ) do begin if ENumero( Copy( pSHD, i, 1 ) ) then nHDS := nHDS + Copy( pSHD, i, 1 ); end; // calcula o serial do programa nRes := ( StrToFloat( nCPr ) * StrToFloat( nCPr ) ) + StrToFloat( nHDS ); nRes := nRes / ( StrToFloat( nHDS ) * 2 ); i := Pos( ',', FloatToStr( nRes ) ); // verifica se foi encontrada alguma virgula no numero definido if ( i > 0 ) then begin nPa1 := Copy( FloatToStr( nRes ), 01, ( i - 1 ) ); nPa2 := Copy( FloatToStr( nRes ), ( i + 1 ), ( Length( FloatToStr( nRes ) ) - i ) ); end; if Length( nPa1 ) > Length( nPa2 ) then nSer := nPa1 else nSer := nPa2; // compara o serial encontrado, com o que esta gravado no registro da estacao if ( pSEs <> nSer ) then begin // Mensagem( 'Cópia ilegal!' ); vAut := False; end; VerificaSerial := vAut; end;
-
(Resolvido) Erro "multiple rows in singleton"
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Robinhcne, este erro você vai ter que tentar verificar por si só. Coloque um break-point antes de a sua procedure LeRegistro abrir a query, de modo que você possa inspecionar o conteúdo da propriedade SQL. Se há um erro na query durante a execução, este erro estará na cláusula sql montada e inserida nesta propriedade. (já lhe expliquei como fazer isto, há um tempinho) Abraços Sim, ok Micheus, mas o meu programa não está dando para executar pelo delphi, só estou execuntado pelo o executavel! -
(Resolvido) Erro "multiple rows in singleton"
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Difícil ter certeza. O melhor seria você depurar o programa e, antes da execução da consulta, verificar como está sua SQL. Então, pegar ela e jogar no IBExpert para ir mexendo e ver onde está o erro. Mas, tente mudar o código que pinta seu DBGrid, para testar por not IsNull: if not DtmIza.QryIza.FieldByName('Vencimento').IsNull and (DtmIza.QryIza.FieldByName('Vencimento').AsDateTime < Date) then DbgPes.Canvas.Font.Color:= clMaroon; Abraços Bom acho que agora deu certo implemetei assim e ficou sem problemas. Add ('(SELECT First 1 L.Vencimento FROM Lancamento L WHERE L.Aluno=A.Codigo and L.Pagamento is null AND EXTRACT( MONTH FROM L.Vencimento ) <= EXTRACT( MONTH FROM CURRENT_DATE ) ) AS Vencimento'); Então essa parte está resolvida, deu certo em questão da busca, mas tenho outra coisa que eu não acrescentei aqui é que quando for isso para que no edit onde aparece o nome do aluno em vermelho! oche!! :wacko: :mellow: :blink: fiquei sem enteder agora! Até ontem estava funcionado tudo normal, mas hoje comecou a dar esse erro aqui : Dynamic Sql Error Sql Error code = -104 Token uknown - line 1, char 73 1. Esse erro dá acho que é por causa desse 1 do First 1, ai eu tirei, e imendei e dá erro no L., veja os codigos: begin with vcpo do begin clear; add ('A.Nome'); add ('A.Codigo'); add ('A.Cpf'); add ('A.Processo'); Add ('A.CnhEntregue'); Add ('(SELECT First 1 L.Vencimento FROM Lancamento L WHERE L.Aluno=A.Codigo and L.Pagamento is null AND EXTRACT( MONTH FROM L.Vencimento ) <= EXTRACT( MONTH FROM CURRENT_DATE ) ) AS Vencimento'); end; with vvlr do begin clear; add ('Nome'); add ('Codigo'); add ('Cpf'); add ('Processo'); end; with TFrmPesAluno.create (application) do begin try tabela := 'alunos A'; camporetorno := 'codigo'; showmodal; finally free; end; end; if (retorno<> '') then begin inherited; -
(Resolvido) Erro "multiple rows in singleton"
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Difícil ter certeza. O melhor seria você depurar o programa e, antes da execução da consulta, verificar como está sua SQL. Então, pegar ela e jogar no IBExpert para ir mexendo e ver onde está o erro. Mas, tente mudar o código que pinta seu DBGrid, para testar por not IsNull: if not DtmIza.QryIza.FieldByName('Vencimento').IsNull and (DtmIza.QryIza.FieldByName('Vencimento').AsDateTime < Date) then DbgPes.Canvas.Font.Color:= clMaroon; Abraços Bom acho que agora deu certo implemetei assim e ficou sem problemas. Add ('(SELECT First 1 L.Vencimento FROM Lancamento L WHERE L.Aluno=A.Codigo and L.Pagamento is null AND EXTRACT( MONTH FROM L.Vencimento ) <= EXTRACT( MONTH FROM CURRENT_DATE ) ) AS Vencimento'); Então essa parte está resolvida, deu certo em questão da busca, mas tenho outra coisa que eu não acrescentei aqui é que quando for isso para que no edit onde aparece o nome do aluno em vermelho! -
(Resolvido) Erro "multiple rows in singleton"
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Amigo obrigado pela ajuda, mas continua o mesmo erro! :unsure: RobinhoCne, não tem como retornar um valor só. Ou melhor, algumas vezes podem haver mais que um valor - mesmo com a sugestão do Jhonas de usar distinct. Veja que você está buscando em lançamentos, as parcelas do aluno (A.Codigo) onde o mês (Month) do vencimento (L.Vencimento) seja menor ou igual (<=) ao mês atual. Agora perceba o óbvio: se o cara está dois meses atrasado, quantas linhas (parcelas) serão retornadas? (espero que você tenha respondido 2 - duas). Bom, o distinct, faria com que fosse trazido apenas uma ocorrência dos valores de cada coluna em uma linha retornada, logo, havendo duas datas diferentes, não tem como aparecer apenas uma linha como resposta. Se você colocar no lugar de distinct a expressão First 1, você estará dizendo para retornar apenas a primeira linha. Neste caso você não dever mais ter o erro mencionado. Entretanto, também não é o resultado que espera ter para o seu programa, não é?! Mas você pode fazer isto apenas para testar. ;) Sou obrigado a dizer este tipo de dúvida aparece por conta do modo como você está programando. Se você elaborasse uma consulta SQL de modo "tradicional", facilmente poderia utilizar o JOIN conforme o Jhonas sugeriu, e o "problema" estaria rapidamente solucionado, porque não haveria a necessidade de entender a forma como você usa estes procedimentos (com o LeRegisto). Quando você diz: "O LeRegistro é um procedimento que eu faço para a pesquisa, mas o importante: ..."; Não é verdade. O procedimento é importante sim, porque para este caso, por exemplo, faz-se necessário entender como seu procedimento funciona para saber como sugerir uma alteração nestes seus parâmetros de modo a tentar resolver a questão. Mas ele é desconhecido pela maioria dos que acessam o forum. Como eu já tive que ver este procedimento em outras oportunidades, eu arriscaria dizer que você poderia fazer do seguinte modo: procedure Tfrmalunos.spbpesClick(Sender: TObject); begin with vcpo do begin clear; add ('A.Nome'); add ('A.Codigo'); add ('A.Cpf'); add ('A.Processo'); Add ('A.CnhEntregue'); Add ('L.Vencimento); end; with vvlr do begin clear; add ('Nome'); add ('Codigo'); add ('Cpf'); add ('Processo'); end; with TFrmPesAluno.create (application) do begin try tabela := 'alunos A left join Lancamento L on (L.Aluno = A.Codigo and extract(month from L.Vencimento ) <= extract(month from current_date))'; camporetorno := 'codigo'; showmodal; finally free; end; end; if (retorno<> '') then begin inherited; LeRegistro(); Se não funcinar, paciência. Se funcinar, tente entender, pois poderá precisar de algo parecido futuramente. Ao meu ver, ainda haverá um erro de "lógica" a ser verificado. Pense da seguinte maneira, se o cara deixa de pagar Nov (11) e Dez (12) e você estiver fazendo a consulta em janeiro. Vai aparecer algum pagamento em aberto? Abraços Bom em questão desse probelma acho que não vai ser. Mas em questão apareceu assim nesse tipo de procedimento que você me passou, Esse tipo de consulta é feito automatico, para que quando mostra os nomes dos alunos apresentado na pesquisa, para quem tiver parcela em atraso apareca o nome em vermelho, mas esta aparecendo se a pessoa tem duas parcelas vencida aparace o nome duas vezes ou tres dependendo das parcelas em atrasos. Na primeira opção do First 1 retorna o nome em vermelho, bom a principio é isso que eu quero, uqe retorna não importando quantas parcelas que estão em atraso, pois assim, o nome em vermelho indicaria que seja devedor. Mas o que está acontecendo agora seria, que eu tenho dois tipos de lancamentos, um de promissorias e outro de cheques, então note que: Add ('(SELECT First 1 L.Vencimento FROM Lancamento L WHERE L.Aluno=A.Codigo and L.Pagamento is not null AND EXTRACT( MONTH FROM L.Vencimento ) <= EXTRACT( MONTH FROM CURRENT_DATE ) ) AS Vencimento'); acrescentei o L.Pagamento is not nulque seria para mostrar só os que estão com os pagametos nulos, ma sem caso dos lancamentos dos cheques mesmo eles estando com a data de pagamento preenchida ele aparece em vermelho! o que seria? :mellow: -
(Resolvido) Erro "multiple rows in singleton"
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Erro " múltiplas linhas encontradas em seleção ". Solução: Este erro acontece quando você tentar pôr valores múltiplos onde o sistema espera ver só um. Quando você faz uma declaração de atualização, a seleção da declaração que vem atrás da palavra ' é esperado que set' resulte em um valor. Se a declaração selecionada que você está usando resulta em mais de um valor, você adquirirá este erro. ou seja, o seu erro está na sua declaração Add ('(SELECT L.Vencimento FROM Lancamento L WHERE L.Aluno=A.Codigo AND EXTRACT( MONTH FROM L.Vencimento ) <= EXTRACT( MONTH FROM CURRENT_DATE ) ) AS Vencimento' ); experimente: Add ('(SELECT distinct L.Vencimento FROM Lancamento L WHERE L.Aluno=A.Codigo AND EXTRACT( MONTH FROM L.Vencimento ) <= EXTRACT( MONTH FROM CURRENT_DATE ) ) AS Vencimento' ); abraço Amigo obrigado pela ajuda, mas continua o mesmo erro! :unsure: -
Bom vou explicar do inicio. Eu queria que no meu programa, na hora que fazesse a consulta pelo pesquisa do cadastro dos alunos e que estivesse alguma parcela em atraso, iria aparecer aparecer o nome e codigo do aluno(a) em marrom, ai fiz os seguintes procedimentos: Banco de dados : Firebird Acesso ao banco atraves de IbDatabase, IbTransaction e IbQuery No cadastro de pesquisa, no DbGrid (DbgPes) onde mostra os dados da busca, no evento OnDrawColumnCell eu coloquei os seguintes dados para mostrar em marrom: if ( ( DtmIza.QryIza.FieldByName('Vencimento').AsDateTime < Date() ) and ( DtmIza.QryIza.FieldByName('Vencimento').AsString <> '' ) ) then DbgPes.Canvas.Font.Color:= clMaroon; DbgPes.DefaultDrawDataCell(Rect, DbgPes.Columns[DataCol].Field, State); e no cadastro onde eu faço a pesquisa do aluno(a) eu coloquei os seguintes dados: procedure Tfrmalunos.spbpesClick(Sender: TObject); begin with vcpo do begin clear; add ('A.Nome'); add ('A.Codigo'); add ('A.Cpf'); add ('A.Processo'); Add ('A.CnhEntregue'); Add ('(SELECT L.Vencimento FROM Lancamento L WHERE L.Aluno=A.Codigo AND EXTRACT( MONTH FROM L.Vencimento ) <= EXTRACT( MONTH FROM CURRENT_DATE ) ) AS Vencimento' ); end; with vvlr do begin clear; add ('Nome'); add ('Codigo'); add ('Cpf'); add ('Processo'); end; with TFrmPesAluno.create (application) do begin try tabela := 'alunos A'; camporetorno := 'codigo'; showmodal; finally free; end; end; if (retorno<> '') then begin inherited; LeRegistro(); O LeRegistro é um procedimento que eu faço para a pesquisa, mas o importante: Add ('(SELECT L.Vencimento FROM Lancamento L WHERE L.Aluno=A.Codigo AND EXTRACT( MONTH FROM L.Vencimento ) <= EXTRACT( MONTH FROM CURRENT_DATE ) ) AS Vencimento' ); pois é aqui que ele busca no cadastro de lancamento se o vencimento é menos ou igual do decorrente dia, ai ele vai mostrar i nome em vermelho!. Mas sei qual é o erro e tenho duas saidas, mas tentei as duas e não consegui nada! Esse erro: Erro "multiple rows in singleton" está aparecendo por causa que nos lancamentos ele lança assim, pega a quantidade de parcelas a ser gereda e monta todas com seus respectivos valors, e tipo se ele lanço outra parcela de outro valor, ele busca o Historico do começo, tipo se ele lancei duas parcelas ele fica assim: 1ªParcela, 2ªParcela, depois ele lanço mais uma parcela ai ele fica assim:1ªParcela, então quer dizer ele faz a busca e monta como 3ªParcela, por isso que dá esse erro. Então o primeiro em questão, como eu mudaria isso para dar esse erro nessa pesquisa aqui, pois eu vou ter que mudar as formas de historicos, mas eu já estou com o programa rodando e não tem como mudar todos os historicos, pois já são muitos, então como burlo isso para parar de dar erro.
-
Como eu faço para aparecer em vermelho a data quando for feriado nacional, que tipo de consulta tenho que fazer e como?
-
Não deu certo, não! Bom fiz assim, coloquei a primeira banda as das informações como columheader, e a segunda como detail e ai me mostrou mas aparece so de alguns e so um valor, será que tem que fazer ums filtro das tabelas alunos para as lancamentos informando o aluno, mas a busca é só de datas, como faço isso?
-
Não deu certo, não!
-
ou, uma banda Detail para os dados do cliente e uma Sub-detail para as parcelas... Bom deixei dessa maneira que você citou mesmo, a instrução para mostrar os dados de lancamento onde os campos estão na banda subdetail: With DtmIza.QryAluLan do Begin Close; Sql.Clear; Sql.Add ('Select Codigo, Aluno, Vencimento, Valor, Emissao, Pagamento, Historico, Historico1, Agencia,' +'Conta, Cheque, Tipo From Lancamento'); Open; end; e os dados que mostra os dados buscados por alunos: With DtmIza.QryIza do Begin Close; Sql.Clear; Sql.Add ('Select Codigo, Nome, DtCadastro, Categoria, Servicos From Alunos'); Sql.Add ('where (DtCadastro >= :d1) and (DtCadastro <= :d2)'); ParambyName('d1').value := FormatDateTime ('dd/mm/yyyy' , StrToDate (TxtDataInicial.Text)); ParambyName('d2').value := FormatDateTime ('dd/mm/yyyy' , StrToDate (TxtDataFinal.Text)); Open; end; e não está mostrando nada.
-
Bom dia, Como eu faço para aparecer um relatório tipo detalhado da pessoa, digo, tenho todas as parcelas ou cheques do cliente lançado ai quero que apareça todas elas no relatório tipo assim: Histótrico > nesse histórico está dizendo qual parcela é se é a primeiro segunda etc, então queria que ficasse assim: Histórico Vencimento Valor Dt de Pagamento 1ªparcela 10/01/2008 100,00 09/01/2008 2ªparcela 10/02/2008 100,00 12/02/2008 3ªparcela 10/03/2008 100,00 4ªparcela 10/04/2008 100,00 Como faço em questão de visual e codigos......? Bom eu fiz assim: Coloquei uma banda rbDetai, onde tem os dados do cliente e uma subDetail para mostrar tipo em baixo desses dados os dados das parcelas quer dizer a quantidade, mas ai não aparece nada será qiue estou montando certo?
-
algo assim. alguém poderia me dizer como ficaria ó codigo neste caso, pois parece que é um código bem pequeno onde trato todos os qrlabel´s de uma só vez.....mas não sei como montar. Grato Me inforna qual banco de dados e componentes que você usa! Pois eu utilizo mais ou menos assim, mas aqui eu faço assim, se o tipo for igual a 2 ele me mostra no qrlabel em vermelho, mas é mais ou menos isso ai: if DtmIza.QryIza.FieldByName('Tipo').AsInteger = 2 Then Begin QTValor.Font.Color := clred; end;
-
(Resolvido) Ajuda no relatório de cheques
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
É me desculpe: Mas então as variaveis ficaram assim: Entrada, Saida, Total : Real; no lugar de Valor1, Valor2, Valor3 : Real; Então mas como ficaria ? Pois não entendi de como ficaria essa linha que está dando o erro: Entrada.Caption := FloatToStr (Entrada); Não explicar.Mas vou dar uma sugestão: renomeie o seu componente QRText - Entrada - para QTEntrada. Ficou assim: With TFrmRelCaixa.Create(Application) Do Try QTEntrada.Caption := FormatFloat('R$ ##0.00',Entrada); QTSaida.Caption := FormatFloat('R$ ##0.00',Saidas); QTTotal.Caption := FormatFloat('R$ ##0.00',Total); QuickRep1.Preview; Finally Free; end; close; Pois ai eu já até formatei para que no relatório e mostra assim: R$ 555,00 Ok, Resolvido mais um probleminha meu... Agradeço a atenção de todos, pois para min está sendo uma otima ajuda. -
(Resolvido) Ajuda no relatório de cheques
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
É me desculpe: Mas então as variaveis ficaram assim: Entrada, Saida, Total : Real; no lugar de Valor1, Valor2, Valor3 : Real; Então mas como ficaria ? Pois não entendi de como ficaria essa linha que está dando o erro: Entrada.Caption := FloatToStr (Entrada); -
(Resolvido) Ajuda no relatório de cheques
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Você está correto Denis Courcy. Eu mesmo já havia feito menção a isto ano passado. É força do mau hábito. ;) Valeu. Bom, ficou assim: With TFrmRelCaixa.Create(Application) Do Try QuickRep1.Preview; Entrada.Caption := FloatToStr (Entrada); Finally Free; end; Mas ai deu esse erro, na hora de compilar: [Error] FLisRelCaixa.pas(88): There is no overloaded version of 'FloatToStr' that can be called with these arguments -
(Resolvido) Ajuda no relatório de cheques
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Removi o codigo do BeforePrint e fiz do jeito que você passou e dá esse erro, coloquei antes e depois dessa linha de codigo, mas deu a mesma coisa e faltou acrescentar que é no Formulário (FrmRelChequePre.Total.Caption := FloatToStr (Valor1);) -
(Resolvido) Ajuda no relatório de cheques
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Eu entenderia este "na public" como sendo na seção public da declaração da sua classe do form do relatório, até porque depois você diz: Isto posto, como você estaria iniciando VALOR1 antes de criar o seu FrmRelChequePre? ... 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; Bom, deixa eu passar mais informações dessa questão, pois também fiz algumas alterações: Eu tenho um form para buscar os dados qeu serão mostrados no relatório, dados do formulario: Nome do Formulario (FrmLisRelCheques) Um IbQuery (QryTotais) responsavel pela total do sum do campo valor Um TDateEdit do pacote de componentes do RxLib (TxtDataInicial) e outro TDateEdit (TxtDataFinal) responsavel pelo filtro das datas entre o Vencimento da data incial até a data final E Um SpeedButton (SpbExibir) resposanvel pelos os procedimentos a serem mostrados no relatório. 1º A Variavel Valor1 foi declarada na public desse formulário de buscas: ... private { Private declarations } public valor1 : Real; end; var FrmLisRelCheques: TFrmLisRelCheques; implementation .... No SpbExibir: procedure TFrmLisRelCheques.spbexiClick(Sender: TObject); begin 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, agencia, conta, cheque, Tipo From Lancamento'); Sql.Add('where (Vencimento >= :d1) and (Vencimento <= :d2) and cheque is not null and pagamento is null'); 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 QryTotais do Begin QryTotais.Close; QryTotais.Sql.Text :='Select sum(Valor)as "SOMA" From Lancamento Where cheque is not null and pagamento is null'; QryTotais.Open; end; valor1 := QryTotais.FieldByName('Soma').AsFloat; With TFrmRelChequePre.Create(Application) Do Try QuickRep1.Preview; Finally Free; end; close; Emquestão de vizualização dos dados no relatório está perfeito, só essa parte: With QryTotais do Begin QryTotais.Close; QryTotais.Sql.Text :='Select sum(Valor)as "SOMA" From Lancamento Where cheque is not null and pagamento is null'; QryTotais.Open; end; valor1 := QryTotais.FieldByName('Soma').AsFloat; Que é reposanvel pela soma e onde que o resultado é jogado para a QryTotais. Até aqui está Ok, pois testei para que jogasse o resultado em TLabel desse formulário e ai é mostrado, só no relatório que não está mostrando, fiz e refiz varias vezes pois nada: O Formulário onde está o relatório: Nome (FrmRelCheques) Principal banda, onde é para mostrar os resultados: Nome da Banda (QrBand4), setado o BandType para RbSummary, nessa banda tem um QrLabel (Total) onde será mostrado o resultado do Valor1 do FrmLisRelCheques. No Evento BeforePrint da QrBand4 coloquei os seguintes dados para ser mostrado o resultado do Valor1: procedure TFrmRelChequePre.QRBand4BeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean); begin Total.Caption := FloatToStr (FrmLisRelCheques.Valor1); end; Mas ai chega a questão, pois não mostra nada! :angry: Espero que essa informações possa me ajudar e que você possam entender o meu pedido. Aguardo respostas, Att , Robinhocne -
(Resolvido) Fazer atualização no Banco de dados sem interferir no
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
oK :D Resolvido! Deu certo, altera certinho os dados da tabela -
(Resolvido) Ajuda no relatório de cheques
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Coloquei para a variavel receber, mas nada! :angry: A query eu já testei em tudo, mas atualmente estou testando direto no botão mesmo! veja: 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; :unsure: Obs.: o engraçado ]e que eu montei um relatório a algum tempo para um amigo dessa maneira e deu certo, mas esse nada acontece, quer dizer tenho até ele aqui, e nele funciona e estou fazendo igualzinho no meu projeto e nada,nada e nada :( -
(Resolvido) Ajuda no relatório de cheques
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Estou executando, tudo pelo QR e a variavel que foi declarada é na propria QR, isso que estou achando estranho!