- PR -

VisualStudio2005 -SQL構文でAccessデータベースにデータを記入-

投稿者投稿内容
にら
会議室デビュー日: 2006/05/20
投稿数: 8
投稿日時: 2006-05-20 21:33
SQL構文を使ってフォームのコンボボックスで選択されたアイテムをアクセスデータベースに新しくRowを作ってデータの記入がしたいのですが何度やっても何かしらのエラーが出てしまいます。どなたかご存知の方がいらっしゃいましたらよろしくお願いします。

環境:
仕様APP/VisualStudio2005 Express
言語/VB
以下ソース:

Imports System.Data
Imports System.Data.OleDb

Public Class frmBooking

Dim conn As OleDbConnection
Dim cmd As OleDbCommand
Dim da As OleDbDataAdapter
Dim ds As DataSet
Dim InsertCmd As OleDbCommand
Dim BindingSource As New BindingSource

Private Sub btnBook_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBook.Click

Dim ConString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=""booking.mdb"";"
Dim DBCon As New OleDb.OleDbConnection(ConString)

Dim strSql As String = "Select * FROM [Bookings]"
Dim cm As New OleDbCommand(strSql, DBCon)
Dim da As OleDbDataAdapter

Dim strDay As String = cmbDay.Text
Dim strRoom As String = cmbRoom.Text
Dim strStartTime As String = cmbStartTime.Text
Dim strEndTime As String = cmbEndTime.Text
Dim strCourse As String = cmbCourse.Text
Dim strTimePeriod = strStartTime & "-" & strEndTime

'if statements for error message if any comboBoxes are blank
If strRoom = "" Then
MessageBox.Show("Select a Room which you want to make a book.", "Error Info")
ElseIf strDay = "" Then
MessageBox.Show("Select a Day which you want to make a book.", "Error Info")
ElseIf strStartTime = "" Then
MessageBox.Show("Select a StartTime which you want to make a book.", "Error Info")
ElseIf strEndTime = "" Then
MessageBox.Show("Select a EndTime which you want to make a book.", "Error Info")
ElseIf strCourse = "" Then
MessageBox.Show("Select a Course which you want to make a book.", "Error Info")
ElseIf strStartTime = strEndTime Then
MessageBox.Show("You can't Select same time slots", "Error Info")
End If

'Updating the database [INSERT cmd]
'-SQL EXAMPLE-
'INSERT INTO TableName
'VALUES ('****', '****', '****', '*** **')
Dim strSqlChaine As String = "INSERT INTO Bookings ("
strSqlChaine = strSqlChaine & " " & strDay & ","
strSqlChaine = strSqlChaine & " " & strRoom & ","
strSqlChaine = strSqlChaine & " " & strCourse & ","
strSqlChaine = strSqlChaine & " " & strTimePeriod
strSqlChaine = strSqlChaine & ")"

'Showing SQL statement
MessageBox.Show(strSqlChaine)

'Setting a dabase and dataset. And Opening a connection
conn = New OleDbConnection("Provider=microsoft.Jet.oledb.4.0; Data source=bookings.mdb")
cmd = New OleDbCommand("Select * from [Bookings]", conn)
InsertCmd = New OleDbCommand(strSqlChaine, conn)

'parametise the command
With InsertCmd
.Parameters.Add("Day", OleDbType.VarChar)
.Parameters.Add("Room", OleDbType.VarChar)
.Parameters.Add("Course", OleDbType.VarChar)
.Parameters.Add("Time", OleDbType.VarChar)
.Parameters("Day").SourceColumn = "Day"
.Parameters("Room").SourceColumn = "Room"
.Parameters("Course").SourceColumn = "Course"
.Parameters("Time").SourceColumn = "Time"
.Parameters("Day").Value = strDay
.Parameters("Room").Value = strRoom
.Parameters("Course").Value = strCourse
.Parameters("Time").Value = strTimePeriod
End With

da = New OleDbDataAdapter(cmd)
da.InsertCommand = InsertCmd
ds = New DataSet
da.Fill(ds, "Bookings")
BindingSource.DataSource = ds

conn.Open()
InsertCmd.ExecuteNonQuery()
BookingsBindingSource.EndEdit()

If ds.HasChanges() Then
Dim dsChanges As DataSet = ds.GetChanges()
Try
da.Update(dsChanges, strDay)
ds.AcceptChanges()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End If

'Showing a messagebox tells you what effect has been appeared in the database
Dim rowsAffected As Integer = 0
rowsAffected = BookingsTableAdapter.Update(BookingsDataSet1.Bookings)

MessageBox.Show(rowsAffected.ToString, "Booking Confirmation")

Me.Hide()
frmMain.Show()
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-05-20 22:28
引用:

未記入さんの書き込み (2006-05-20 21:33) より:

スに新しくRowを作ってデータの記入がしたいのですが何度やっても何かしらのエラーが


コードが長いと読むのが辛いので、まずはその何かしらのエラーをコピペしてみませんか?(^▽^;
にら
会議室デビュー日: 2006/05/20
投稿数: 8
投稿日時: 2006-05-20 22:59
申し訳ありませんでした。エラー内容を書き込むのを忘れていました。

エラーは:
Syntax Error in INSERT SQL statement
でした。

ハイライトされるコードは下の方の:
InsertCmd.ExecuteNonQuery()
です。

大変失礼致しました。<(_ _)>
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-05-20 23:33
引用:

未記入さんの書き込み (2006-05-20 22:59) より:
申し訳ありませんでした。エラー内容を書き込むのを忘れていました。

エラーは:
Syntax Error in INSERT SQL statement
でした。

ハイライトされるコードは下の方の:
InsertCmd.ExecuteNonQuery()
です。

大変失礼致しました。<(_ _)>



すみません。今自宅なので、確認できません。
(家のパソコンに開発環境はわざと入れていないw)

で調べてみたところ

「INSERT INTOで構文エラー」ということなので、ここに該当する SQL 文を取り出して(OleDbCommandに渡すSqlTextね)見るのが良いです。結構どこがおかしいのかわかりま
すので。
アクセス使っているなら、そのSQL文をアクセスで実行させてみると、もっと詳しくメッセージがでたりすることもあります。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-05-20 23:36
引用:

未記入さんの書き込み (2006-05-20 21:33) より:

Dim strSqlChaine As String = "INSERT INTO Bookings ("
strSqlChaine = strSqlChaine & " " & strDay & ","
strSqlChaine = strSqlChaine & " " & strRoom & ","
strSqlChaine = strSqlChaine & " " & strCourse & ","
strSqlChaine = strSqlChaine & " " & strTimePeriod
strSqlChaine = strSqlChaine & ")"



下でパラメータに値を入れるならここで作るSQLには
値でなくパラメータ名をいれるんじゃないですか?
うにくま
ベテラン
会議室デビュー日: 2005/11/05
投稿数: 82
投稿日時: 2006-05-21 00:05
かるあさんの仰るとおり、
SQLにはパラメータ名を指定しなければなりませんし、構文も間違ってます。
(コメントで記述されているEXAMPLEと違いますよね?)

以下のようになるはずです。
コード:
Dim strSqlChaine As String = "INSERT INTO Bookings "
strSqlChaine = strSqlChaine & "VALUES( "
strSqlChaine = strSqlChaine & " @Day,"
strSqlChaine = strSqlChaine & " @Room,"
strSqlChaine = strSqlChaine & " @Course,"
strSqlChaine = strSqlChaine & " @Time"
strSqlChaine = strSqlChaine & ")"

にら
会議室デビュー日: 2006/05/20
投稿数: 8
投稿日時: 2006-05-21 05:41
パラメータですか。なるほどです。すぐにでも試してみようと思います。
皆さんありがとうございます。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-21 08:02
引用:

未記入さんの書き込み (2006-05-20 21:33) より:

Public Class frmBooking
  Dim conn As OleDbConnection
  Dim cmd As OleDbCommand
  Dim da As OleDbDataAdapter
  Dim ds As DataSet
  Dim InsertCmd As OleDbCommand
  Dim BindingSource As New BindingSource
  (snip)


関係ないところですが、何故プライベート メンバなんですか? (Private ... As ... と同じ)
btnBook_Click でインスタンスを生成されているわけですが、
なんか全体的に整っていないような気がします。(修正作業中?)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

スキルアップ/キャリアアップ(JOB@IT)