Jump to content

C# - Adicionar Marcação Verificação


khador

Recommended Posts

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

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

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

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

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

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 by petvetbr

Fernando Lage Bastos - MCP/MCTS/MCPD

Link to comment
Share on other sites

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 by khador
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.