- - PR -
update文で悩んでます
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-02-16 12:05
こんにちは。現在データを更新する部分でエラー表示が出てしまいます。
inser文はきちんとできています。 エラー表示は「ERROR[HY000]ERROR:parser:parse at or near "再測理由" at character 112と出ます。 update文がおかしいと思うのですが… どなたかアドバイスをお願いします。 また不足な情報がありましたら、指摘をお願いします。 If Me.LabelSK.Text > "1" Then If Me.TextBox(i).Text <> "" Or Me.CheckWf(i).Checked = True Or Me.TextRsn.Text <> "" Then sqldata = "SELECT * FROM PC_TBL_実績再測 " & _ "WHERE ロットNo = '" & Me.TextLotNo.Text & "' " & _ "AND 測定回数 = '" & Me.LabelSK.Text & "'" dttbl = pgobj.pg_reader(sqldata, "get").Tables("get") intsql = intsql + 1 If dttbl.Rows.Count = 0 Then sqldatax(intsql) = "INSERT INTO PC_TBL_実績再測(ロットNo," & _ "測定回数," & _ "測定全数," & _ "再測条件," & _ "再測ウェハNo," & _ "再測理由," & _ "登録日時," & _ "更新者ID) " sqldatax(intsql) &= "VALUES('" & Me.TextLotNo.Text & "','" & _ Me.LabelSK.Text & "','" & _ Me.LabelWfNum.Text & "','" & _ Me.TextRsn.Text & "','{" For i = 0 To 24 If Me.CheckWf(i).Enabled = True And Me.CheckWf(i).Checked = True Then sqldatax(intsql) &= "1," '再測ウェハあり Else sqldatax(intsql) &= "0," '再測ウェハなし End If Next sqldatax(intsql) = Microsoft.VisualBasic.Left(sqldatax(intsql), CStr(sqldatax(intsql)).Length - 1) sqldatax(intsql) &= "}','{" For i = 0 To 24 If Me.TextBox(i).Enabled = True And Me.TextBox(i).Text <> "" Then sqldatax(intsql) &= Me.TextBox(i).Text sqldatax(intsql) &= "," Else sqldatax(intsql) &= "0," End If Next sqldatax(intsql) = Microsoft.VisualBasic.Left(sqldatax(intsql), CStr(sqldatax(intsql)).Length - 1) sqldatax(intsql) &= "}','" sqldatax(intsql) &= DateString.Replace("/", "-") & " " & TimeString & "','" sqldatax(intsql) &= strLoginID & "')" Else sqldatax(intsql) = "UPDATE PC_TBL_実績再測 SET 再測条件 = '" & Me.TextRsn.Text & "'," & _ "再測ウェハNo = '{" For i = 0 To 24 If Me.CheckWf(i).Enabled = True And Me.CheckWf(i).Checked = True Then sqldatax(intsql) &= "1," '再測ウェハあり Else sqldatax(intsql) &= "0," '再測ウェハなし End If Next sqldatax(intsql) = Microsoft.VisualBasic.Left(sqldatax(intsql), CStr(sqldatax(intsql)).Length - 1) sqldatax(intsql) &= "}' " & _ "再測理由 = '{" For i = 0 To 24 If Me.TextBox(i).Enabled = True And Me.TextBox(i).Text <> "" Then sqldatax(intsql) &= Me.TextBox(i).Text sqldatax(intsql) &= "," '理由有り Else sqldatax(intsql) &= "0," '理由なし End If Next sqldatax(intsql) = Microsoft.VisualBasic.Left(sqldatax(intsql), CStr(sqldatax(intsql)).Length - 1) sqldatax(intsql) &= "}' " & _ "登録日時 = '" & DateString.Replace("/", "-") & " " & TimeString & "'," & _ "更新者ID = '" & strLoginID & "' " & _ "WHERE ロットNo = '" & Me.TextLotNo.Text & "' " & _ "AND 測定回数 = '" & Me.LabelSK.Text & "'" End If End If End If | ||||||||||||
|
投稿日時: 2006-02-16 12:17
ぱっと見ただけで判断すると、
「再測理由=」の前にカンマがないのでエラーになっているのではないですか? 結合後のSQL文が原因で問題が起こっているので、ログなりに結合後のSQL分を出力させて みれば、どこがおかしいかを判断しやすいと思います。 | ||||||||||||
|
投稿日時: 2006-02-16 12:20
フツーに構文エラーがありますね。
SQL エディタなどで出力させた SQL 文を検証してください。 # パラメタを使って欲しいなぁ。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-02-16 13:06
お返事ありがとうございます。
uk様のご指摘のとおりコンマをいれみたのですが、 違ったエラーがでてきました。 エラー表示:ODBC escape convert error sqldatax(intsql) &= "}' " & _ "'再測理由 = '{" じゃんぬねっと様からご指摘を受けたsqlも間違いはないかと思われます。 | ||||||||||||
|
投稿日時: 2006-02-16 13:53
もそうですが、
も「登録日時 =」の前にカンマがないですね。(太字の部分) じゃんぬさんも仰ってますが、 セキュリティと可読性の観点からパラメタの使用をお勧めします。 実際、本人が解析できてないようですし。
それはカンマじゃなく、シングルクォーテーションです。 | ||||||||||||
|
投稿日時: 2006-02-16 14:10
「思われます」では、ダメなんですよ。(^-^;) 再度申し上げますが、構文の検証が可能な SQL エディタで貼り付けて実行してみてください。 (多分、それが 1 番の近道だと思うんです) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-02-16 15:35
単に最後のEndIFの後でsqldatax(intsql)の値をデバッガで見るなり
Console.WriteLine(sqldatax(intsql))で出力するなりしたものを SQLとして実行してみればどこが悪いか簡単に分かると思います。 | ||||||||||||
|
投稿日時: 2006-02-16 16:01
NAL-6295です。
SQLServerならば、SQLプロファイラで実際に実行されているSQL文を見ることが可能ですので、それで検証すると良いかもしれません。 #ちなみに、私もパラメータを利用した方が良いと思います。 |