2012-07-13 7 views
0

전화 번호부와 같은 연락처 관리 양식을 만들었으므로 ID (사용자 번호)를 테이블에 삽입하는 동안 probs가 기본 키 (자동 번호)로 포함 된 MS Access 2003에서 거의 12 개의 필드를 만들었습니다. .Oledb Adapter/Command를 사용하여 VB.net에서 MS Access 2003 테이블에 행을 삽입하는 방법?

Imports System.Data.OleDb 
Public Class FrmMain 

    Private Sub FrmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     connection_open() 
    End Sub 
    Dim adp As OleDbDataAdapter 
    Dim dt As DataTable 



    Private Sub BtnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSave.Click 
     Dim sql As String 

     sql = "insert into TblContacts (FName, Company, Contact_1, Contact_2, Address, Email_1, Email_2, Web, SNS, Date_Saved, Cont_Image) values ('" & TxtFName.Text & "' ,'" & TxtCompany.Text & "','" & TxtCont_1.Text & "','" & TxtCont_2.Text & "','" & TxtAddress.Text & "','" & TxtEmail_1.Text & "','" & TxtEmail_2.Text & "','" & TxtWeb.Text & "','" & TxtSNS.Text & "',#" & TxtDate.Text & "#,'" & TextBox10.Text & "')" 

     Try 
      adp = New OleDbDataAdapter 
      adp.InsertCommand = New OleDbCommand(sql, con) 
      adp.InsertCommand.ExecuteNonQuery() 


      MsgBox("Saved Successfully!") 

     Catch ex As Exception 

      MsgBox(ex.ToString) 

     End Try 
    End Sub 

    Private Sub ToolStripButton3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton3.Click 
     Try 
      dt = New DataTable 
      adp = New OleDbDataAdapter("Select * from TblContacts", con) 
      adp.Fill(dt) 

      DataGridView1.DataSource = dt 


     Catch ex As Exception 

      MsgBox(ex.Message) 

     End Try 
    End Sub 


    'Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick 
    ' ToolStripTextBox2.Text = Now 
    'End Sub 

End Class 

**Connection Module:** 

Imports System.Data.OleDb 

Module connection_module 

    Public con As New OleDbConnection 
    Public Sub connection_open() 
     Try 
      If con.State = ConnectionState.Open Then 
       con.Close() 
      End If 
      con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\Contacts.mdb" 
      con.Open() 

     Catch ex As Exception 

      MsgBox(ex.Message) 

     End Try 
    End Sub 
End Module 

https://picasaweb.google.com/105381696083885067883/VBNet?authuser=0&authkey=Gv1sRgCPvqiqCrjqCAfQ&feat=directlink

+0

스크린 샷 어딘가에 잃었어요? 그래서 우리는 당신의 오류 메시지가 무엇인지 알 수 없습니까? – RBarryYoung

+2

어둠 속에서 찌를 때 칼럼 이름이 정확한지 확인하십시오. 어쩌면 SNS가 SSN (사회 보장 번호)일까요? 또한 매개 변수 사용법을 배우십시오. 쿼리가 SQL 인젝션에 취약합니다. – LarsTech

+0

@LarsTech : 오, 멋지게 잡으세요! 나는이 하나에 내기를 해요 ... – RBarryYoung

답변

3

이름과 이미지는 MS Access에서 reserved words하고 [name]

Date_Saved 정말 텍스트되어 괄호로 묶어야해야합니까? 구분 기호가 아닌 #는 '

이고, 물론 @Lars 점입니다.

마지막으로, might like to consider parameters 또는 Passing parameter to query for Access database

+0

나는 당신의 충고에 따라 질문을 다시 편집하고 Images ...에 대한 링크를 추가했습니다. 이것이 내 질문을 설명하는 데 도움이되기를 바랍니다. –

+0

코드 개요를 테스트했으며 'FName = "abc": ADate = Now : sql = "테이블 1 (AText, ADate) 값에 삽입 ('"& FName & " ', #"& ADate & "#") : MsgBox (sql)'이 효과적입니다. , 그래서 나는 당신이 텍스트 박스에서 얻고있는 것을 확인해야한다고 생각한다. 그러나 오늘은 저장 날짜를 위해 텍스트 상자를 사용할 필요가 없습니다. 그래서 Table1 (AText, ADate) 값 (' "& FName &"', Now())에 삽입하십시오. 어울릴 것입니다. – Fionnuala

+0

나는 당신이 매개 변수를 가진 굉장한 수의 문제를 피할 것이라는 점을 다시 강조한다. 텍스트 상자에 작은 따옴표 (')가 있으면 쿼리가 실패합니다. – Fionnuala