- - PR -
UPDATEステートメントの構文について
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-11-04 17:53
たぶん初歩的なところだと思うのですが、
いったい何処でつまずいているのか判らないのです。 OSはwindowsXP、Excelのバージョンは2003、 コードは VB.net2003 で作成しております。 http://support.microsoft.com/default.aspx?scid=kb;ja;316934 を参考にして作成したつもりです。 Escelファイルのシートをデータグリッドでwindowsフォーム上に表示しています 変更した行だけUpDateしたいのですが、エクセルのデータに反映されません。 更に、時間のセルの内容がなぜか日付表示(xx/mm/dd)されます (excelで開くと正しく表示されているんですが…) Excell シートの内容はこんな感じです no# 日付 時間 項目 場所 -------------------------------------- 1 X月XX日 X時XX分 ABCDE 第1工場 2 X月XX日 X時XX分 ABCDE 第3工場 3 X月XX日 X時XX分 ABCDE 第2工場 4 NULL NULL 今は以下のようなコードを書いています。 DataGrid には反映されますが元のExcelファイルは更新されません。 Dim CONNECTION_STRING As String = _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source="ほにゃほにゃ.xls;" & _ "Extended Properties=""Excel 8.0;HDR=Yes""" Dim Sheet As String = "SELECT * FROM [seet1$]" Dim RirekiConnect As New OleDbConnection(CONNECTION_STRING) Dim Adp As New OleDbDataAdapter(Sheet, RirekiConnect) Dim Dst As New DataSet Adp.Fill(Dst, "Myseet") Adp.UpdateCommand = New OleDbCommand( _ "UPDATE [散布基地$] SET 日付 = ?, 時刻=? WHERE No#= ?", RirekiConnect) Adp.UpdateCommand.Parameters.Add("@Hizuke", OleDbType.Char).SourceColumn = "日付" Adp.UpdateCommand.Parameters.Add("@jikoku", OleDbType.Char).SourceColumn = "時刻" Adp.UpdateCommand.Parameters.Add("@NO", OleDbType.Char) Dst.Tables(0).Rows(4)("日付") = "11月12日" Dst.Tables(0).Rows(4)("時刻") = "12時34分" Adp.Update(Dst, "Myseet") RirekiConnect.Close() Adp.Fill(Dst, "Myseet") これをtry-chach文の中に入れて、出力windowに出てくるエラーは以下のとおり。 ------------------------ ErrorCode : -2147217900 Source : Microsoft JET Database Engine Message : クエリ式 'No#= ?' の 日付の構文エラーです。 StackTrace: at System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping) at System.Data.Common.DbDataAdapter.Update(DataSet dataSet, String srcTable) --------------------------< Adp.UpdateCommand.Parameters.Add("@Hizuke", OleDbType.Date).SourceColumn = "日付" Adp.UpdateCommand.Parameters.Add("@jikoku", OleDbType.Char).SourceColumn = "時刻" にしても同じエラーが出力されます。 また、 Adp.UpdateCommand.Parameters.Add("@jikoku", OleDbType.Char).SourceColumn = "項目" Dst.Tables(0).Rows(4)("項目") = "ABCDEF" とすると、今度は「UPDATE ステートメントの構文エラーです。」と出てきます。 どなたか御教示ください・・・ どこから手をつけたらよいか、触りすぎて判らなくなってしまっています。 | ||||||||
|
投稿日時: 2004-11-04 18:23
こんにちは。
まずは確実に1つのフィールドずつやって行きましょう。 SourceColumn = "時刻" 項目名が"時間"なのに対してSourceColumn = "時刻" です。 それと WHERE No#= で項目名に"#"が入っているのが気になります。 SQL文が#で変になっていないか項目名から#を外してみてください。 | ||||||||
|
投稿日時: 2004-11-04 18:40
項目が"時間"なのに対してSourceColumn = "時刻"
すいません、Excelの項目は"時刻"です… WHERE No#= はエクセルの列名、コードともに"No"に訂正しました。 すると、エラーの出力が Message : パラメータ ?_3 にはデフォルト値はありません。 に変わりました。 | ||||||||
|
投稿日時: 2004-11-04 19:02
では、先ずWHERE条件をなくして全てのレコードを更新してみましょう。
更新するフィールドもString型の『場所』 にしてパラメータの設定で Adp.UpdateCommand.Parameters.Add("@Product", OleDbType.VarChar, 255, "場所") にしたらどうですか? | ||||||||
|
投稿日時: 2004-11-04 19:30
Adp.UpdateCommand.Parameters.Add("@NO", OleDbType.Char) ここで列が指定されていないのでは? Dst.Tables(0).Rows(4)("日付") = "11月12日" Dst.Tables(0).Rows(4)("時刻") = "12時34分" それとここで行をしていするとWHERE条件の意味がないのではないでしょうか | ||||||||
|
投稿日時: 2004-11-04 19:38
ごめんなさい、それは Adp.UpdateCommand = New OleDbCommand( "UPDATE [散布基地$] , RirekiConnect) でよろしいんでしょうか… これだと、「UPDATE ステートメントの構文エラーです。」と出てきます。 また、 SET 場所= ?, WHERE 場所= ?", Dst.Tables(0).Rows(4)("場所") = "ほにゃらら" にしてもUPDATE ステートメントの構文エラーです。」と出てきます。 DataGridには文字列が表示されるんですけどね…
…確かにRows()を指定するとおっしゃるとおりですね、 Adp.UpdateCommand.Parameters.Add("@NO", OleDbType.Char, 255, "NO") とすると同時実行処理違反になります。 今からRows()の指定を外してテストしてみます。 …最終的には日付がNull値のセルの行番号を取得して行指定したいのですが。 丁寧なご指摘有難うございます。 [ メッセージ編集済み 編集者: うえつき 編集日時 2004-11-04 19:42 ] [ メッセージ編集済み 編集者: うえつき 編集日時 2004-11-04 19:54 ] | ||||||||
|
投稿日時: 2004-11-04 19:46
作成されるSQLをチェックしましょう
UPDATE [散布基地$] SET 場所 = ? で、 Adp.UpdateCommand.Parameters.Add("@Product", OleDbType.VarChar, 255, "場所") です。WHERE条件はなしです。ですから他のパラメータの設定もコメントにして下さい | ||||||||
|
投稿日時: 2004-11-04 20:50
大変お手数おかけしています…
申し訳ないのですが、SQL文が作成される際にチェックするにはどのようにするのが適当かお教えください。 一応、以下のコードを書いてみました。 Dim CMD As New OleDbCommand CMD.Connection = RirekiConnect CMD.CommandText = "UPDATE [散布基地$] SET 場所 = ?" Adp.UpdateCommand = CMD Adp.UpdateCommand.Parameters.Add("@Product", OleDbType.VarChar, 255, "場所") Dst.Tables(0).Rows(3)("場所") = "ほにゃほにゃ" Adp.Update(Dst, "Myseet") Adp.Fill(Dst, "Myseet") とりあえず、UPDATE はできた模様で、Excelファイルに保存できました。 ただし、"場所"の列が全行"ほにゃほにゃ"になってしまいました。 次はWHERE条件を入れてUpdateStatementを作成してみます …でも、根本的に時刻のデータが日付のデータとして認識されるのには変わりないような。 コードを触りすぎて何がなんだか判らなくなっていましたけれど、 なんだか落ち着いてきました。 |
1|2|3
次のページへ»