- - PR -
VisualStudio2005 -SQL構文でAccessデータベースにデータを記入-
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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() | ||||
|
投稿日時: 2006-05-20 22:28
コードが長いと読むのが辛いので、まずはその何かしらのエラーをコピペしてみませんか?(^▽^; | ||||
|
投稿日時: 2006-05-20 22:59
申し訳ありませんでした。エラー内容を書き込むのを忘れていました。
エラーは: Syntax Error in INSERT SQL statement でした。 ハイライトされるコードは下の方の: InsertCmd.ExecuteNonQuery() です。 大変失礼致しました。<(_ _)> | ||||
|
投稿日時: 2006-05-20 23:33
すみません。今自宅なので、確認できません。 (家のパソコンに開発環境はわざと入れていないw) で調べてみたところ 「INSERT INTOで構文エラー」ということなので、ここに該当する SQL 文を取り出して(OleDbCommandに渡すSqlTextね)見るのが良いです。結構どこがおかしいのかわかりま すので。 アクセス使っているなら、そのSQL文をアクセスで実行させてみると、もっと詳しくメッセージがでたりすることもあります。 | ||||
|
投稿日時: 2006-05-20 23:36
下でパラメータに値を入れるならここで作るSQLには 値でなくパラメータ名をいれるんじゃないですか? | ||||
|
投稿日時: 2006-05-21 00:05
かるあさんの仰るとおり、
SQLにはパラメータ名を指定しなければなりませんし、構文も間違ってます。 (コメントで記述されているEXAMPLEと違いますよね?) 以下のようになるはずです。
| ||||
|
投稿日時: 2006-05-21 05:41
パラメータですか。なるほどです。すぐにでも試してみようと思います。
皆さんありがとうございます。 | ||||
|
投稿日時: 2006-05-21 08:02
関係ないところですが、何故プライベート メンバなんですか? (Private ... As ... と同じ) btnBook_Click でインスタンスを生成されているわけですが、 なんか全体的に整っていないような気がします。(修正作業中?) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1|2|3
次のページへ»