EroSenin 0 Denunciar post Postado Setembro 16, 2014 Boa tarde estou fazendo um cadastro simples de ponto somente para adquirir conhecimento. O que eu gostaria é que dependo do horário o sistema gravasse no banco e desse uma mensagem ex: Bom dia São 8:00. Seu Ponto foi registrado com sucesso. Bom Almoço 12:00 Seu Ponto foi registrado com sucesso. Boa Tarde 13:30. Seu Ponto foi registrado com sucesso. Bom Descanso. Seu Ponto foi registrado com sucesso. Estou usando este código e está cadastrando corretamente por enquanto. Não estou conseguindo finalizar esta parte, se alguém puder ajudar agradeço. Obs: Delphi + Banco Access + ADO // Se Login estiver ok // Cadastra Ponto no Banco with dm.qryPonto do begin Close; SQL.Clear; SQL.Text := 'INSERT INTO ponto (codigofun_pon, data_pon, incluidoem_pon, responsavel_pon) VALUES (:codigofun_pon, :data_pon, :incluidoem_pon, :responsavel_pon)'; Parameters.ParamValues['codigofun_pon'] := dm.qryLogin.FieldByName('codigo_fun').AsInteger; Parameters.ParamValues['data_pon'] := dataAtual; Parameters.ParamValues['incluidoem_pon'] := dataAtual + ' ' + horaAtual; Parameters.ParamValues['responsavel_pon'] := dm.qryLogin.FieldByName('login_fun').AsString; ExecSQL; end; Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Setembro 16, 2014 Se entendi correto, você quer substituir suas variáveis dataAtual e horaAtual pela data corrente e hora corrente certo? Você pode usar os comandos date, now ou time para isso... dê uma olhada neste link: http://www.delphibasics.co.uk/RTL.asp?Name=Date Compartilhar este post Link para o post Compartilhar em outros sites
EroSenin 0 Denunciar post Postado Setembro 16, 2014 Opa Chrnos não é isso. Os três campos acima estão sendo cadastrados corretamente. Dá uma olhada para melhor entendimento, preciso cadastrar em cada campo de acordo com o horário em que o usuário entra no Sistema. Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Setembro 17, 2014 Acho que entendi... as mensagens seriam estas abaixo? Bom dia São 8:00. Seu Ponto foi registrado com sucesso. Bom Almoço 12:00 Seu Ponto foi registrado com sucesso. Boa Tarde 13:30. Seu Ponto foi registrado com sucesso. Bom Descanso. Seu Ponto foi registrado com sucesso. A questão é: esta mensagem será gravada no banco ou só exibida para o usuário na tela/impressa? Na imagem que postou isso não está claro... agora, supondo que fosse para gerar um showmessage por exemplo, bastaria usar um controle com if neste caso. procedure TForm1.Button1Click(Sender: TObject); var Hora : TDateTime; begin //Atribui a hora atual a variável auxiliar de controle Hora := Time; //Testa o range do horário pra definir a mensagem if (Hora >= StrToTime('00:00:00')) and (Hora <= StrToTime('11:59:59')) then Showmessage('Bom dia. São ' + TimeToStr(Hora) + '. Seu Ponto foi registrado com sucesso!') else if (Hora >= StrToTime('12:00:00')) and (Hora <= StrToTime('13:29:59')) then Showmessage('Bom almoço. São ' + TimeToStr(Hora) + '. Seu Ponto foi registrado com sucesso!') else if (Hora >= StrToTime('13:30:00')) and (Hora <= StrToTime('18:00:00')) then Showmessage('Boa tarde. São ' + TimeToStr(Hora) + '. Seu Ponto foi registrado com sucesso!') else Showmessage('Bom descanso. São ' + TimeToStr(Hora) + '. Seu Ponto foi registrado com sucesso!'); end; Se for gravar a mensagem no banco, o if acima teria que ser usado no ponto onde irá passar o valor do parâmetro... ou poderia por a mensagem numa variável auxiliar, montar ela antes de inserir e depois apenas passar ela ao parâmetro na gravação, ai você escolhe. Compartilhar este post Link para o post Compartilhar em outros sites
EroSenin 0 Denunciar post Postado Setembro 17, 2014 Bom dia Chrnos estas instruções que você passou eu havia pensado nisso também mas, ia implementar depois de resolver a questão que não estou conseguindo. Ps. Estou precisando é que dependendo do horário como você passou para as mensagens o Sistema grave no seu campo correspondente. Se for das 8:00 as 11:59 grave no campo entrada1 e assim por diante. Abaixo segue código que estou usando no momento junto com sua dica. procedure TfrmPontoMarca.btnOkClick(Sender: TObject); var dataAtual, horaAtual, strSqlPonto, strMensagem : string; Hora : TDateTime; begin dataAtual := DateToStr(Date); horaAtual := TimeToStr(Time); //Atribui a hora atual a variável auxiliar de controle Hora := Time; // Efetua a consulta para ver se usuário e senha existem dm.qryPonto.Open; strSqlPonto:= 'SELECT * FROM funcionarios WHERE login_fun = ' + #39 + edtUsuario.Text + #39; strSqlPonto:= strSqlPonto + ' AND senha_fun = ' + #39 + edtSenha.Text + #39; strSqlPonto:= strSqlPonto + ' AND status_fun = ' + #39 + 'T' + #39; dm.qryPonto.Close; dm.qryPonto.SQL.Clear; dm.qryPonto.SQL.Add(strSqlPonto); dm.qryPonto.Open; // Se Login estiver ok // Cadastra Ponto no Banco if not dm.qryPonto.IsEmpty then begin Close; with dm.qryPonto do begin Close; SQL.Clear; SQL.Text := 'INSERT INTO ponto (codigofun_pon, data_pon, incluidoem_pon, alteradoem_pon, responsavel_pon)' + ' VALUES (:codigofun_pon, :data_pon, :incluidoem_pon, :alteradoem_pon, :responsavel_pon)'; Parameters.ParamValues['codigofun_pon'] := dm.qryLogin.FieldByName('codigo_fun').AsInteger; Parameters.ParamValues['data_pon'] := dataAtual; Parameters.ParamValues['incluidoem_pon'] := dataAtual + ' ' + horaAtual; Parameters.ParamValues['responsavel_pon'] := dataAtual + ' ' + horaAtual; Parameters.ParamValues['responsavel_pon'] := dm.qryLogin.FieldByName('login_fun').AsString; ExecSQL; frmPontoMarca.Close; // Fecha o frmPontoMarca //ShowMessage('Ponto Registrado com Sucesso!'); //Testa o range do horário pra definir a mensagem if (Hora >= StrToTime('00:00:00')) and (Hora <= StrToTime('11:59:59')) then Showmessage('Bom dia. São ' + TimeToStr(Hora) + '. Seu Ponto foi registrado com sucesso!') else if (Hora >= StrToTime('12:00:00')) and (Hora <= StrToTime('13:29:59')) then Showmessage('Bom almoço. São ' + TimeToStr(Hora) + '. Seu Ponto foi registrado com sucesso!') else if (Hora >= StrToTime('13:30:00')) and (Hora <= StrToTime('18:00:00')) then Showmessage('Boa tarde. São ' + TimeToStr(Hora) + '. Seu Ponto foi registrado com sucesso!') else Showmessage('Bom descanso. São ' + TimeToStr(Hora) + '. Seu Ponto foi registrado com sucesso!'); end; end else // Se o usuário estiver bloqueado para uso ou não existir ShowMessage('Você não tem acesso ao Ponto!'); edtUsuario.SetFocus; end; Deixa ver se entendi, a logica seria essa? if (Hora >= StrToTime('00:00:00')) and (Hora <= StrToTime('11:59:59')) then Parameters.ParamValues['entrada1_pon'] := Hora; if (Hora >= StrToTime('12:00:00')) and (Hora <= StrToTime('13:29:59')) then Parameters.ParamValues['entrada1_pon'] := Hora; Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Setembro 17, 2014 Ah, agora está um pouco mais claro... A questão aqui não é dar uma mensagem, mas determinar pelo horário o campo que será gravado e se a operação é um insert ou update, a menos que você esteja pensando em ter 4 entradas por dia pra cada funcionário... poderia dar um detalhamento melhor de como pretende controlar isto? Se será um registro com 4 marcações de ponto por dia ou se irá fazer para um dia 4 ou mais inserts (um pra cada marcação de ponto)? Compartilhar este post Link para o post Compartilhar em outros sites
EroSenin 0 Denunciar post Postado Setembro 17, 2014 Opa olha eu denovo. São 4 marcações por dia para cada usuário. Está assim até o momento. procedure TfrmPontoMarca.btnOkClick(Sender: TObject); var dataAtual, horaAtual, strSqlPonto, strMensagem: string; usuarioLogado: integer; Hora : TDateTime; begin dataAtual := DateToStr(Date); horaAtual := TimeToStr(Time); //Atribui a hora atual a variável auxiliar de controle Hora := Time; // Efetua a consulta para ver se usuário e senha existem dm.qryPonto.Open; strSqlPonto:= 'SELECT * FROM funcionarios WHERE login_fun = ' + #39 + edtUsuario.Text + #39; strSqlPonto:= strSqlPonto + ' AND senha_fun = ' + #39 + edtSenha.Text + #39; strSqlPonto:= strSqlPonto + ' AND status_fun = ' + #39 + 'T' + #39; dm.qryPonto.Close; dm.qryPonto.SQL.Clear; dm.qryPonto.SQL.Add(strSqlPonto); dm.qryPonto.Open; usuarioLogado:= dm.qryPonto.FieldByName('codigo_fun').AsInteger; // Se Login estiver ok // Cadastra Ponto no Banco if not dm.qryPonto.IsEmpty then begin Close; with dm.qryPonto do begin Close; SQL.Clear; SQL.Text := 'INSERT INTO ponto (codigofun_pon, data_pon, entrada1_pon, saida1_pon, entrada2_pon, saida2_pon, incluidoem_pon, alteradoem_pon, responsavel_pon)' + ' VALUES (:codigofun_pon, :data_pon, :entrada1_pon, :saida1_pon, :entrada2_pon, :saida2_pon, :incluidoem_pon, :alteradoem_pon, :responsavel_pon)'; Parameters.ParamValues['codigofun_pon'] := usuarioLogado; //dm.qryPonto.FieldByName('codigo_fun').AsInteger; Parameters.ParamValues['data_pon'] := dataAtual; if (Hora >= StrToTime('00:00:00')) and (Hora <= StrToTime('11:59:59')) then Parameters.ParamValues['entrada1_pon'] := Hora; if (Hora >= StrToTime('12:00:00')) and (Hora <= StrToTime('13:29:59')) then Parameters.ParamValues['saida1_pon'] := Hora; if (Hora >= StrToTime('13:30:00')) and (Hora <= StrToTime('17:59:59')) then Parameters.ParamValues['entrada2_pon'] := Hora; if (Hora >= StrToTime('18:00:00')) then Parameters.ParamValues['saida2_pon'] := Hora; Parameters.ParamValues['incluidoem_pon'] := dataAtual + ' ' + horaAtual; Parameters.ParamValues['alteradoem_pon'] := dataAtual + ' ' + horaAtual; Parameters.ParamValues['responsavel_pon'] := dm.qryLogin.FieldByName('login_fun').AsString; ExecSQL; frmPontoMarca.Close; // Fecha o frmPontoMarca //ShowMessage('Ponto Registrado com Sucesso!'); //Testa o range do horário pra definir a mensagem if (Hora >= StrToTime('00:00:00')) and (Hora <= StrToTime('11:59:59')) then Showmessage('Bom dia. São ' + TimeToStr(Hora) + '. Seu Ponto foi registrado com sucesso!') else if (Hora >= StrToTime('12:00:00')) and (Hora <= StrToTime('13:29:59')) then Showmessage('Bom almoço. São ' + TimeToStr(Hora) + '. Seu Ponto foi registrado com sucesso!') else if (Hora >= StrToTime('13:30:00')) and (Hora <= StrToTime('18:00:00')) then Showmessage('Boa tarde. São ' + TimeToStr(Hora) + '. Seu Ponto foi registrado com sucesso!') else Showmessage('Bom descanso. São ' + TimeToStr(Hora) + '. Seu Ponto foi registrado com sucesso!'); end; end else // Se o usuário estiver bloqueado para uso ou não existir ShowMessage('Você não tem acesso ao Ponto!'); edtUsuario.SetFocus; end; Para tudo, minha lógica está totalmente errada. Eu tenho que dar o INSERT na primeira marcação certo? Aí a partir da segunda ir dando UPDATE nos horários. Vou ter que rever tudo aqui e depois posto o que consegui. Compartilhar este post Link para o post Compartilhar em outros sites
Chrnos 30 Denunciar post Postado Setembro 17, 2014 Acredito que seria o melhor, honeraria menos o banco fazer 1 registro só ao invés de quatro.... suponho que sua chave primária seja os campos codigofun_pon, data_pon nesta tabela certo? Se for, antes de decidir se fará um insert/update, você poderia ver se há algum registro com essa combinaçaõ no BD para a partir dai definir se fará um insert ou update na tabela. Depois, é só pegar a lógica que já montou no insert do valor dos campos e por no update saca? Compartilhar este post Link para o post Compartilhar em outros sites
EroSenin 0 Denunciar post Postado Setembro 18, 2014 Blz Chrnos vou revisar isso no final de semana. Por enquanto obrigado pela ajuda. Compartilhar este post Link para o post Compartilhar em outros sites