2016-03-30 17 views
0

Ich versuche, Daten in eine MS Access einzufügen db VB aber einige Mühe Finishing den CodeVB einfügen in Access

Imports System.Data.OleDb 

Public Class Form1 

Dim provider As String 
Dim dataFile As String 
Dim connString As String 
Public myConnection As OleDbConnection = New OleDbConnection 
Public dr As OleDbDataReader 

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    'BD Connection 
    provider = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source =" 
    dataFile = "C:\Users\Peter\Documents\Database1.accdb" 
    connString = provider & dataFile 
    myConnection.ConnectionString = connString 
End Sub 

Private Sub FindButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FindButton.Click 
    'Query BD 
    myConnection.Open() 
    DescriptionText.Clear() 
    CostText.Clear() 
    PriceText.Clear() 
    Dim str As String 
    str = "SELECT * FROM Table1 WHERE (Code = '" & CodeText.Text & "')" 
    Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection) 
    dr = cmd.ExecuteReader 
    While dr.Read() 
     DescriptionText.Text = dr("Description").ToString 
     CostText.Text = dr("Cost").ToString 
     PriceText.Text = dr("Price").ToString 
    End While 
    myConnection.Close() 
End Sub 
Private Sub AddButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AddButton.Click 
    'Insert BD 
    Dim str As String 

    myConnection.Open() 
    CodeText.Clear() 
    DescriptionText.Clear() 
    CostText.Clear() 
    PriceText.Clear() 

    str = "INSERT INTO Table1 (Code, Description, Cost, Price) Values (CodeText.Text, DescriptionText.Text, CostText.Text, PriceText.Text) VALUES ('CodeText.Text', 'DescriptionText.Text', 'CostText.Text', 'PriceText.Text')" 
    Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection) 
    cmd.ExecuteNonQuery() 

    MsgBox("saved") 

    myConnection.Close() 
End Sub 
End Class 

Meine Anfrage sub funktionieren, die aber, wenn ich versuche zum Einfügen von Daten es gibt mir ein Fehler in der "cmd.ExecuteNonQuery()".

Können Sie mir helfen, was falsch zu finden?

+1

Sehen Sie sich die Abfrage an, die Sie gerade ausführen ... –

Antwort

3

Ihre Abfragesyntax INSERT ist nicht korrekt. Sie können die Textbox.Text nicht einfach als Strings in die Werte einfügen. Du musst ihnen entkommen.

Aber ich würde mit parametrisierte Abfragen für beide SELECT und INSERT Aussagen sehr empfehlen:

Dim insert As String = "INSERT INTO Table1 (Code, Description, Cost, Price) Values (?, ?, ?, ?)" 
Dim insertCmd As New OleDbCommand(insert, myConnection) 
insertCmd.Parameters.Add(New OleDbParameter("Code", CodeText.Text)) 
insertCmd.Parameters.Add(New OleDbParameter("Description", DescriptionText.Text)) 
insertCmd.Parameters.Add(New OleDbParameter("Cost", Double.Parse(CostText.Text))) 
insertCmd.Parameters.Add(New OleDbParameter("Price", Double.Parse(PriceText.Text))) 
insertCmd.ExecuteNonQuery() 

Ich gehe davon aus, dass Ihre Cost und Price Datenbankfelder sind numerische so verwendete ich Double.Parse sie zu konvertieren. Code scheint ein Textfeld zu sein, so dass keine Konvertierung erforderlich ist. Wenn meine vorgeschlagenen Typen, die Sie nicht korrekt sind, haben diese einzustellen, ist es Integer.Parse, Decimal.Parse usw.

hier schließlich die SELECT Teil optimiert:

Dim qry As String = "SELECT * FROM Table1 WHERE (Code = ?)" 
Dim selectCmd As OleDbCommand = New OleDbCommand(qry, myConnection) 
selectCmd.Parameters.Add(New OleDbParameter("Code", CodeText.Text)) 
selectCmd.ExecuteNonQuery() 

More about parametrized queries

+0

Danke, Alex. Dieser Code gibt mir den Fehler "BC30451 \t 'Beschreibung' wird nicht deklariert. Es kann aufgrund seiner Schutzstufe nicht zugänglich sein". Dieser Fehler ist bei "Beschreibung", "Kosten" und "Preis" aber nicht bei "Code". –

+2

Ich hatte einen Tippfehler in den Textfeldnamen, die ich in meiner Antwort korrigiert habe. Aber ehrlich, du kennst deinen Code besser als ich ... mit ein bisschen Nachforschung hättest du ihn selbst reparieren können;) –

0

Versuchen Sie, diese

str = "INSERT INTO Table1 (Code, Description, Cost, Price) Values ('" + CodeText.Text + "', '" + DescriptionText.Text + "', '" + CostText.Text + "', '" + PriceText.Text + "')" 
+0

Thans Karthick. Guter Punkt, aber wenn ich auf add (insert) klicke, füge ich eine Zeile (mit ID) in die Datenbank ein, aber ohne Daten. –

Verwandte Themen