Ir para conteúdo
Fórum Script Brasil

Jhonas

Monitores
  • Total de itens

    9.657
  • Registro em

Tudo que Jhonas postou

  1. Outra idéia é assim que o usuário clicar com o mouse no registro escolhido, voce pode jogar esse registro para outro dbgrid onde terá apenas os registros que ele selecionou abraço
  2. Então na hora de montar o QuickReport use uma banda QRGroup para a tabela SaidaPai e na banda de Detail use a tabela saidaproduto Na propriedade Expresion do QRGroup voce coloca o nome do campo que é distinto para cada registro ... dessa maneira os registros da tabela SaidaPai ficarão nesta banda e na banda Detail ficarão os produtos referentes a esse registro voce encontrará no forum outros assuntos relacionados http://scriptbrasil.com.br/forum/index.php...ighlite=QRGroup abraço
  3. Erro de conversão de tipos ... quando a mensagem é ... "00:01:22" não é um valor valido de ponto flutuante significa que voce não pode somar por exemplo 5,60 + 00:01:22 entendeu ? o valor 00:01:22 deveria ser convertido para um valor real exemplo : converter o tempo em segundos e depois executar a soma abraço
  4. Quando for inserir um novo registro faça o ponteiro ir para o ultimo registro da tabela dmdados.tblFerramentas.Last; dmdados.tblFerramentas.Append; abraço
  5. Dá pra ser mais claro ? não dá pra advinhar o que voce esta querendo abraço
  6. Se a tabela estiver fechada, continuara dando este erro cadastro de obras e os materiais que são lançados nessa obra precisam ficar em ordem de data São 2 tabelas ? como estão relacionadas ?
  7. 2 possibilidades 1 - usar comandos da propria impressora para resetar a posição do papel na impressora 2 - configurar o tamanho do papel que voce definiu no seu report OBS: é tambem necessario colocar este comando no evento OnBeforePrint do QuickReport uses QRPrntr, Printers; procedure TQRecibo.QuickRepBeforePrint(Sender: TCustomQuickRep; var PrintReport: Boolean); begin with TQRPrinter.Create do begin QRecibo.PrinterSettings.PaperSize := Custom; // nome do novo papel que foi definido PrinterIndex := QRecibo.PrinterSettings.PrinterIndex; QRecibo.Page.PaperSize := PaperSize; free; end; end; abraço
  8. Dmdados.tblsaidaproduto.ClearFields; Dmdados.tblsaidaproduto.Edit; //ou insert Dmdados.tblsaidaproduto.indexname:='saida_produto_data'; Dmdados.tblsaidaproduto.IndexDefs.Update; Eu faria dessa maneira ... acho mais facil abraço
  9. faltou completar o comando .. é esse mesmo mas se não funcionar tente do outro jeito abraço
  10. ainda tenho o problema de quando eu desço pela barra vertical o dbgrid vem uma linha me acompanhando eu ano quero essa linha me acompanhando ou que pelo menos não fique selecionada Isso faz parte do componente ... o que voce pode fazer talvez seria deixar a seleção com uma cor mais clara ou somente com uma seleção de borda ( linha fina em volta da celula ) exemplo: procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin If odd(CDS_Cadproduto.RecNo) then begin DBGrid1.Canvas.Font.Color:= clBlack; DBGrid1.Canvas.Brush.Color:= cl3DLight; end else begin DBGrid1.Canvas.Font.Color:= clBlack; DBGrid1.Canvas.Brush.Color:= clWhite; end; if (gdSelected in state) then DBGrid1.Canvas.Font.Color:= clred else DBGrid1.Canvas.Font.Color:= clBlack; DBGrid1.Canvas.FillRect(Rect); DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end; abraço
  11. Tente assim Dmdados.tblsaidaproduto.Clear; Dmdados.tblsaidaproduto.indexname:='saida_produto_data'; Dmdados.tblsaidaproduto.IndexDefs.Update; Se não funcionar, use relacionamento entre tabelas e filtre os registros na SQL abraço
  12. Socket Error #10061 Connection refused Conexão Recusada... um ou mais parametros de configuração estão incorretos exemplo: procedure TForm1.Button1Click(Sender: TObject); begin //Configuração do IdMessage (dados da mensagem) IdMessage1.From.Address := 'fulano@bol.com.br'; //e-mail do remetente IdMessage1.Recipients.EMailAddresses := 'sicrano@bol.com.br';//e-mail do destinatário IdMessage1.Subject := 'Assunto do e-mail'; //Assunto IdMessage1.Body.Add('Mensagem do e-mail'); //Corpo da mensagem //Configuração do IdSMTP (dados do servidor de email) IdSMTP1.BoundIP := '200.70.160.140'; //Endereço IP da sua Maquina no momento IdSMTP1.Host := 'smtps.bol.com.br'; //Host SMTP do bol IdSMTP1.Port := 25; //Port do bol IdSMTP1.Username := 'fulano@bol.com.br'; //Login do usuário IdSMTP1.Password := 'senha'; //Senha do usuário IdSMTP1.AuthenticationType := atLogin; //tipo da autenticação IdSMTP1.Connect; //Estabelece a conexão IdSMTP1.Authenticate; //Faz a autenticação try IdSMTP1.Send(IdMessage1); //Envia a mensagem except showmessage('ERRO'); //Mensagem de erro end; end; OBS: Uso este para enviar email pelo bol .. funciona sem problemas abraço
  13. 'select '+ 'left(inicio, 10) as data, '+ ' right(''0000''+cstr( (24*int(sum(Tempo_de_Ligação))) + datepart(''h'', cdate(sum(Tempo_de_Ligação)))), 4)+'':''+ '+ 'right(cdate(sum(Tempo_de_Ligação)), 5) as horastotais '+ 'from '+ 'chamadas '+ ' group by '+ ' left(inicio, 10) '; voce tem que refazer essa Select pois ela está errada em sua estrutura ... veja se consegue ( pense ) abraço
  14. Verifique primeiramente se existe a conexão com a internet ( pode ocorrer esse erro se não houver conexão ) caso exista essa conexão, verifique o host do componente IdSMTP. Errado : smtp.bol.com.br // gera o erro Erro Socket # 11004 Correto :smtps.bol.com.br // o email foi enviado com sucesso. abraço
  15. primeiro voce deve deixar como comentario as rotinas que voce usa para fazer algum tratamento interno em um Dataset ... e veja o que acontece... se o erro parar voce terá achado onde está o problema abraço
  16. Não ... pode ficar tranquilo. abraço
  17. Se puder prefira a ASUS ... voce não terá dores de cabeça depois e não vai se arrepender de ter escolhido esta placa abraço
  18. Performaced DDR Timming Enabled Esta é uma mensagem da BIOS indicando que está habilitado o Cronometro de performance da DDR isso não é erro ... se não quiser que fique aparecendo ... entre na BIOS e desabilite esta opção abraço
  19. Minha placa mãe torrou e eu preciso comprar outra urgente. Fiz uma busca em algumas lojas e descobri que nem toda plca mãe aceita amd ou intell. Quais placa mães aceita amd e/ou intel? Existe asus que pega amd? Duas otimas placas Asus que aceita processador AMD http://www.precomania.com/search_getprod.p...roduct/sv=title http://www.precomania.com/search_getprod.p...roduct/sv=title abraço
  20. Isso é erro de violação de endereço de memória.... durante a execução uma de suas rotinas, ele está tentando atribuir um valor a um endereço de memória ocupado por outro valor. verifique as rotinas de operação interna dentro do Dataset abraço
  21. pelo que entendi, voce esta trabalhando com datas e horas ...certo ? a minha sugestão é para voce criar primeiro uma select para selecionar o perido de datas que voce quer exe: 01/01/2009 a 01/02/2009 .... coms os registros selecionados voce pode calcular o somatório das horas se não for isso ... poste como esta os dados em sua tabela e como quer trabalhar com os registros abraço
  22. Já imaginava que voce não ia conseguir .... vou te dar uma colher de chá ... não uma de sopa ...não melhor uma de pegar feijão ..rs unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) ListBox1: TListBox; Button2: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; datas: array of string; //vetor de string implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); var i: Integer; valor, s: string; indice: Integer; ok: Boolean; begin //aloca espaço para os itens no vetor SetLength(datas,ListBox1.Items.Count); // retira parte da string e converte para data for i := 0 to ListBox1.Items.Count -1 do begin s := copy(ListBox1.Items.Strings[i],7,8); insert('/',s,3); insert('/',s,6); datas[i] := 'backup'+(formatdatetime('dd/mm/yyyy',strtodate(s)))+'.zip'; end; // faz a ordenação repeat ok := False; indice := 0; repeat if CompareStr(datas[indice], datas[indice + 1]) = 2 then begin valor := datas[indice]; datas[indice] := datas[indice + 1]; datas[indice + 1] := valor; ok := True; end; Inc(indice); until(indice > High(datas)); until(ok = False); // fim ordenação // exibe o array ordenado no proprio listbox ListBox1.Clear; for i := Low(datas) to High(datas) do begin delete(datas[i],9,1); delete(datas[i],11,1); ListBox1.Items.Append(datas[i]); end; end; end. OBS: Procure sempre usar a cabeça para tentar descobrir como fazer ( leia tudo o que puder a respeito e pratique sempre no computador ) abraço
  23. Na Query a propriedade RequestLive deverá estar como true procedure TF_ImportaMorador.DBGrid1CellClick(Column: TColumn); begin DMConsultas.Q_ImportaMorador.Active:=false; DMConsultas.Q_ImportaMorador.Active:=true; if Column.ID = 0 then begin if DMConsultas.Q_ImportaMoradorarquivo.asstring = 'X' then begin DMConsultas.Q_ImportaMorador.Edit; DMConsultas.Q_ImportaMoradorarquivo.asstring := ''; DMConsultas.Q_ImportaMorador.post; DMConsultas.Q_ImportaMorador.ApplyUpdates; end else begin DMConsultas.Q_ImportaMorador.Edit; DMConsultas.Q_ImportaMoradorarquivo.asstring := 'X'; DMConsultas.Q_ImportaMorador.post; DMConsultas.Q_ImportaMorador.ApplyUpdates; end; end; end. Verifique ... porque fiz um teste aqui e funcionou corretamente abraço
  24. nsouza ... veja um exemplo mais simples unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Mask; type TForm1 = class(TForm) Button1: TButton; MaskEdit1: TMaskEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} Function ValidarCEP(const CEP: string): string; var I: integer; begin Result := ''; for I := 1 to Length(CEP) do if CEP[I] in ['0'..'9'] then Result := Result + CEP[I]; if Length(Result) <> 8 then begin //ShowMessage('CEP Inválido'); //Form1.MaskEdit1.SetFocus; end else begin Result := Copy(Result, 1, 2) + '.' + Copy(Result, 3, 3) + '-' + Copy(Result, 6, 3); ShowMessage('CEP Válido'); end; end; function FormataCEP(const CEP: string): string; var I: integer; begin Result := ''; for I := 1 to Length(CEP) do if CEP[I] in ['0'..'9'] then Result := Result + CEP[I]; if Length(Result) <> 8 then begin ShowMessage('CEP Inválido'); Form1.MaskEdit1.SetFocus; //raise Exception.Create('CEP inválido.') end else Result := Copy(Result, 1, 2) + '.' + Copy(Result, 3, 3) + '-' + Copy(Result, 6, 3); end; procedure TForm1.Button1Click(Sender: TObject); begin MaskEdit1.Text := FormataCEP(MaskEdit1.Text); ValidarCEP(MaskEdit1.Text); end; end. Se voce digitar no MaskEdit1 menos de 8 digitos ou mais de 8 .. aparecerá a mensagem de CEP Inválido e o cursor voltará ao MaskEdit1 para digitar novamente abraço
  25. obs.: este arquivo TXT não possui tabulação. Se o arquivo Txt não tiver uma tabulação, fica muito mais dificil copiar dados do arquivo TXT para uma tabela poste um exemplo desse arquivo
×
×
  • Criar Novo...