none
Como criar um select antes de um insert ? RRS feed

  • Pergunta

  • Boa tarde !

    A minha duvida é a seguinte, estou tentando fazer um select antes do insert, para verificar se os dados que estou tentando salvar já existam na tabela. Estou usando banco de dados em Acess. 

    Estou tentando fazer um select pela data, quero evitar que a pessoa faça a inserção de dados mais de 01 vez no mesmo dia.

    eu não sei onde estou errando, ainda estou engatinhando no c#... HELP !!!

    Segue abaixo o código:

           public void Inserir(Caixa_Geral p)
            { // já inicializada no construtor
                OleDbConnection conn = new OleDbConnection(strconn);
                //Abrir a conexão
                conn.Open();
                // obtém o ID que precisava
                OleDbTransaction transacao = conn.BeginTransaction();
                StringBuilder sb = new StringBuilder();
                string Query = "SELECT *from  Caixa WHERE Data=" + p.Data;
                OleDbCommand verifyUser = new OleDbCommand(Query,conn);
                transacao.Commit(); 
    try
    {
    verifyUser.ExecuteNonQuery();

    OleDbDataReader myReader = verifyUser.ExecuteReader();

    while (myReader.Read() != false)
    {
    ExisteUtilizador = myReader.GetInt32(0);
    }

    myReader.Close();
    }
    catch (Exception excp)
    {
    Exception myExcp = new Exception("Não foi possível verificar se existe o utilizador.\n Por favor, contacte o administrador.", excp);
    throw (myExcp);
    }

    if (ExisteUtilizador == 0)
    {
                    String sqlProduto = "INSERT INTO Caixa ([Data],[Tipo],[Valor]) VALUES (@Data,@Tipo,@Valor)";
                    OleDbCommand cmdProduto = new OleDbCommand(sqlProduto, conn, transacao);
                    cmdProduto.Parameters.AddWithValue("@Data", p.Data);
                    cmdProduto.Parameters.AddWithValue("@Tipo", p.Tipo);
                    cmdProduto.Parameters.AddWithValue("@Valor", p.Valor);
                    cmdProduto.ExecuteNonQuery();
                    conn.Close();
                    }
                     else
                     { 
                      MessageBox.Show("Ja existe cadastro com esta data");
                       }
                    }
                }
      }      
       

    Agradeço desde ja !!!


    Jimi Anderson

    sábado, 17 de novembro de 2012 15:27

Respostas

  • Bom... andei pesquisando, estudando e consegui resolver, segue abaixo o código como ficou.

    public DataTable Inserir_Registro(Caixa_Geral p)
            {
                OleDbConnection conn = new OleDbConnection(strconn);
                strconn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Jato.mdb";
                conn = new OleDbConnection(strconn);
                conn.Open();
                String sql = " Select * From Caixa Where " +
                           " Caixa.Data Like @Data";
                OleDbCommand cmdsaldo = new OleDbCommand(sql, conn);
                cmdsaldo.Parameters.AddWithValue("@Data", p.Data);
                OleDbDataAdapter da = new OleDbDataAdapter();
                da.SelectCommand = cmdsaldo;
                DataSet ds = new DataSet();
                da.Fill(ds);
                
                if (ds.Tables[0].DefaultView.Count == 0)
                 {                          
                    OleDbTransaction transacao = conn.BeginTransaction();
                    StringBuilder sb = new StringBuilder();
                    //String sqlProduto = "INSERT INTO [dbo].[OS] ([Nome], [Endereco], [Motivo], [Data], [Descricao], [Resolucao], [Tecnico], [Contato])";// VALUES ("+p.Nome+ "','"+p.Endereco+ "','"+p.Motivo + "','"+p.Data + "','"+p.Descricao+ "','"+p.Resolucao+ "','"+p.Tecnico+"','"+p.Contato+")";
                    String sqlProduto = "INSERT INTO Caixa ([Data],[Tipo], [Valor]) VALUES (@Data,@Tipo,@Valor)";
                    OleDbCommand cmdProduto = new OleDbCommand(sqlProduto, conn, transacao);
                    cmdProduto.Parameters.AddWithValue("@Data", p.Data);
                    cmdProduto.Parameters.AddWithValue("@Tipo", p.Tipo);
                    cmdProduto.Parameters.AddWithValue("@Valor", p.Valor);
                    cmdProduto.ExecuteNonQuery();
                                  
                    transacao.Commit();
                    conn.Close();
                    MessageBox.Show("Informações adicionadas com sucesso");
                    }
                    
                else
                {
                    MessageBox.Show("Foi detectado um fechamento de caixa para o dia "+ p.Data + " , não é possível prosseguir, feche o caixa no proximo dia.");
                }
                return ds.Tables[0];
                           
            }


    Jimi Anderson

    • Marcado como Resposta Anderson Mac segunda-feira, 19 de novembro de 2012 21:00
    segunda-feira, 19 de novembro de 2012 20:59

Todas as Respostas

  • eu tenho um ex aki: http://malange-levi.blogspot.co.uk/

    A flower cannot blossom without sunshine, and man cannot live without love.

    domingo, 18 de novembro de 2012 16:14
  • Bom... andei pesquisando, estudando e consegui resolver, segue abaixo o código como ficou.

    public DataTable Inserir_Registro(Caixa_Geral p)
            {
                OleDbConnection conn = new OleDbConnection(strconn);
                strconn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Jato.mdb";
                conn = new OleDbConnection(strconn);
                conn.Open();
                String sql = " Select * From Caixa Where " +
                           " Caixa.Data Like @Data";
                OleDbCommand cmdsaldo = new OleDbCommand(sql, conn);
                cmdsaldo.Parameters.AddWithValue("@Data", p.Data);
                OleDbDataAdapter da = new OleDbDataAdapter();
                da.SelectCommand = cmdsaldo;
                DataSet ds = new DataSet();
                da.Fill(ds);
                
                if (ds.Tables[0].DefaultView.Count == 0)
                 {                          
                    OleDbTransaction transacao = conn.BeginTransaction();
                    StringBuilder sb = new StringBuilder();
                    //String sqlProduto = "INSERT INTO [dbo].[OS] ([Nome], [Endereco], [Motivo], [Data], [Descricao], [Resolucao], [Tecnico], [Contato])";// VALUES ("+p.Nome+ "','"+p.Endereco+ "','"+p.Motivo + "','"+p.Data + "','"+p.Descricao+ "','"+p.Resolucao+ "','"+p.Tecnico+"','"+p.Contato+")";
                    String sqlProduto = "INSERT INTO Caixa ([Data],[Tipo], [Valor]) VALUES (@Data,@Tipo,@Valor)";
                    OleDbCommand cmdProduto = new OleDbCommand(sqlProduto, conn, transacao);
                    cmdProduto.Parameters.AddWithValue("@Data", p.Data);
                    cmdProduto.Parameters.AddWithValue("@Tipo", p.Tipo);
                    cmdProduto.Parameters.AddWithValue("@Valor", p.Valor);
                    cmdProduto.ExecuteNonQuery();
                                  
                    transacao.Commit();
                    conn.Close();
                    MessageBox.Show("Informações adicionadas com sucesso");
                    }
                    
                else
                {
                    MessageBox.Show("Foi detectado um fechamento de caixa para o dia "+ p.Data + " , não é possível prosseguir, feche o caixa no proximo dia.");
                }
                return ds.Tables[0];
                           
            }


    Jimi Anderson

    • Marcado como Resposta Anderson Mac segunda-feira, 19 de novembro de 2012 21:00
    segunda-feira, 19 de novembro de 2012 20:59