- PR -

update文で悩んでます

投稿者投稿内容
JT
常連さん
会議室デビュー日: 2005/10/20
投稿数: 27
投稿日時: 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

uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2006-02-16 12:17
ぱっと見ただけで判断すると、

引用:

sqldatax(intsql) &= "}' " & _
"再測理由 = '{"


「再測理由=」の前にカンマがないのでエラーになっているのではないですか?
結合後のSQL文が原因で問題が起こっているので、ログなりに結合後のSQL分を出力させて
みれば、どこがおかしいかを判断しやすいと思います。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-16 12:20
フツーに構文エラーがありますね。
SQL エディタなどで出力させた SQL 文を検証してください。

# パラメタを使って欲しいなぁ。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
JT
常連さん
会議室デビュー日: 2005/10/20
投稿数: 27
投稿日時: 2006-02-16 13:06
お返事ありがとうございます。
uk様のご指摘のとおりコンマをいれみたのですが、
違ったエラーがでてきました。
エラー表示:ODBC escape convert error
sqldatax(intsql) &= "}' " & _
"'再測理由 = '{"

じゃんぬねっと様からご指摘を受けたsqlも間違いはないかと思われます。
うにくま
ベテラン
会議室デビュー日: 2005/11/05
投稿数: 82
投稿日時: 2006-02-16 13:53
引用:

sqldatax(intsql) &= "}' , " & _
"再測理由 = '{"


もそうですが、
引用:

sqldatax(intsql) &= "}' , " & _
"登録日時 = '" & DateString.Replace("/", "-") & " " & TimeString & "'," & _


も「登録日時 =」の前にカンマがないですね。(太字の部分)

じゃんぬさんも仰ってますが、
セキュリティと可読性の観点からパラメタの使用をお勧めします。
実際、本人が解析できてないようですし。


引用:

エラー表示:ODBC escape convert error
sqldatax(intsql) &= "}' " & _
"'再測理由 = '{"


それはカンマじゃなく、シングルクォーテーションです。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-16 14:10
引用:

JTさんの書き込み (2006-02-16 13:06) より:

じゃんぬねっと様からご指摘を受けたsqlも間違いはないかと思われます。


「思われます」では、ダメなんですよ。(^-^;)
再度申し上げますが、構文の検証が可能な SQL エディタで貼り付けて実行してみてください。
(多分、それが 1 番の近道だと思うんです)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
NYRL
ベテラン
会議室デビュー日: 2003/07/14
投稿数: 90
投稿日時: 2006-02-16 15:35
単に最後のEndIFの後でsqldatax(intsql)の値をデバッガで見るなり
Console.WriteLine(sqldatax(intsql))で出力するなりしたものを
SQLとして実行してみればどこが悪いか簡単に分かると思います。

NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2006-02-16 16:01
NAL-6295です。

SQLServerならば、SQLプロファイラで実際に実行されているSQL文を見ることが可能ですので、それで検証すると良いかもしれません。

#ちなみに、私もパラメータを利用した方が良いと思います。

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