khador Posted June 6, 2012 at 08:19 AM Report Share #460790 Posted June 6, 2012 at 08:19 AM Postei ontem um tópico sobre isto mas a verificar clientes e já está a funcionar porém meti este codigo nas Marcação e nao dá, o meu objectivo e que nao deixe marcar uma marcação no mesmo dia, à mesma hora. mais a frente irao encontrar estas duas linhas: //Juntar a Data com a Hora DateTime dtData = Convert.ToDateTime(dtDataTratamento.Text + " " + cboHora.Text); DateTime dtHora = Convert.ToDateTime(dtDataTratamento.Text + " " + cboHora.Text); isto junta a data com a hora no campo Hora da Base de Dados. código: private void btnMarcar_Click(object sender, EventArgs e) { //Criar a Query para Verificar o campo com a Base de Dados SqlCommand cmdVerificar = new SqlCommand("SELECT count(Hora) FROM Marcacoes WHERE Hora='" + cboHora.Text +"'",cnSql); //Abrir a conexão cnSql.Open(); //Converter o valor do campo para int para permitir a comparaçao atraves do Count int marc = Convert.ToInt32(cmdVerificar.ExecuteScalar()); //Verificar se existe é igual a 0 if (marc >= 1) { MessageBox.Show("Esta Marcação é Inválida ou já existe.", "Erro ao Adicionar Marcação", MessageBoxButtons.OKCancel); cnSql.Close(); } else { //Juntar a Data com a Hora DateTime dtData = Convert.ToDateTime(dtDataTratamento.Text + " " + cboHora.Text); DateTime dtHora = Convert.ToDateTime(dtDataTratamento.Text + " " + cboHora.Text); //Criar o Data Command para a Query SqlCommand cmd = new SqlCommand("INSERT INTO Marcacoes(N_Cliente, Data, Hora, N_tratamento) VALUES ('" + cboNome.SelectedValue + "','" + dtData.ToString("yyyy-MM-dd") + "','" + dtHora.ToString("yyyy-MM-dd H:mm:ss") + "','" + lbTratamento.SelectedValue + "')", cnSql); //Executa a query cmd.ExecuteNonQuery(); //Confirmação da marcação MessageBox.Show("Marcação marcada com sucesso!", "Marcação efectuada"); //Actualizar o dataset this.marcacoesTableAdapter.Fill(this.bdestetica_DataDataSet2.Marcacoes); //Fechar a Connection cnSql.Close(); } } Link to comment Share on other sites More sharing options...
Caça Posted June 6, 2012 at 12:52 PM Report Share #460852 Posted June 6, 2012 at 12:52 PM Na consulta que estas a fazer para verificar se já existe, só estas a verificar a hora, tens de verificar também a Data. Pedro Martins Não respondo a duvidas por PM Link to comment Share on other sites More sharing options...
khador Posted June 6, 2012 at 01:24 PM Author Report Share #460857 Posted June 6, 2012 at 01:24 PM sim mas e que eu nesta linha: //Juntar a Data com a Hora DateTime dtData = Convert.ToDateTime(dtDataTratamento.Text + " " + cboHora.Text); DateTime dtHora = Convert.ToDateTime(dtDataTratamento.Text + " " + cboHora.Text); tou a juntar a data e a hora no campo hora ou seja se eu for ao campo hora tenho la a data e a hora (2012-09-23 16:50:00) Link to comment Share on other sites More sharing options...
petvetbr Posted June 6, 2012 at 01:28 PM Report Share #460860 Posted June 6, 2012 at 01:28 PM Se você rodar o comando gerado direto no servidor SQL ele traz algum resultado? Pode ocorrer do servidor esperar um formato de data diferente da que está passando. Fernando Lage Bastos - MCP/MCTS/MCPD Link to comment Share on other sites More sharing options...
Caça Posted June 6, 2012 at 01:29 PM Report Share #460863 Posted June 6, 2012 at 01:29 PM sim mas e que eu nesta linha: //Juntar a Data com a Hora DateTime dtData = Convert.ToDateTime(dtDataTratamento.Text + " " + cboHora.Text); DateTime dtHora = Convert.ToDateTime(dtDataTratamento.Text + " " + cboHora.Text); tou a juntar a data e a hora no campo hora ou seja se eu for ao campo hora tenho la a data e a hora (2012-09-23 16:50:00) Estava a falar aqui SqlCommand cmdVerificar = new SqlCommand("SELECT count(Hora) FROM Marcacoes WHERE Hora='" + cboHora.Text +"'",cnSql); Pedro Martins Não respondo a duvidas por PM Link to comment Share on other sites More sharing options...
khador Posted June 6, 2012 at 01:46 PM Author Report Share #460872 Posted June 6, 2012 at 01:46 PM eu pus a hora ai porque a data esta junto com a hora tal como disse ex: 2012-09-23 16:50:00 se puser a data o programa permitirá na mesma que se insira numa hora igual apenas nao deixa e no mesmo dia mas eu quero que permita no mesmo dia so nao deixe é à mesma hora. Link to comment Share on other sites More sharing options...
khador Posted June 8, 2012 at 02:05 PM Author Report Share #461413 Posted June 8, 2012 at 02:05 PM mais opinioes please Link to comment Share on other sites More sharing options...
petvetbr Posted June 8, 2012 at 02:19 PM Report Share #461420 Posted June 8, 2012 at 02:19 PM Você teria que filtrar por Dia e Hora. Existem formas de fazer isto diretamente no SQL ou até de forma mais fácil, trazer por exemplo os dados de um determinado dia e fazer este processamento diretamente no seu programa, usando o C#. No caso de querer fazer via SQL, teria que estudar como fazer no servidor que está utilizando, pois as funções de data não são padrão e variam por exemplo, se é um banco SQLServer ou MySQL ou ainda de outro tipo. Qual servidor está utilizando? Fernando Lage Bastos - MCP/MCTS/MCPD Link to comment Share on other sites More sharing options...
khador Posted June 8, 2012 at 02:37 PM Author Report Share #461429 Posted June 8, 2012 at 02:37 PM Você teria que filtrar por Dia e Hora. Existem formas de fazer isto diretamente no SQL ou até de forma mais fácil, trazer por exemplo os dados de um determinado dia e fazer este processamento diretamente no seu programa, usando o C#. No caso de querer fazer via SQL, teria que estudar como fazer no servidor que está utilizando, pois as funções de data não são padrão e variam por exemplo, se é um banco SQLServer ou MySQL ou ainda de outro tipo. Qual servidor está utilizando? tenho isto ate agora: //Criar o Sql Command com a string sql SqlCommand cmdVerTodos = new SqlCommand("SELECT Marcacoes.N_Marcacao, Marcacoes.N_Cliente, Marcacoes.N_tratamento, Marcacoes.Data, Marcacoes.Hora, Cliente.Nome FROM Marcacoes INNER JOIN Cliente ON Marcacoes.N_Cliente = Cliente.N_Cliente WHERE Marcacoes.Data >='" + DateTime.Now.Date.ToString("yyyy-MM-dd"), cnSql); //Abrir a conexão cnSql.Open(); //Executar a Query cmdVerTodos.ExecuteScalar(); bdestetica_DataDataSet2.Marcacoes.Clear(); //Preencher a listbox lbClientesAgenda com o DataSet this.marcacoesTableAdapter.Fill(this.bdestetica_DataDataSet2.Marcacoes); //Atualizar o DataSet lbClientesAgenda.DataSource = bdestetica_DataDataSet2.Marcacoes; //Mostrar os valores Por Hora lbClientesAgenda.DisplayMember = "Hora"; cnSql.Close(); Link to comment Share on other sites More sharing options...
petvetbr Posted June 8, 2012 at 03:18 PM Report Share #461455 Posted June 8, 2012 at 03:18 PM (edited) Este comando obtém as marcações em uma data: SELECT Marcacoes.N_Marcacao, Marcacoes.N_Cliente, Marcacoes.N_tratamento, Marcacoes.Data, Marcacoes.Hora, Cliente.Nome FROM Marcacoes INNER JOIN Cliente ON Marcacoes.N_Cliente = Cliente.N_Cliente WHERE Marcacoes.Data ='" + DateTime.Now.Date.ToString("yyyy-MM-dd") Aí você pode simplesmente processar o campo Hora para ver se já existe algo marcado neste mesmo horario e dia. algo como: bool jaMarcado=false; foreach (DataRow registro in this.marcacoes.Tables[0].Rows) { //verificar se algum dos registros tem a mesma hora já registrada //se houver: jaMarcado=true; break; //sai do foreach } if(jaMarcado) //avisar o usuário para selecionar outro horário. Edited June 8, 2012 at 03:19 PM by petvetbr Fernando Lage Bastos - MCP/MCTS/MCPD Link to comment Share on other sites More sharing options...
khador Posted June 12, 2012 at 09:46 AM Author Report Share #462115 Posted June 12, 2012 at 09:46 AM (edited) resolvido obrigado 😄 como ficou: private void btnMarcar_Click(object sender, EventArgs e) { //Juntar a Hora e a Data e conveter para Data DateTime dtHoraMarc = Convert.ToDateTime(dtDataTratamento.Text + " " + cboHora.Text); //Criar a Query para Verificar o campo com a Base de Dados SqlCommand cmdVerificar = new SqlCommand("SELECT count(Hora) FROM Marcacoes WHERE Hora='" + dtHoraMarc.ToString("yyyy-MM-dd HH:mm:ss")+"'",cnSql); cnSql.Open(); //Converter o valor do campo para int para permitir a comparaçao atraves do Count int marc = Convert.ToInt32(cmdVerificar.ExecuteScalar()); //Verificar se existe é igual ou superior a 1 if (marc >= 1) { MessageBox.Show("Esta Marcação é Inválida ou já existe.", "Erro ao Adicionar Marcação", MessageBoxButtons.OKCancel); cnSql.Close(); } else { //Juntar a Data com a Hora DateTime dtData = Convert.ToDateTime(dtDataTratamento.Text + " " + cboHora.Text); DateTime dtHora = Convert.ToDateTime(dtDataTratamento.Text + " " + cboHora.Text); //Criar o Data Command para a Query SqlCommand cmd = new SqlCommand("INSERT INTO Marcacoes(N_Cliente, Data, Hora, N_tratamento) VALUES ('" + cboNome.SelectedValue + "','" + dtData.ToString("yyyy-MM-dd") + "','" + dtHora.ToString("yyyy-MM-dd H:mm:ss") + "','" + lbTratamento.SelectedValue + "')", cnSql); //Executa a query cmd.ExecuteNonQuery(); //Confirmação da marcação MessageBox.Show("Marcação marcada com sucesso!", "Marcação efectuada"); //Actualizar o dataset this.marcacoesTableAdapter.Fill(this.bdestetica_DataDataSet2.Marcacoes); //Fechar a Connection cnSql.Close(); } } Edited June 12, 2012 at 09:46 AM by khador Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now