Jump to content
Fórum Script Brasil

edsouzza

Membros
  • Posts

    24
  • Joined

  • Last visited

About edsouzza

  • Birthday 08/17/1967

Contatos

Perfil

  • Gender
    Male
  • Location
    São Paulo

edsouzza's Achievements

0

Reputation

  1. Pessoal, tenho um jTable que traz os dados do banco de dados (firebird) onde tenho datas cadastradas, ocorre que resolvi o problema do usuário deixar uma data vazia cadastrando no lugar disso uma data default tipo 01.01.1899, ocorre que quando faço uma pesquisa essas datas são mostradas no jTable. Pergunta : Tem como não mostrar essas datas no jTable ou mostrar vazio ou até mesmo 00/00/0000?
  2. Pessoal o método abaixo faz a leitura de arquivo txt onde pega os campos separados por (;) e carrega o meu objeto (objServidor) para então gravar no banco de dados. Ocorre que o campo que recebe a datainiexercicio (01/05/2018) por exemplo não esta rodando. Usei um metodo que formata a string e converte em data pois no objeto ela é uma data do tipo java.sql.Date. O método é o formatarData que retorna uma data.sql.date que deixei mais abaixo para verificação de o porque não esta aceitando esta data. Testei os outros campos e esta tudo funcionando menos a data. O meu banco de dados é o Firebidr 2.1 e o campo data esta como Date. Segue exemplo de uma linha o txt MIQUEIAS DA SILVA NORE;6964443;1;56;1;6;2;03/10/2000;ATIVO;* Quem puder ajudar agradeço. private void ImportarTXT(){ //inicializando as variaveis dos campos a serem gravados int totalLinhas = 0; RetornarQdeLinhasDoTxt qdeLinhas = new RetornarQdeLinhasDoTxt(); //setando o caminho do arquivo TXT no edit do formulario apenas para mostrar o arquivo que esta sendo importado SelecionarArquivoTexto select = new SelecionarArquivoTexto(); caminhoTXT = select.ImportarTXT(); if(caminhoTXT != null) { //setando o caminho do arquivo TXT na variavel caminhoTXT para pegar os valores txtARQUIVO.setText(caminhoTXT); totalLinhas = qdeLinhas.retornaNumLinhasDoTxt(caminhoTXT); //JOptionPane.showMessageDialog(null, "Qde de linhas do arquivo...: "+String.valueOf(totalLinhas)); //criando uma variavel arquivo do tipo File e setando o caminho do arquivo TXT nela File arquivo = new File(caminhoTXT); try { FileReader ler = new FileReader(arquivo); BufferedReader lerBuf = new BufferedReader(ler); linha = lerBuf.readLine(); while(linha != null) { nome = linha.split(";")[0]; rf = linha.split(";")[1]; svinculo = linha.split(";")[2]; cargobase = linha.split(";")[3]; departamento = linha.split(";")[4]; unidade = linha.split(";")[5]; tiposervidor = linha.split(";")[6]; datainiexercicio = linha.split(";")[7]; status = linha.split(";")[8]; obs = linha.split(";")[9]; //setando os valores no objeto do modelo objServidor.setNome(nome); objServidor.setRf(rf); objServidor.setVinculo(Integer.parseInt(svinculo)); objServidor.setCargobase(Integer.parseInt(cargobase)); objServidor.setDepartamento(Integer.parseInt(departamento)); objServidor.setUnidade(Integer.parseInt(unidade)); objServidor.setTiposervidor(Integer.parseInt(tiposervidor)); ========================================================================== objServidor.setDtinicioexercicio(formatarData(datainiexercicio)); ========================================================================== objServidor.setStatus(status); objServidor.setObs(""); //gravando no banco de dados, antes verifica se o rf já esta cadastrado e não grava se isso acontecer if(umMetodo.duplicidadeDeCadastro("TBLSERVIDORES", "rf", rf)){ //JOptionPane.showMessageDialog(null,"O ServidorComCargo "+nome+" já esta cadastrado!"); contador = 0; }else{ if (ctrlServidor.salvarServidor(objServidor)){ contador = 1; } } //lendo a proxima linha linha = lerBuf.readLine(); } } catch (Exception e) { JOptionPane.showMessageDialog(null,"Erro ao tentar ler o arquivo!"); } if (contador > 0){ JOptionPane.showMessageDialog(null,"Os dados foram importados com sucesso!"); }else if (contador == 0){ JOptionPane.showMessageDialog(null,"Nenhum registro foi cadastrado com sucesso!","Atenção possíveis erros de leitura ou duplicidades!",2); } } contador = 0; } public Date formatarData(String data) throws Exception { if (data == null || data.equals("")) return null; Date date = null; try { DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); date = (Date)(java.util.Date)formatter.parse(data); } catch (ParseException e) { throw e; } return date; }
  3. Pessoal o método abaixo faz a leitura de arquivo txt onde pega os campos separados por (;) e carrega o meu objeto (objServidor) para então gravar no banco de dados. Ocorre que o campo que recebe a datainiexercicio (01/05/2018) por exemplo não esta rodando. Usei um metodo que formata a string e converte em data pois no objeto ela é uma data do tipo java.sql.Date. O método é o formatarData que retorna uma data.sql.date que deixei mais abaixo para verificação de o porque não esta aceitando esta data. Testei os outros campos e esta tudo funcionando menos a data. O meu banco de dados é o Firebidr 2.1 e o campo data esta como Date. Segue exemplo de uma linha o txt MIQUEIAS DA SILVA NORE;6964443;1;56;1;6;2;03/10/2000;ATIVO;* Quem puder ajudar agradeço. private void ImportarTXT(){ //inicializando as variaveis dos campos a serem gravados int totalLinhas = 0; RetornarQdeLinhasDoTxt qdeLinhas = new RetornarQdeLinhasDoTxt(); //setando o caminho do arquivo TXT no edit do formulario apenas para mostrar o arquivo que esta sendo importado SelecionarArquivoTexto select = new SelecionarArquivoTexto(); caminhoTXT = select.ImportarTXT(); if(caminhoTXT != null) { //setando o caminho do arquivo TXT na variavel caminhoTXT para pegar os valores txtARQUIVO.setText(caminhoTXT); totalLinhas = qdeLinhas.retornaNumLinhasDoTxt(caminhoTXT); //JOptionPane.showMessageDialog(null, "Qde de linhas do arquivo...: "+String.valueOf(totalLinhas)); //criando uma variavel arquivo do tipo File e setando o caminho do arquivo TXT nela File arquivo = new File(caminhoTXT); try { FileReader ler = new FileReader(arquivo); BufferedReader lerBuf = new BufferedReader(ler); linha = lerBuf.readLine(); while(linha != null) { nome = linha.split(";")[0]; rf = linha.split(";")[1]; svinculo = linha.split(";")[2]; cargobase = linha.split(";")[3]; departamento = linha.split(";")[4]; unidade = linha.split(";")[5]; tiposervidor = linha.split(";")[6]; datainiexercicio = linha.split(";")[7]; status = linha.split(";")[8]; obs = linha.split(";")[9]; //setando os valores no objeto do modelo objServidor.setNome(nome); objServidor.setRf(rf); objServidor.setVinculo(Integer.parseInt(svinculo)); objServidor.setCargobase(Integer.parseInt(cargobase)); objServidor.setDepartamento(Integer.parseInt(departamento)); objServidor.setUnidade(Integer.parseInt(unidade)); objServidor.setTiposervidor(Integer.parseInt(tiposervidor)); ========================================================================== objServidor.setDtinicioexercicio(umMetodo.formatarData(datainiexercicio)); ========================================================================== objServidor.setStatus(status); objServidor.setObs(""); //gravando no banco de dados, antes verifica se o rf já esta cadastrado e não grava se isso acontecer if(umMetodo.duplicidadeDeCadastro("TBLSERVIDORES", "rf", rf)){ //JOptionPane.showMessageDialog(null,"O ServidorComCargo "+nome+" já esta cadastrado!"); contador = 0; }else{ if (ctrlServidor.salvarServidor(objServidor)){ contador = 1; } } //lendo a proxima linha linha = lerBuf.readLine(); } } catch (Exception e) { JOptionPane.showMessageDialog(null,"Erro ao tentar ler o arquivo!"); } if (contador > 0){ JOptionPane.showMessageDialog(null,"Os dados foram importados com sucesso!"); }else if (contador == 0){ JOptionPane.showMessageDialog(null,"Nenhum registro foi cadastrado com sucesso!","Atenção possíveis erros de leitura ou duplicidades!",2); } } contador = 0; } public Date formatarData(String data) throws Exception { if (data == null || data.equals("")) return null; Date date = null; try { DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); date = (Date)(java.util.Date)formatter.parse(data); } catch (ParseException e) { throw e; } return date; }
  4. Pessoal, a ideia é que quando o usuário escolher um campo identificado no checkbox o sistema deverá inserir o texto do checkbox no ArrayList. Mas esta pegando apenas o ultimo nome do ultimo checkbox. public void listarOpcoesDeCampos() { //para manipular o arrayList de campos voce dever criar outro arrayList para recebe-lo e assim com lst.get(0) chamar o campo desejado lstCamposRetornados = retornarNomesCampos(); //retornando o codigo -> lstCamposRetornados.get(0) -> este procedimento me da acesso a qdeColunas tb //definindo o posicionamento dos checksbox dos campos int pos_coluna = 50, pos_linha = 40, tam_linha = 250, alt_linha = 30; for (int i = 0; i < qdeColunas; i++) { //criando e mostrando um checkbox com o nome da coluna da tabela chk = new JCheckBox(); chk.setBounds(pos_coluna, pos_linha, tam_linha, alt_linha); c.add(chk); c.repaint(); chk.setText(retornarNomesCampos().get(i)); //setando o nome da coluna no checbox //registrando o objeto que sofrerá ação chk.addActionListener(this); //se posicionando para criacao do proximo checkbox pos_coluna = 50; pos_linha = pos_linha + 20; } } @Override public void actionPerformed(ActionEvent e) { lstListaCampos.add(chk.getText()); } Fiz um laço for para visualizar o que a lista contem e percebi que esta pegando somente o último ítem saída atual: campo OBS campo OBS A saida desejada é: campo CODIGO campo OBS Ou seja no ArrayList deverá conter apenas os ítens(checkbox) selecionados.
  5. Valeu Illidan era o que procurava também. parabéns.
  6. ===> QuickReport 3.0.9 <=== Acho que é por isso que não instalar.
  7. Obrigado Jhonas pela atenção e é isso mesmo de que eu preciso. Porém parece-me que este componente não roda no Delphi 7. Tentei instalar mas deu falta de um arquivo QRANGLBL.INC e não instalou. Mais alguma dica?
  8. Pessoal, tenho a seguinte dúvida: Se é possível inverter(de cabeça para baixo) os campos de um banco de dados(Mysql) no Quick Report. O fato é que tenho uma carteirinha para imprimir que será dobrada e a parte que representará o verso deverá ficar invertida no momento da impressão, quando for dobrada o usuário terá o texto corretamente para leitura.
  9. Pessoal RESOLVIDO achei o erro clássico, estava usando apenas um clientdataset para fazer duas coisas distintas, cadastrar e pesquisar a solução foi apenas criar um clientdataset para as consultas e Zefiniii.
  10. Tenho um procedimento que incrementa um NUM_AGENDAMENTO assim: With DM_Pesq.qry_Cod do begin Close; SQL.Clear; SQL.Add('select max(num_agendamento) from controle_agendamento'); Open; if not IsEmpty then begin proxNum := DM_Pesq.qry_Cod.Fields[0].AsInteger + 1; end; end; with dm_DadosSegundo.cds_ControleAgendamento do begin Append; FieldByName('num_agendamento').AsInteger := proxnum; ApplyUpdates(0); end; ... Esse código encontra-se em uma aba de um PagControl onde ele grava o registro e incrementa o campo. Até aqui tudo bem ao abrir o formulário tudo grava sem problemas pois já abre na aba de agendamento, ocorre que se eu fizer 10, 20, 30 agendamentos não acontece nenhum problema, mas se eu clicar em alguma outra aba que são consultas e voltar ao agendamento e tentar agendar ocorre o seguinte erro: 'O campo NUM_AGENDAMENTO necessita de um valor'. O estranho é que só ocorre quando eu volto de uma outra aba. Alguém pode me ajudar nisso? Pessoal, descobri que as outras abas de consulta é que contém este campo e que ao sair da consulta e voltar para o cadastro estou utilizando o mesmo cds_historico a consulta é esta: _Sql := 'select controle_agendamento.num_agendamento,historico_agendamento.id_historicoagendamento, historico_agendamento.data_agendada, '+ 'historico_agendamento.hora_agendada, historico_agendamento.valor_unitario, historico_agendamento.valor_total,'+ 'historico_agendamento.codigomovimento, historico_agendamento.datafechamento, clientes.cli_nome, '+ 'funcionarios.func_nome, servicos.serv_nome, historico_agendamento.id_cliente, historico_agendamento.id_servico, '+ 'historico_agendamento.id_funcionario, historico_agendamento.id_formapagto, historico_agendamento.id_agendamento, '+ 'historico_agendamento.quantidade, historico_agendamento.datacad, historico_agendamento.mesano FROM '+ 'historico_agendamento inner join clientes on (historico_agendamento.id_cliente = clientes.cli_id) '+ 'inner join controle_agendamento on (historico_agendamento.id_agendamento = controle_agendamento.num_agendamento) '+ 'inner join servicos on (historico_agendamento.id_servico = servicos.serv_id) inner join funcionarios '+ 'on (historico_agendamento.id_funcionario = funcionarios.func_id) ORDER BY controle_agendamento.num_agendamento'; A PROCEDURE DE GRAVAÇÃO É ESTA: procedure T_frmAgenda.btnGravarAgendamentoClick(Sender: TObject); var mes_ano : string; DataDoDia : TDate; begin with dm_DadosSegundo.cds_AbreAgendamento do begin First; while not Eof do begin With DM_Pesq.qry_Cod do begin Close; SQL.Clear; SQL.Add('select max(id_HistoricoAgendamento) from Historico_Agendamento'); Open; if not IsEmpty then begin proxNum := DM_Pesq.qry_Cod.Fields[0].AsInteger + 1; end; end; //ENVIADO O PRODUTO PARA A TABELA DE HISTÓRICO with dm_DadosSegundo.cds_HistoricoAgendamento do begin Append; FieldByName('id_HistoricoAgendamento').AsInteger := proxNum; FieldByName('id_cliente').AsInteger := dm_DadosSegundo.cds_ControleAgendamento.fieldbyname('id_cliente').AsInteger; FieldByName('id_funcionario').AsInteger := dm_DadosSegundo.cds_ControleAgendamento.fieldbyname('id_funcionario').AsInteger; FieldByName('id_servico').AsInteger := dm_DadosSegundo.cds_AbreAgendamento.fieldbyname('id_servico').AsInteger; FieldByName('id_formapagto').AsInteger := dm_DadosSegundo.cds_AbreAgendamento.fieldbyname('id_formapagto').AsInteger; FieldByName('id_agendamento').AsInteger := dm_DadosSegundo.cds_ControleAgendamento.fieldbyname('num_agendamento').AsInteger; FieldByName('Data_Agendada').AsDateTime := dm_DadosSegundo.cds_AbreAgendamento.fieldbyname('Data_Agendada').AsDateTime; FieldByName('Hora_Agendada').AsString := dm_DadosSegundo.cds_AbreAgendamento.fieldbyname('Hora_Agendada').AsString; FieldByName('Valor_unitario').AsFloat := dm_DadosSegundo.cds_AbreAgendamento.fieldbyname('valor_total').AsFloat; FieldByName('quantidade').AsInteger := dm_DadosSegundo.cds_AbreAgendamento.fieldbyname('quantidade').AsInteger; FieldByName('Valor_Total').AsFloat := dm_DadosSegundo.cds_AbreAgendamento.fieldbyname('valor_total').AsFloat * dm_DadosSegundo.cds_AbreAgendamento.fieldbyname('quantidade').AsInteger; FieldByName('codigomovimento').AsString := 'AB'; FieldByName('datacad').AsDateTime := Date; DataDoDia := FieldByName('datacad').AsDateTime; mes_ano := IntToStr(MonthOf(DataDoDia)) + '/' + IntToStr(YearOf(DataDoDia)); FieldByName('MesAno').AsString := mes_ano; ApplyUpdates(0); end; Next; end; dm_DadosSegundo.cds_ControleAgendamento.Edit; dm_DadosSegundo.cds_ControleAgendamento.FieldByName('valor_total').AsFloat:= StrToFloat(db_TotalGeral.Text); dm_DadosSegundo.cds_ControleAgendamento.ApplyUpdates(0); permitido := False; LimparTabelaAbreAgendamentos; Abrir_FecharTabelas; edt_QuantidadeDeServicos.Clear; edt_PrecoServico.Clear; edt_Pesquisa.Clear; edt_PrecoDesconto.Clear; edt_PrecoLiquido.Clear; edt_DiaAgendado.Clear; edt_HoraAgendada.Clear; pnl_ItensAgendamento.Enabled := False; pnl_DadosAgendamento.Enabled := True; dbCLI_NOME.KeyValue := -1; dbFUNC_NOME.KeyValue := -1; lbl32.Caption:= 'AGENDAMENTO: '+IntToStr(dm_DadosSegundo.cds_ControleAgendamento.RecordCount + 1); pnl_ItensAgendamento.Visible:= False; btnGravarAgendamento.Enabled:= False; btnCancelarGravacaoDoAgendamento.Enabled:= False; end; end; Ou seja quando vou gravar o historico a sql utilizada esta sendo a que vem da consulta de outra aba tentei isso: with dm_DadosSegundo.cds_HistoricoAgendamento do begin Close; CommandText:= ('Select * from Historico_Agendamento'); Open; end; mas como tenho TFieds que usam a consulta o sistema me pede esses campos. Resumindo: Preciso voltar para aba de cadastro fazendo com que o sistema não use a consulta para cadastrar, ao invés de me pedir os campos da tabela historico o cadastro esta me pedindo valores para os campos da consulta sendo que alguns nem fazem parte da tabela historico pois usei o inner join para a consulta Desde já agradecido.
  11. na possibilidade de algum destes campos ser nulo no banco, é mais prudente utilizar o método AsFloat para forçar o tipo retornado e em caso de nulo, será retornado 0: dmBDPregao.Percentual.AsFloat:= ((dmBDPregao.fltfldPropostaValPropostoFornecedor.AsFloat - Valor_Minimo) / Valor_Minimo)*100; Abraços Ok. Micheus funfou legal. Grato a todos.
  12. Pessoal tem como Desabilitar o ítem de um ComboBox? Ou seja o usuário escolhe o ítem e este ítem fica aparecendo mas não podendo ser clicado.
  13. Perfeito Jhonas fiz assim para adequar á minha necessidade e deu tudo certo. Muitissimo obrigado. procedure TfrmLances.ContadorDeClicks; begin num := num + 1; if num < 4 then begin rodada := n; end else begin num := 1; n := n + 1; rodada := n; end; end;
  14. Pessoal, preciso do seguinte: Ao clicar em um botao(Gravar) na 1ª vez => Será gravado em um campo chamado Obs '1ª Rodada' 2ª vez => '1ª Rodada' 3ª vez => '1ª Rodada' 4ª vez => '2ª Rodada' 5ª vez => '2ª Rodada' 6ª vez => '2ª Rodada' 7ª vez => '3ª Rodada' Resumindo cada 3 clicks determinará uma Rodada. Criei uma variavel chamada Rodada, mas os loops não deram certo. Alguém tem alguma dica?
  15. Pessoal, consegui achar o problema e resolvi assim: if Valor_Minimo <> 0 then begin // Inicialmente não posso dividir nenhum valor por zero dmBDPregao.Percentual.Value:= ((dmBDPregao.fltfldPropostaValPropostoFornecedor.Value - Valor_Minimo) / valor_minimo)*100; end; Agora eu só preciso formatar o valor dmBDPregao.Percentual que esta retornando no Grid o valor por ex: 8,333333333333333333 para 8,33. Resolvido pessoal. Usei a Propriedade DisplayFormat no meu campo Percentual ( Campo Calculado) . Entrei com esse valor 0.00 e deu tudo certo. Ufa... Finalmente. Obrigado a todos que me ajudaram.
×
×
  • Create New...