
robinhocne
Membros-
Total de itens
854 -
Registro em
-
Última visita
Tudo que robinhocne postou
-
Erro na exibição do relatorio pela segunda consulta
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Robinho .. experimente tirar o QrSemanal.Free e veja se da certo. abraço Tirei e ai parou de esse erro: A component named QrSemanal already exists. mas ai ele deu o mesmo erro mas assim A component named Dat1 already exists. esse dat1 é os componentes de data, mas ai fiz a mesma coisa que tinha feito nesse anterior e continuou dando o mesmo erro, o que estou achando estranho que em outro relatorio eu uso a mesma coisa e dá certo e nesse não. -
( Resolvido ) Inserir dados no RxMemoryData, pegando os dados
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
voce reparou como esta este comando ? if ( not TblCarCheques.Active ) then TblCheques.Open; TblCarCheques TblCheques ???? não seria dessa maneira ? if ( not TblCarCheques.Active ) then TblCarCheques.Open; abraço hum era isso mesmo, mas tinha outras coisa, valeu... ficou assim: if RdbRep.Checked then begin with QryCarChe do begin close; sql.Clear; sql.Add('Select L.Codigo, L.Aluno, L.Valor, L.Cheque, L.Agencia, L.Conta, L.Vencimento, A.Codigo, A.Nome from lancamento L, Alunos A' +' where L.Aluno = A.Codigo and L.pagamento is null and L.cheque is not null'); open; end; QryCarChe.First; TblCarCheques.Open; while ( not QryCarChe.Eof ) do begin with TblCarCheques do begin Insert; TblCarChequesCodAluno.AsInteger := QryCarChe.FieldByName('Aluno').AsInteger; TblCarChequesNomAluno.AsString := QryCarChe.FieldByName('Nome').AsString; TblCarChequesCheque.AsString := QryCarChe.FieldByName('Cheque').AsString; TblCarChequesValor.AsCurrency := QryCarChe.FieldByName('Valor').AsCurrency; TblCarChequesVencimento.AsDateTime := QryCarChe.FieldByName('Vencimento').AsDateTime; TblCarChequesCodigo.AsInteger := QryCarChe.FieldByName('Codigo').AsInteger; Post; end; QryCarChe.Next; end; -
Erro na exibição do relatorio pela segunda consulta
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
O erro está a maneira como voce cria o QR O componente nomeado QrSemanal já existe. por isso da o erro, pois voce esta tentando criar novamente o mesmo componente. Tente fazer esta modificação try if QrSemanal = Nil then QrSemanal:= TQrSemanal.Create(self); except ShowMessage('Erro na criação do relatório!!'); exit; end; QrSemanal.PreviewModal; QrSemanal.Free; close; OBS: Para maiores informações sobre o uso do comando Free veja o help do delphi abraço no começo eu coloquei assim: try if QrSemanal = Nil then QrSemanal:= TQrSemanal.Create(self); except ShowMessage('Erro na criação do relatório!!'); exit; end; .......código fonte....... no fim assim.... QrSemanal.PreviewModal; QrSemanal.Free; close; mas continua dando o mesmo erro, mas reparei que quando eu não tenh nada na minha consulta para mostrar no relatorio ai nem dá erro, mas quando eu tenho dados para ser exibido no relatorio ai ele dá o erro.... -
( Resolvido ) Inserir dados no RxMemoryData, pegando os dados
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
TblCarCheques: Não pode executar esta operação em um dataset fechado. significa que este comando não está funcionando if ( not TblCarCheques.Active ) then TblCheques.Open; Porque voce já não deixa ele aberto logo no inicio ? abraço mas eu deixei agora assim: TblCheques.Open; mas continua dando a mesma mensagem... -
(Resolvido) Como não dá mensagem de erro se não achar a imagem..
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
como eu posso pular esse erro ?? Basta testar se existe o arquivo para o caminho especificado if DtmIza.QryConfig.FieldByName('Imagem_Prin').AsString <> null then begin Caminho := DtmIza.QryConfig.FieldByName('Imagem_Prin').AsString; if FileExists(caminho) then Image1.Picture.LoadFromFile(Caminho); end; abraço Ok Resolvido... Isso mesmo que eu queria! -
Estou com um pequeno problema.... gravo no banco de dados o caminho da imagem da aplicação, mas quando não tem esse imagem no caminho salvo do banco ele da esse erro: como eu posso pular esse erro ?? esse é o meu codigo fonte que eu pego o caminho da imagem: procedure Tfrmprincipal.FormShow(Sender: TObject); var caminho : string; begin BuscaDataCaixa; //buscar caminho da imagem with DtmIza.QryConfig do begin close; sql.Clear; sql.Add('select Imagem_Prin from Configuracao'); open; end; if DtmIza.QryConfig.FieldByName('Imagem_Prin').AsString <> null then begin Caminho := DtmIza.QryConfig.FieldByName('Imagem_Prin').AsString; Image1.Picture.LoadFromFile(Caminho); end; end;
-
Eu executo o relatorio uma vez ai beleza, mas depois executa mais outra vez dá esse erro: Ai executo novamente e dá esse erro: A component named QrSemanal already exists. esse QrSemanal é o nome do meu relatório, sei que está muito grande e já tentei varias maneiras para resolver mais nada, mas vou passar todo o codigo fonte para alguém me ajudar.. procedure TfrmLisRelPraSemanais.spbexiClick(Sender: TObject); begin Application.CreateForm(TQrSemanal,QrSemanal); // Coluna das Datas for i:=1 to 7 do begin data := TQRLabel.Create(self); with data do begin Name := 'Dat'+inttostr(i); Left := -40+(i*135); top := 50; Frame.DrawTop := true; Frame.DrawBottom := true; Frame.DrawLeft := true; Frame.DrawRight := true; Transparent := true; Width := 130; Font.Size := 12; Height := 21; Font.Name := 'Arial'; Font.Style := [fsBold]; AutoSize := false; Caption := DateToStr(DataInicial.Date-1 + i); Alignment := TaCenter; Parent := QrSemanal.QRBand1; end; end; // coluna de horarios for a:=1 to 16 do begin HorIni := TQRLabel.Create(self); with HorIni do begin Name := 'Hor'+inttostr(a); Left := 4; Height := 22; Frame.DrawTop := true; Frame.DrawBottom := true; Frame.DrawLeft := true; Frame.DrawRight := true; Transparent := true; AutoSize := false; Width := 43; Font.Size := 10; Font.Name := 'Arial'; Font.Style := [fsBold]; Caption := ''; Alignment := tacenter; top := 50+(a*25); Parent := QrSemanal.QRBand1; end; // end; // coluna de horarios // for HrF:=1 to 16 do // begin HorFin := TQRLabel.Create(self); with HorFin do begin Name := 'HorFin'+inttostr(a); Left := 50; Height := 22; Frame.DrawTop := true; Frame.DrawBottom := true; Frame.DrawLeft := true; Frame.DrawRight := true; Transparent := true; AutoSize := false; Width := 43; Font.Size := 10; Font.Name := 'Arial'; Font.Style := [fsBold]; Caption := ''; Alignment := tacenter; top := 50+(a*25); Parent := QrSemanal.QRBand1; end; end; //criacao do QrLabel do Instrutor begin Inst := TQRLabel.Create(Self); with Inst do begin Name := 'Ins'; Left := 104; top := 480; Frame.DrawTop := true; Frame.DrawBottom := true; Frame.DrawLeft := true; Frame.DrawRight := true; Transparent := true; AutoSize := false; Width := 300; Font.Size := 12; Font.Name := 'Arial'; Parent := QrSemanal.QRBand1; end; end; soma := 0; for b:=1 to 16 do // total de aluno um em baixo do outro for c := 1 to 7 do // total de coluna de aluno begin soma := Soma + 1; aluno := TQRLabel.Create(Self); with Aluno do begin Name := 'Al'+inttostr(soma); Left := -40+(c*135); top := 50+(b*25); Frame.DrawTop := true; Frame.DrawBottom := true; Frame.DrawLeft := true; Frame.DrawRight := true; Transparent := true; AutoSize := false; Width := 130; Font.Size := 9; Height := 22; Font.Name := 'Arial'; Font.Style := [fsBold]; Caption := ''; Parent := QrSemanal.QRBand1; end; end; //mostrar o nome do instrutor With DtmIza.QryPraticas do begin close; sql.Clear; sql.add('Select Codigo, Nome from Instrutores where codigo ='+ TxtInst.Text); open; end; If not DtmIza.QryPraticas.IsEmpty then begin TQRLabel(FindComponent( 'Ins' )).Caption := DtmIza.QryPraticas.FieldByName('Nome').AsString; end; // pesquisa de Horarios with dtmiza.QryIza do begin close; sql.clear; sql.add ('Select HorarioInicial, HorarioFinal, Instrutor from HorariosPraticas where Instrutor =:Ins'); ParamByName('Ins').AsString := TxtInst.Text; open; end; Cont := 1; while not dtmiza.QryIza.Eof do begin TQRLabel(FindComponent( 'Hor' + IntToStr(Cont))).Caption := FormatDateTime('hh:nn', dtmiza.QryIza.FieldByName('HorarioInicial').AsDateTime); TQRLabel(FindComponent( 'HorFin' + IntToStr(Cont))).Caption := FormatDateTime('hh:nn', dtmiza.QryIza.FieldByName('HorarioFinal').AsDateTime); DtmIza.QryIza.Next; Cont := Cont + 1; end; // pesquisa de alunos for x:=1 to 16 do begin for y:=1 to 7 do begin z:=z+1; if TQRLabel(FindComponent( 'Hor' + IntToStr(x))).Caption <>'' then begin DtmIza.QryPraticas.close; DtmIza.QryPraticas.sql.Clear; DtmIza.QryPraticas.sql.Add('select p.instrutor, p.horario, p.data, p.aluno, p.Status, a.codigo, a.nome from praticas p, alunos a' +' where instrutor =:inst and horario =:hor and data =:dat and p.aluno = a.codigo'); DtmIza.QryPraticas.ParamByName('Inst').AsString := TxtInst.Text; DtmIza.QryPraticas.ParamByName('dat').AsDate := StrtoDate(TQRLabel(FindComponent('Dat' + IntToStr( y ) ) ).Caption); DtmIza.QryPraticas.ParamByName('hor').AsTime := StrToTime(TQRLabel(FindComponent( 'Hor' + IntToStr(x))).Caption); DtmIza.QryPraticas.open; end; if not DtmIza.QryPraticas.IsEmpty then begin if DtmIza.QryPraticas.FieldByName('Status').AsInteger = 0 then begin TQRLabel(FindComponent( 'Al' + IntToStr(z))).Caption:= ' **********************'; end else begin TQRLabel(FindComponent( 'Al' + IntToStr(z))).Caption := ' ' + DtmIza.QryPraticas.FieldByName('nome').asstring; end; end; end; end; QrSemanal.Preview; QrSemanal.Free; close; end;
-
( Resolvido ) Inserir dados no RxMemoryData, pegando os dados
uma questão postou robinhocne Delphi, Kylix
Estou fazendo uma instrução sql e coloquei dentro do while um insert na TblCarCheques(RxMemoryData) mas dá esse erro: pois eu quero que percorre por todos registros que está, vindo da consulta e ai insere na TblCarCheques, para jogar para o DbGrid! pois isso eu quero em tabelas temporarias! Esse é mu codigo fonte: if RdbRep.Checked then begin with QryCarChe do begin close; sql.Clear; sql.Add('Select L.Codigo, L.Aluno, L.Valor, L.Cheque, L.Agencia, L.Conta, L.Vencimento, A.Codigo, A.Nome from lancamento L, Alunos A' +' where L.Aluno = A.Codigo and L.pagamento is null and L.cheque is not null'); open; end; while ( not QryCarChe.Eof ) do begin if ( not TblCarCheques.Active ) then TblCheques.Open; with TblCarCheques do begin Insert; Fields[00].AsInteger := QryCarChe.FieldByName('Aluno').AsInteger; Fields[01].AsString := QryCarChe.FieldByName('Nome').AsString; Fields[02].AsString := QryCarChe.FieldByName('Cheque').AsString; Fields[03].AsCurrency := QryCarChe.FieldByName('Valor').AsCurrency; Fields[04].AsDateTime := QryCarChe.FieldByName('Vencimento').AsDateTime; Fields[05].AsInteger := QryCarChe.FieldByName('Codigo').AsInteger; Post; end; QryCarChe.Next; end; end; -
(Resolvido) Deletar linha de um dbrigd selecionando outro dbgrid
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Opa, consegui resolver, estava fuçando no primeiro programa que eu tinha feito no curso de delphi, ai tbém lembrei que tinha feito algo parecido, verifiquei e foi batata, era mais ou menos do jeito que eu queria... E ainda foi bem mais facil do que eu pensei, obrigado a todos pela atenção e paciencia! If ((not TblCheques.Active) or (TblCheques.IsEmpty)) then Exit; begin TblCheques.Delete; TxtVal.Value := TxtVal.Value - Valor.Value; end; -
Instrução Sql não mostra dados em condição
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
robinhocne, nesta caso faça o mais lógico que seria simplesmente perguntar se não é fim do arquivo (caso em que a consulta seria nula) para então fazer as atribuições - não tem porque utilizar um while: ... if not QryAgenda.Eof then begin if (QryAgenda.FieldByName('Bloqueado').AsInteger = 0) then begin TEdit( FindComponent( 'Al' + IntToStr ( y ) + IntToStr ( z ) ) ).Text:= '**********'; end else begin TEdit( FindComponent( 'Al' + IntToStr ( y ) + IntToStr ( z ) ) ).Text:= StrZero(QryAgenda.fieldByName('Aluno').AsInteger,6); TEdit( FindComponent( 'Ct' + IntToStr ( y ) + IntToStr ( z ) ) ).Text:= QryAgenda.fieldByName('Categoria').AsString; end; end; ... e como você executa a consulta (query) apenas na condição: if TpsvBorderLabel(FindComponent( 'Hor' + ... then, a alteração acima deverá ser colocada dentro do bloco begin...end deste if porque, eventualmente, pode ocorrer de você numa passagem ter aberto a consulta e numa próxima passagem, ao não validar o primeiro if, passar para o próximo (do código acima) com a consulta aberta e executar o procedimento incorretamente. Quanto a pesquisar o erro, sugiro que você ponha um break na atribuição que ocorre quando Bloqueado deveria retornar 0 - se nem sequer parar no break, é sinal de que sua consulta não está retornando este valor. Voce vai precisar achar uma pista do problema porque, aparentemente não há algo visivelmente errado. Abraços Coloquei da maneira que você me passou, pesquisei bastante e até fiz para que quando eu marcasse como bloqueado ele gravaria dessa maneira (***********) em um campo da tabela no banco de dados e para eu retornar o que tinha gravado, mas não adiantou nada, continua a mesma coisa! -
(Resolvido) Deletar linha de um dbrigd selecionando outro dbgrid
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Acho que estou mais confuso do que nunca... Adaptei aqui mas não acontece nada, inclusive só dá a mensagem de que o registro solicitado.... não foi encontrado... Mas faltou uns fatores importantes. No DbgCarChe(DbGrid1) eu uso a IbQuey (QryCarChe) que mostra todos os cheques, clicando duas vezes a linha fica vermelha para indicar que o cheque está sendo repassado e assim eu faço um insert no outro grid DbgCheques(DbGrid2) que nela eu conecto com um RxMemoryData(TblCheques), pois então eu clico no QryCarChe para deletar do DbgCheques. if TblCheques.Locate('Codigo',itemx,[loCaseInsensitive, loPartialKey]) then begin if MessageDlg('Deseja Apagar o Registro ?' , mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin TblCheques.Delete; TblCheques.Refresh;//.ApplyUpdates; end; // executar outros comandos se for o caso end else begin MessageDlg('O Registro solicitado' + #13 + 'não foi encontrado.' , mtInformation,[mbOk], 0); //Edit1.Clear; end; procedure TFrmCarteiraDeCheque.DbgCarCheDrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState); begin itemx := TblCheques.FieldValues['Codigo'].AsInteger; end; que estou fazendo de errado?? -
(Resolvido) Deletar linha de um dbrigd selecionando outro dbgrid
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
No evento OnDblClick do DBGrid voce coloca este codigo var Form1: TForm1; itemx : integer = 0; implementation {$R *.DFM} procedure TForm1.DBGrid1DblClick(Sender: TObject); begin // PROCURAR NA TABELA QUE ESTA NO DBGRID2 UM REGISTRO PARA DELETAR if CDS_Tabela.Locate('CAMPODATABELA',itemx,[loCaseInsensitive, loPartialKey]) then begin if MessageDlg('Deseja Apagar o Registro ?' , mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin CDS_Tabela.Delete; CDS_Tabela.ApplyUpdates(-1); end; // executar outros comandos se for o caso end else begin MessageDlg('O Registro solicitado' + #13 + 'não foi encontrado.' , mtInformation,[mbOk], 0); Edit1.Clear; end; end; // No evento OnCellClick do DBGrid procedure TForm1.DBGrid1CellClick(Column: TColumn); begin itemx := CDS_TabelaITEM.AsInteger; end; OBS: CDS_Tabela é o ClientDataSet da sua tabela a variavel inteira itemx receberá o valor do item ou numero ou codigo do registro que voce quer, quando voce clicar no registro desejado. No evento OnDblClick do DBGrid , quando voce der o duplo click o codigo ira procurar o registro da outra tabela atraves do locate.... se for encontrado executara a deleção do registro, caso contrario mostrara uma mensagem dizendo que o registro não foi encontrado na tabela. abraço Mas eu utilizo, só uma IbDataBase, IbQuery e IbTransaction e na no grid eu chamo pela query local! Como eu poderia fazer assim? -
(Resolvido) Deletar linha de um dbrigd selecionando outro dbgrid
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Se voce tem duas dbgrids e consequetemente duas tabelas linkadas a estes dbgrids, basta então que ao dar um duplo clique em um registro da primeira, e procurar na segunda usando locate ou parametro, e então deletar o registro da segunda. abraço me falaram sobre o locate mas eu não sei como usar, você poderia me ajudar ??? -
Instrução Sql não mostra dados em condição
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Mas ele não me retorna, mais linhas na query, pois o Horario marcado é unico e data tbém e tenho validações para que não deixe o usuario marcar em horarios e dias iguais, pois na posição x ele percorre 7 vezes que são os dias da semana e na posição y ele percorre 16 vezes para rodar cada horario. Então ai ele só pega uma vez o horario daquele dia e verifica e assim por diante. -
Estou formando uma estrutura para que quando eu clicar na na linha do DbgCarChe(Dbgrid) ele apagar a linha do outro dbgrid(DbgCheques), os Dbgrids são iguais só que o DbgCarChe eu mostro todos os cheques e quando eu clico duas vezes eu lanço o determinado cheque para o outro dbgrid, e a linha do cheque selecionado do DbgCarChe fica em vermelho e quando eu clico duas vezes nela ela volta a cor normal, ai eu quero excluir do DbgCheques, estava fazendo assim mas não deu certo, o que estou fazendo de errado. Aluno, Cheque, Datado são variaveis que eu atribuo os valores da linha do grid pelo evento afterscroll da query que está ligada no dbgrid (dbgcarche), e TxtVal.value e um TCurrencyEdit do RxLib que tbém atribuo o valor pelo afterscroll. if tblcheques.Fields[00].AsString = Aluno then if tblcheques.Fields[02].AsString = Cheque then if tblcheques.Fields[03].AsCurrency = TxtVal.value then if tblcheques.Fields[04].AsDateTime = Datado then begin if ( not tblcheques.Active ) then tblcheques.Open; with tblcheques do begin Delete; Fields[00].AsString := Aluno; Fields[02].AsString := Cheque; Fields[03].AsCurrency := Valor.value; Fields[04].AsDateTime := Datado; Post; end; tblcheques.Refresh;
-
Estou fazendo uma consulta para a grade horario minha, mas quando ele passa por aqui: if (QryAgenda.FieldByName('Bloqueado').AsInteger = 0) then ....... quando ele passa e o Bloqueado é 1 ele me mostra, mas quando é 0 ele não retorna nada. for x:=1 to 16 do begin for y:=1 to 7 do begin z:=z+1; if TpsvBorderLabel(FindComponent( 'Hor' + IntToStr( x ) ) ).Caption<>'' then begin QryAgenda.close; QryAgenda.sql.Clear; QryAgenda.sql.Add('Select * From Praticas where Instrutor = :Inst and data = :PDATA and horario = :PHORARIO'); QryAgenda.ParamByName('Inst').AsString := txtcodins.Text; QryAgenda.ParamByName('Pdata').AsDate := StrtoDate(TPanel(FindComponent('Pan' + IntToStr( y ) ) ).Caption); QryAgenda.ParamByName('Phorario').AsTime := StrToTime(TpsvBorderLabel(FindComponent( 'Hor' + IntToStr( x ) ) ).Caption); QryAgenda.open; end; while ( not QryAgenda.Eof) do begin if (QryAgenda.FieldByName('Bloqueado').AsInteger = 0) then begin TEdit( FindComponent( 'Al' + IntToStr ( y ) + IntToStr ( z ) ) ).Text:= '**********'; end else begin TEdit( FindComponent( 'Al' + IntToStr ( y ) + IntToStr ( z ) ) ).Text:= StrZero(QryAgenda.fieldByName('Aluno').AsInteger,6); TEdit( FindComponent( 'Ct' + IntToStr ( y ) + IntToStr ( z ) ) ).Text:= QryAgenda.fieldByName('Categoria').AsString; end; QryAgenda.Next; end; end; end; Já fiz o Debug e vi que não mostra nada mesmo, mas por que será ?????
-
Este erro acontece em virtude deste codigo Application.CreateForm(TQrSemanal,QrSemanal); /// /// /// QrSemanal.Preview; QrSemanal.Free; Altere o codigo deste maneira try if QrSemanal = Nil then QrSemanal := TQrSemanal.Create(self); except ShowMessage('Erro na criação do relatório!!'); exit; end; QrSemanal.Prepare; QrSemanal.PreviewModal; QrSemanal.Free; QrSemanal := Nil; abraço isso dai eu vou colocar no lugar disso: QrSemanal.Preview; QrSemanal.Free;
-
Na primeira vez que eu executo o relatório dá tudo certo, mas quando eu vou rodar ele de novo ele dá esse erro: esse é o meu codigo fonte : var frmLisRelPraSemanais: TfrmLisRelPraSemanais; data, HorIni, HorFin, aluno, Inst, Cat :TQRLabel; i, a, b, c, d, e, Cont, soma, x, y, z :integer; SomaData, HrF : Integer; implementation uses fdtmiza, FRelPraSemanal, Praticas, FRelSemanal, IBQuery, FPrincipal, FPesquisa, funcoes; {$R *.dfm} procedure TfrmLisRelPraSemanais.spbfecClick(Sender: TObject); begin Close; end; procedure TfrmLisRelPraSemanais.spbexiClick(Sender: TObject); begin Application.CreateForm(TQrSemanal,QrSemanal); // Coluna das Datas for i:=1 to 7 do begin data := TQRLabel.Create(self); data.Name := 'Dat'+inttostr(i); data.Left := -40+(i*135); data.top := 50; data.Frame.DrawTop := true; data.Frame.DrawBottom := true; data.Frame.DrawLeft := true; data.Frame.DrawRight := true; data.Transparent := true; data.Width := 130; data.Font.Size := 12; data.Height := 21; data.Font.Name := 'Arial'; data.Font.Style := [fsBold]; data.AutoSize := false; data.Caption := DateToStr(DataInicial.Date-1 + i); data.Alignment := TaCenter; data.Parent := QrSemanal.QRBand1; end; // coluna de horarios for a:=1 to 16 do begin HorIni := TQRLabel.Create(self); HorIni.Name := 'Hor'+inttostr(a); HorIni.Left := 4; HorIni.Height := 23; HorIni.Frame.DrawTop := true; HorIni.Frame.DrawBottom := true; HorIni.Frame.DrawLeft := true; HorIni.Frame.DrawRight := true; HorIni.Transparent := true; HorIni.AutoSize := false; HorIni.Width := 43; HorIni.Font.Size := 10; HorIni.Font.Name := 'Arial'; HorIni.Font.Style := [fsBold]; // hora.Caption := inttostr(6+a)+':00'; HorIni.Caption := ''; HorIni.Alignment := tacenter; HorIni.top := 50+(a*25); HorIni.Parent := QrSemanal.QRBand1; end; // coluna de horarios for HrF:=1 to 16 do begin HorFin := TQRLabel.Create(self); HorFin.Name := 'HorFin'+inttostr(HrF); HorFin.Left := 50; HorFin.Height := 23; HorFin.Frame.DrawTop := true; HorFin.Frame.DrawBottom := true; HorFin.Frame.DrawLeft := true; HorFin.Frame.DrawRight := true; HorFin.Transparent := true; HorFin.AutoSize := false; HorFin.Width := 43; HorFin.Font.Size := 10; HorFin.Font.Name := 'Arial'; HorFin.Font.Style := [fsBold]; // hora.Caption := inttostr(6+a)+':00'; HorFin.Caption := ''; HorFin.Alignment := tacenter; HorFin.top := 50+(HrF*25); HorFin.Parent := QrSemanal.QRBand1; end; //criacao do QrLabel do Instrutor begin Inst := TQRLabel.Create(Self); Inst.Name := 'Ins'; Inst.Left := 104; Inst.top := 480; Inst.Frame.DrawTop := true; Inst.Frame.DrawBottom := true; Inst.Frame.DrawLeft := true; Inst.Frame.DrawRight := true; Inst.Transparent := true; Inst.AutoSize := false; Inst.Width := 300; Inst.Font.Size := 12; Inst.Font.Name := 'Arial'; Inst.Parent := QrSemanal.QRBand1; end; soma := 0; for b:=1 to 16 do // total de aluno um em baixo do outro for c := 1 to 7 do // total de coluna de aluno begin soma := Soma + 1; aluno := TQRLabel.Create(Self); aluno.Name := 'Al'+inttostr(soma); aluno.Left := -40+(c*135); aluno.top := 50+(b*25); aluno.Frame.DrawTop := true; aluno.Frame.DrawBottom := true; aluno.Frame.DrawLeft := true; aluno.Frame.DrawRight := true; aluno.Transparent := true; aluno.AutoSize := false; aluno.Width := 130; aluno.Font.Size := 9; Aluno.Height := 22; aluno.Font.Name := 'Arial'; Aluno.Font.Style := [fsBold]; aluno.Caption := ''; aluno.Parent := QrSemanal.QRBand1; end; //mostrar o nome do instrutor With DtmIza.QryPraticas do begin close; sql.Clear; sql.add('Select Codigo, Nome from Instrutores where codigo ='+ TxtInst.Text); open; end; If not DtmIza.QryPraticas.IsEmpty then begin TQRLabel(FindComponent( 'Ins' )).Caption := DtmIza.QryPraticas.FieldByName('Nome').AsString; end; // pesquisa de Horarios with dtmiza.QryIza do begin close; sql.clear; sql.add ('Select HorarioInicial, HorarioFinal, Instrutor from HorariosPraticas where Instrutor =:Ins'); ParamByName('Ins').AsString := TxtInst.Text; open; end; Cont := 1; while not dtmiza.QryIza.Eof do begin TQRLabel(FindComponent( 'Hor' + IntToStr(Cont))).Caption := FormatDateTime('hh:nn', dtmiza.QryIza.FieldByName('HorarioInicial').AsDateTime); TQRLabel(FindComponent( 'HorFin' + IntToStr(Cont))).Caption := FormatDateTime('hh:nn', dtmiza.QryIza.FieldByName('HorarioFinal').AsDateTime); DtmIza.QryIza.Next; Cont := Cont + 1; end; // pesquisa de alunos for x:=1 to 16 do begin for y:=1 to 7 do begin z:=z+1; if TQRLabel(FindComponent( 'Hor' + IntToStr(x))).Caption <>'' then begin DtmIza.QryPraticas.close; DtmIza.QryPraticas.sql.Clear; DtmIza.QryPraticas.sql.Add('select p.instrutor, p.horario, p.data, p.aluno, p.bloqueado, a.codigo, a.nome from praticas p, alunos a' +' where instrutor =:inst and horario =:hor and data =:dat and p.aluno = a.codigo'); DtmIza.QryPraticas.ParamByName('Inst').AsString := TxtInst.Text; DtmIza.QryPraticas.ParamByName('dat').AsDate := StrtoDate(TQRLabel(FindComponent('Dat' + IntToStr( y ) ) ).Caption); DtmIza.QryPraticas.ParamByName('hor').AsTime := StrToTime(TQRLabel(FindComponent( 'Hor' + IntToStr(x))).Caption); DtmIza.QryPraticas.open; end; if not DtmIza.QryPraticas.IsEmpty then begin if DtmIza.QryPraticas.FieldByName('Bloqueado').AsString = 'S' then begin TQRLabel(FindComponent( 'Al' + IntToStr(z))).Caption:= ' **********************'; end; //else // begin TQRLabel(FindComponent( 'Al' + IntToStr(z))).Caption := ' ' + DtmIza.QryPraticas.FieldByName('nome').asstring; // end; end; end; end; QrSemanal.Preview; QrSemanal.Free; DtmIza.QryPraticas.close; close; end;
-
Insert no DbGrid usando o RxMemoryData
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
robinhocne, o problema não tem qualquer relação com o RxMemoryData, bem como você não deve ter muitas dificuldades com ele, porque basicamente é um dataset como o TTable. A única diferença é que ele trabalha com os registros na memória e não no disco. O método EmptyTable, como o nome diz, limpa a tabela e está presente em outros datasets do tipo table. E é por esta sua característica que os registros do seu RXMemoryData estão sendo "zerados". Abraços Ok, deu certo, agora intendi mais ou menos! -
Insert no DbGrid usando o RxMemoryData
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
robinhocne, vamos melhorar a identação do seu código e talvez você perceba porque isto ocorre: if ( not tblcheques.Active ) then tblcheques.Open else tblcheques.EmptyTable; with tblcheques do ... Se não sacou, observe o que ocorre no seu código quando a tabela tblcheques está ativa. ;) Abraços É que eu não sei quase nada sobre RxMemoryData e pesquisei sobre ele no google e não consegui achar nada por isso resolvi abrir esse tópico. -
Estou querendo que quando eu clico duas vezes na linha do dbgrid ele insire pelo rxmemorydata em outro para ficar acumulando, para salvar tudo de uma vez, ai estou usando esse codigo abaixo if ( not tblcheques.Active ) then tblcheques.Open else tblcheques.EmptyTable; with tblcheques do begin Insert; Fields[00].AsString := TxtCod.text; Fields[01].AsString := TxtNom.text; Fields[02].AsString := Cheque; Fields[03].AsCurrency := StrToFloat( txtVal.Text ); Fields[04].AsDateTime := Datado; Post; end; mas quando eu clico novamente para inserir mais um ele some com o que já tem gravado nele! alguém pode me ajudar???
-
Mudar cor da Fonte da linha selecionada do grid....
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
e o datachange eu coloquei como false! Consegui resolver com ajuda de uns amigos ficou assim> no type do form type THakGrid = class(TCustomGrid); no private: private FSelecionados : array of integer; function GetIndex(Value : Integer) : Integer; procedure SelecionaCheque; function TFrmCarteiraDeCheque.GetIndex(Value: Integer): Integer; var I : Integer; begin for I := 0 to High(FSelecionados) do begin if FSelecionados[I] = Value then //poderia fazer uma busca indexada pra agilizar //mas vai ficar pra proxima. begin Result := I; Exit; end; end; Result := -1; end; procedure TFrmCarteiraDeCheque.DbgCarCheDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if GetIndex(QryCarChe.RecNo) > -1 then DbgCarChe.Canvas.Brush.Color := clRed; DbgCarChe.DefaultDrawDataCell(Rect, Column.Field, State); END; procedure TFrmCarteiraDeCheque.SelecionaCheque; var I, I2 : Integer; begin I := GetIndex(QryCarChe.RecNo); if I < 0 then begin I := High(FSelecionados) + 1; SetLength(FSelecionados, I + 1); FSelecionados[I] := QryCarChe.RecNo; end else begin I2 := High(FSelecionados); if I2 > I then Move(FSelecionados[I+1], FSelecionados[I], I2-I); SetLength(FSelecionados, I2); end; THakGrid(DbgCarChe).InvalidateRow(THakGrid(DbgCarChe).Row); end; -
Mudar cor da Fonte da linha selecionada do grid....
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
Micheus, fiz tudo os passos que você me passou, e meu DataSouce está no form mesmo não está no DataModule, Mas ai quando do um duplo click até que ele seleciona a linha, mas quando eu clico no cheque de baixo para ele selecionar volta ao normal! no OnDblClick do DbGrid eu coloquei que o : e o datachange eu coloquei como false! -
Mudar cor da Fonte da linha selecionada do grid....
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
eu detesto quando isto acontece... :angry: Mas não é o seu caso. Parece mesmo é que você não entendeu direito o que eu tentei explicar. Preste atenção ao que você postou do seu código: if odd(DtsCarChe.DataSet.RecNo) then DbgCarChe.Canvas.Brush.Color:= clmenubar else DbgCarChe.Canvas.Brush.Color:= clCream; TDbGrid(Sender).Canvas.font.Color:= clBlack; if gdSelected in State then begin DbgCarChe.Canvas.Brush.Color := clSkyBlue; DbgCarChe.Canvas.Font.Style := DbgCarChe.Canvas.Font.Style + [fsBold]; if clic2 = TRUE then begin DbgCarChe.Canvas.Brush.Color := clRed; clic2 := FALSE; end; end; TDbGrid(Sender).DefaultDrawDataCell(Rect, TDbGrid(Sender).columns[datacol].field, State); Quantas vezes você acha que este evento deverá ocorrer? Inúmeras!!! Uma vez para cada coluna e linha que esteja visível no DBGrid - lembre-se que nos parâmetros estão inclusos ARow (linha) e ACol (coluna). ;) Então, quando vai ser desenhada a linha selecionada (e a atualização evidentemente começará pela 1ª coluna) você está mudando as informações conforme desejado - até aí tudo bem. Mas, veja o que você está fazendo com a variável de controle do duplo click (clic2) nesta condição... Será que ao ser executado o evento para a pintura da 2ª coluna, ele vai conseguir passar pelo if que muda o fundo para clRed?! Será que captou porque foi que eu disse "o negócio aperta é como saber em que momento esta variável deverá ser sinalizada como falsa"? Justamente porque não poderia estar onde você colocou!!!! Leia novamente meu post e veja onde você poderá fazer isto e caso seu DataSource esteja em um DataModule, não se preocupe - simplesmente adicione um novinho em folha no form onde está o DBGrid apenas para usar este recurso. É..., você terá dois DataSources ligados ao mesmo dataset - isto não é problema. Outra coisa: observei todas as linha estão destacadas em negrito? Ao menos é como parece na imagem. Você deve lembrar de retirar o negrito quando não for a condição que você está usando para por o negrito: ... if gdSelected in State then begin ... end else DbgCarChe.Canvas.Font.Style := DbgCarChe.Canvas.Font.Style - [fsBold]; Abraços Micheus, não estou conseguindo você poderia me ajudar mais ainda? -
Mudar cor da Fonte da linha selecionada do grid....
pergunta respondeu ao robinhocne de robinhocne em Delphi, Kylix
robinhocne, o procedimento passa por este método mesmo. A questão, é como saber que a linha a ser modificada a fonte é a linha em que foi dado o duplo click. Voce pode partir do princípio de que a linha do duplo click é a linha correntemente selecionada. Isto você pode verificar através se gdSelected está presente no parâmetro State: if gdSelected in State then Entretanto ainda assim, deverá utilizar algum meio (uma variável global, boolean) para saber quando foi dado o duplo click no DBGrid, sinalizando ela quando o evento OnDblClick ocorrer e daí você força um Repaint do DBGrid. Até aí deve estar fácil... O negócio aperta é como saber em que momento esta variável deverá ser sinalizada como falsa - o que deverá ocorrer quando a linha selecionada no DBGrid mudar (é o que penso). Supondo que seja mesmo esta a situação, acredito que você poderá utilizar o evento OnDataChange do componente DataSource ligado ao DBGrid. É testar para ver no que dá. OBS: Outra coisar, passe a utilizar o evento OnDrawColumnCell para a manipulação do visual do DBGrid. Se você olhar no help sobre OnDrawDataCell, você vai encontrar este comentário: Do not write an OnDrawDataCell event handler. OnDrawDataCell is obsolete and included for backward compatibility. Instead, write an OnDrawColumnCell event handler. traduzindo, caso já tenha visto e não entendido: Não escreva um manipulador de eventos OnDrawDataCell. OnDrawDataCell é obsoleto e incluído para compatibilidade. Ao invés disto, escreva um manipulador de eventos OnDrawColumnCell Bom esqueci umas informações necessarias, eu acho! Eu uso o delphi 7, com banco firebird, e a minha conexão eu faço usando um componente chamado Interbase Acess, que é o mesmo do interbase, conecto com o banco atraves de uma IBTable, IbTransaction e IbQuery. Para a vizulização desses dados no grid eu utilizo o IbQuery e uma DataSource, ai fiz dessa maneira: if odd(DtsCarChe.DataSet.RecNo) then DbgCarChe.Canvas.Brush.Color:= clmenubar else DbgCarChe.Canvas.Brush.Color:= clCream; TDbGrid(Sender).Canvas.font.Color:= clBlack; if gdSelected in State then begin DbgCarChe.Canvas.Brush.Color := clSkyBlue; DbgCarChe.Canvas.Font.Style := DbgCarChe.Canvas.Font.Style + [fsBold]; if clic2 = TRUE then begin DbgCarChe.Canvas.Brush.Color := clRed; clic2 := FALSE; end; end; TDbGrid(Sender).DefaultDrawDataCell(Rect, TDbGrid(Sender).columns[datacol].field, State); Por fim no DblClick: clic2 := TRUE; DbgCarChe.Repaint; Ai aparece em vermelho a linha selececionada mas só a primeira coluna e quando clico eu clico fora ele volta ao normal, pois é assim que eu quero, eu seleciono varios cheques da minha carteira de cheque e quando eu clico na linha do cheque para repassar ou depositar eu quero que essa linha fica com outra cor para que o cliente sabe qual cheques está sendo repassado. essa é uma imagem do que eu falei; http://www.4shared.com/file/57974691/64b85f7d/imagem.html