Jump to content

Inserir registos numa base de dados


esponjinha
 Share

Recommended Posts

esponjinha, antes de mais, bem vindo. 😞

Quando colocares dúvidas fá-lo de forma clara e concreta, caso contrário não te podemos ajudar.

Por exemplo, na tua dúvida não se sabe qual é o problema, se na base de dados, se é na aplicação.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

Peço desculpa se nao expliquei bem o problema.

o meu problema é o seguinte:

eu fiz uma base de dados  em access para ligar ao meu programa,se eu inserir os registos na base de dados consigo ver no programa, mas nao consigo é adicionar registos apartir do programa para aparecer na base de dados

Expero que consigam-me ajudar Obrigado 😞

Link to comment
Share on other sites

private void bindingNavigatorAddNewItem_Click(object sender, EventArgs e)
       {
           OleDbDataAdapter da = new OleDbDataAdapter();
           string liga = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Filipe\Desktop\teste\loja 2000.mdb";
           OleDbConnection myCon = new OleDbConnection(liga);
           string sql = " ";
           sql = ("SELECT * FROM clientes");
           da = new OleDbDataAdapter(sql, liga);
           DataTable dt = new DataTable();
           da.Fill(dt);
           clientesDataGridView.DataSource = dt;
       }

tenho incrementação no codigo de registo

Link to comment
Share on other sites

Tens aqui um exemplo, vê se ajuda:

  void Page_Load (Object sender, EventArgs e)
  {

    OleDbConnection objConnection = null;
    OleDbCommand objCmd = null; 
    String strConnection, strSQL;

    strConnection = "Provider=Microsoft.Jet.OleDb.4.0;";
//    strConnection += @"Data Source=C:\Northwind.mdb";
    strConnection += @"Data Source="+MapPath("EmployeeDatabase.mdb");
     
    // Create and open the connection object
    objConnection = new OleDbConnection(strConnection);
    objConnection.ConnectionString = strConnection;

    objConnection.Open();
    
    // set the SQL string
    strSQL = "INSERT INTO Employee (FirstName , LastName ) " +
    "VALUES ( 'Beth' , 'Hart' )";

    // Create the Command and set its properties
    objCmd = new OleDbCommand(strSQL, objConnection);
    
    // execute the command
    objCmd.ExecuteNonQuery();

    lblStatus.Text = "Command run";

  }

Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Link to comment
Share on other sites

private void bindingNavigatorAddNewItem_Click(object sender, EventArgs e)

        {

            OleDbDataAdapter da = new OleDbDataAdapter();

            string liga = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Filipe\Desktop\teste\loja 2000.mdb";

            OleDbConnection myCon = new OleDbConnection(liga);

            string sql = " ";

            sql = ("SELECT * FROM clientes");      Parece-me que estás a fazer um select* em vez de um ("insert into clientes")           

            da = new OleDbDataAdapter(sql, liga);

            DataTable dt = new DataTable();

            da.Fill(dt);

            clientesDataGridView.DataSource = dt;

        }

tenho incrementação no codigo de registo

Para perguntas idiotas, respostas estúpidas!

Link to comment
Share on other sites

boas pessoal voltei acho que ja tenho o codigo feito mas so que me da um erro na conexao:

            string sBDstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = Provider = Microsoft.Jet.OLEDB.4.0.Data Source =        C:\\Users\\Filipe\\Desktop\\loja 2000.mdb";

            string sSQL = "SELECT * from Nome";

            OleDbConnection con2 = new OleDbConnection(sBDstr);

            con2.Open();      <--O erro é aqui           

            OleDbDataAdapter oDA = new OleDbDataAdapter(sSQL,con2);

            DataSet oDs = new DataSet();

            oDA.Fill(oDs,"Nome");

            DataRow oDR = oDs.Tables["Nome"].NewRow();

            oDR["Nome"] = nomeTextBox.Text;

            oDs.Tables["Names"].Rows.Add(oDR);

            OleDbCommandBuilder oCB = new OleDbCommandBuilder(oDA);

            oDA.Update(oDs,"Nome");

            oDA.Dispose();

            oDs.Dispose();

            oCB.Dispose();

            con2.Dispose();

o erro diz :

Não é um nome de ficheiro válido.

Link to comment
Share on other sites

Olá,

A connectionstring está bem?

http://www.connectionstrings.com/access ou http://www.connectionstrings.com/access-2007 (para Access 2007)

Em vez de:

string sBDstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = Provider = Microsoft.Jet.OLEDB.4.0.Data Source =        C:\\Users\\Filipe\\Desktop\\loja 2000.mdb";

Não será isto?

Em vez de:

string sBDstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= C:\\Users\\Filipe\\Desktop\\loja 2000.mdb;User Id=admin;Password=;"

Cuidado com as bases de dados no Desktop. Não é um bom sítio pois podes ter problemas de permissões a aceder à BD.

Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Link to comment
Share on other sites

Boas pessoal  com mais um bocado de paciência e  com a vossa ajuda ja consegui  corrigir alguns erros,mas agora  surgiu-me um erro e não o consigo resolver :

string sBDstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\Infortech.mdb;User Id=Admin;Password= ;";
            string sSQL = "INSERT INTO Clientes (Codico_Cliente,Nome_Cliente,Morada_Cliente,Codigo_Postal_Cliente,Telefone_Cliente,Telemovel_Cliente,Fax_Cliente,Email_Cliente" + "VALUES(codico_ClienteTextBox,nome_ClienteTextBox,morada_ClienteTextBox,codigo_Postal_ClienteTextBox,telefone_ClienteTextBox,telemovel_ClienteTextBox,fax_ClienteTextBox,email_ClienteTextBox)";

            OleDbConnection con2 = new OleDbConnection(sBDstr);
            con2.Open();
            OleDbDataAdapter oDA = new OleDbDataAdapter(sSQL, con2);
            DataSet oDs = new DataSet();
            oDA.Fill(oDs, "Clientes");                             <-- O erro esta aqui
            DataRow oDR = oDs.Tables["Clientes"].NewRow();
            oDR["Nome_Cliente"] = nome_ClienteTextBox.Text;

            oDs.Tables["Clientes"].Rows.Add(oDR);
            OleDbCommandBuilder oCB = new OleDbCommandBuilder(oDA);
            oDA.Update(oDs, "Clientes");

            oDA.Dispose();
            oDs.Dispose();
            oCB.Dispose();
            con2.Dispose();

mensagem de erro:

Erro de sintaxe na instrução INSERT INTO.

Link to comment
Share on other sites

Olá,

Tens dois problemas aí:

- O comando SQL está mal escrito;

- Não é assim que se faz uma inserção na base de dados

Versão corrigida:

OleDbConnection con2 = new OleDbConnection(sBDstr);
con2.Open();
             
string sSQL = "INSERT INTO Clientes (Codico_Cliente,Nome_Cliente,Morada_Cliente,Codigo_Postal_Cliente,Telefone_Cliente,Telemovel_Cliente,Fax_Cliente,Email_Cliente) VALUES (@Codico_Cliente,@Nome_Cliente,@Morada_Cliente,@Codigo_Postal_Cliente,@Telefone_Cliente,@Telemovel_Cliente,@Fax_Cliente,@Email_Cliente)";

OleDbCommand insertCommand = new OleDbCommand(sSQL, con2);

insertCommand.Parameters.Add("@Codico_Cliente", OleDbType.Char).Value = campo;
insertCommand.Parameters.Add("@Nome_Cliente", OleDbType.Char).Value = campo;
insertCommand.Parameters.Add("@Morada_Cliente", OleDbType.Char).Value = campo;
insertCommand.Parameters.Add("@Codigo_Postal_Cliente", OleDbType.Char).Value = campo;
insertCommand.Parameters.Add("@Telefone_Cliente", OleDbType.Char).Value = campo;
insertCommand.Parameters.Add("@Telemovel_Cliente", OleDbType.Char).Value = campo;
insertCommand.Parameters.Add("@Fax_Cliente", OleDbType.Char).Value = campo;
insertCommand.Parameters.Add("@Email_Cliente", OleDbType.Char).Value = campo;

con2.Open();

try
{
int count = insertCommand.ExecuteNonQuery();
}
catch (OleDbException ex)
{
MessageBox.Show(ex.Message);
}
finally
{
con2.Close();
}

Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Link to comment
Share on other sites

Boas

fiz o codico como disses-tes e ja não da erro mas quando insiro um novo registo  ele fica com o id  -1 e na base de dados fica so os ids e nao aparece os registos.

o codico esta aqui:

Se me puderem dizer o que falat agradecia obrigado

string sBDstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Infortech.mdb;User Id=Admin;Password= ;";


            OleDbConnection con2 = new OleDbConnection(sBDstr);
            con2.Open();

            string sSQL = "INSERT INTO Clientes (Codico_Cliente,Nome_Cliente,Morada_Cliente,Codigo_Postal_Cliente,Telefone_Cliente,Telemovel_Cliente,Fax_Cliente,Email_Cliente) VALUES (@codico_ClienteTextBox.Text,@nome_ClienteTextBox.Text,@morada_ClienteTextBox.Text,@codigo_Postal_ClienteTextBox.Text,@telefone_ClienteTextBox.Text,@telemovel_ClienteTextBox.Text,@fax_ClienteTextBox.Text,@email_ClienteTextBox.Text)";

            OleDbCommand insertCommand = new OleDbCommand(sSQL, con2);

            insertCommand.Parameters.Add("@Codico_Cliente", OleDbType.Char).Value = codico_ClienteTextBox.Text;
            insertCommand.Parameters.Add("@Nome_Cliente", OleDbType.Char).Value = nome_ClienteTextBox.Text;
            insertCommand.Parameters.Add("@Morada_Cliente", OleDbType.Char).Value = morada_ClienteTextBox.Text;
            insertCommand.Parameters.Add("@Codigo_Postal_Cliente", OleDbType.Char).Value = codigo_Postal_ClienteTextBox.Text;
            insertCommand.Parameters.Add("@Telefone_Cliente", OleDbType.Char).Value = telefone_ClienteTextBox.Text;
            insertCommand.Parameters.Add("@Telemovel_Cliente", OleDbType.Char).Value = telemovel_ClienteTextBox.Text;
            insertCommand.Parameters.Add("@Fax_Cliente", OleDbType.Char).Value = fax_ClienteTextBox.Text;
            insertCommand.Parameters.Add("@Email_Cliente", OleDbType.Char).Value = email_ClienteTextBox.Text;

            

            try
            {
                int count = insertCommand.ExecuteNonQuery();
            }
            catch (OleDbException ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                con2.Close();
            }
Link to comment
Share on other sites

Olá,

O teu comando de inserção não está bem:

A string SQL deve ser (alterei apenas os parâmetros do INSERT (@codigo, @nome, etc):

string sSQL = "INSERT INTO Clientes (Codico_Cliente,Nome_Cliente,Morada_Cliente,Codigo_Postal_Cliente,Telefone_Cliente,Telemovel_Cliente,Fax_Cliente,Email_Cliente) VALUES (@codigo, @nome, @morada, @codigo_postal, @telefone, @telemovel, @fax, @email)"

Basicamente, o que vais fazer é uma inserção e vais enviar os valores dos campos por parâmetro. O que te parece à frente do arroba (@) são os nomes dos parâmetros.

De seguida tens de mapear cada parâmetro ao respectivo valor, assim:

// O valor do parâmetro @codigo vai ser o texto que está no objecto codico_ClienteTextBox
insertCommand.Parameters.Add("@codigo", OleDbType.Char).Value = codico_ClienteTextBox.Text;

// O valor do parâmetro @nome vai ser o texto que está no objecto nome_ClienteTextBox
insertCommand.Parameters.Add("@nome", OleDbType.Char).Value = nome_ClienteTextBox.Text;

// E assim por diante, até completares os teus parâmetros

Se precisares de + ajuda, diz.

Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Link to comment
Share on other sites

Boas obrigado pela ajuda ate agora  😁

Ja fiz com disses-tes Rechousa mas na base de dados aparece so as linhas e nao aparece nada dentro dos campos e o ID esta negativo. Podem me dizer o pk?

o codiigo:

string sBDstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Infortech.mdb;User Id=Admin;Password= ;";


            OleDbConnection con2 = new OleDbConnection(sBDstr);
            con2.Open();

            string sSQL = "INSERT INTO Clientes (Codico_Cliente,Nome_Cliente,Morada_Cliente,Codigo_Postal_Cliente,Telefone_Cliente,Telemovel_Cliente,Fax_Cliente,Email_Cliente) VALUES (@codico,@nome,@morada,@codigo_Postal,@telefone,@telemovel,@fax,@email)";

            OleDbCommand insertCommand = new OleDbCommand(sSQL, con2);

            insertCommand.Parameters.Add("@Codico", OleDbType.Char).Value = codico_ClienteTextBox.Text;
            insertCommand.Parameters.Add("@Nome", OleDbType.Char).Value = nome_ClienteTextBox.Text;
            insertCommand.Parameters.Add("@Morada", OleDbType.Char).Value = morada_ClienteTextBox.Text;
            insertCommand.Parameters.Add("@Codigo_Postal", OleDbType.Char).Value = codigo_Postal_ClienteTextBox.Text;
            insertCommand.Parameters.Add("@Telefone", OleDbType.Char).Value = telefone_ClienteTextBox.Text;
            insertCommand.Parameters.Add("@Telemovel", OleDbType.Char).Value = telemovel_ClienteTextBox.Text;
            insertCommand.Parameters.Add("@Fax", OleDbType.Char).Value = fax_ClienteTextBox.Text;
            insertCommand.Parameters.Add("@Email", OleDbType.Char).Value = email_ClienteTextBox.Text;

            

            try
            {
                int count = insertCommand.ExecuteNonQuery();
            }
            catch (OleDbException ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                con2.Close();
            }

Sera que nao falta codigo?Disseram -me um função chamada ROW nao se utiliza?

Obrigado 😁

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
 Share

×
×
  • 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.