プロが教える店舗&オフィスのセキュリティ対策術

入力フォームの内容をテーブルへ登録するFunctionプロシージャを作成したいのですが上手くいきません。
ご指導いただければと思います。宜しくお願いいたします。

Function WriteMyData() As Boolean
DoCmd.Hourglass True
On Error GoTo errHandler
WriteMyData = False

Set MycnnDst = Application.CurrentProject.Connection
Set MycnnrstDst = New ADODB.Recordset
MycnnrstDst.Open "SELECT 整理番号,発掘者,件名,発生日,曜日,時間," _
& "天候,温度,風,体調," _
& "作業分類,作業詳細," _
& "MAN,MACHINE,MEDIA,MANAGE," _
& "内容,影響,対策,重要度,対策完了,入力日 " _
& "FROM " & MyTableName & " WHERE 整理番号='" & Me.整理番号 & "'", MycnnDst, adOpenKeyset, adLockPessimistic, adCmdText

Select Case Me.MyDataMode
Case "追加"
If MycnnrstDst.EOF Then
MystrTableDst = "INSERT INTO " & MyTableName & " "
If IsNull(Me.対策完了) Then
MystrItemDst = "( 整理番号, 発掘者, 発生日, 件名, 曜日, 時間, " _
& "天候, 温度, 風, " _
& "体調, 作業分類, 作業詳細, " _
& "MAN, MACHINE, MEDIA, MANAGE, " _
& "内容, 影響, 対策, 重要度, 入力日, " ') "
MystrItemSrc = "VALUES ('" & Me.整理番号 & "','" & Me.発掘者 & "'," _
& "#" & Me.発生日 & "#,'" & Me.件名 & "','" & Me.曜日 & "','" & Me.時間 & "'," _
& "'" & Me.重要度 & "',#" & Me.入力日 & "#," _
& "'" & "') "
Else
MystrItemDst = "(整理番号,発掘者,件名,発生日,曜日,時間," _
& "天候,温度,風,体調," _
& "作業分類,作業詳細," _
& "MAN,MACHINE,MEDIA,MANAGE," _
& "内容,影響,対策,重要度,対策完了,入力日,図解ファイル,添付ファイル) "
MystrItemSrc = "VALUES ('" & Me.整理番号 & "','" & Me.発掘者 & "'," _
& "#" & Me.発生日 & "#,'" & Me.件名 & "','" & Me.曜日 & "','" & Me.時間 & "'," _
& "'" & Me.内容 & "','" & Me.影響 & "','" & Me.対策 & "'," _
& "'" & Me.重要度 & "',#" & Me.対策完了 & "#," & "#" & Me.入力日 & "#," _
& "'" & "') "
End If
MystrTableSrc = ""
MystrParmSrc = ";"
MystrSqlDst = MystrTableDst & MystrItemDst & MystrItemSrc & MystrParmSrc
MycnnrstDst.AddNew
MycnnDst.Execute MystrSqlDst, , adCmdText
Me.MyEdited = ""
End If
Case "修正"
MystrTableDst = "UPDATE " & MyTableName & " "
If IsNull(Me.対策完了) Then
MystrItemDst = "SET " _
& "整理番号 = '" & Me.整理番号 & "', " _
& "発掘者 = '" & Me.発掘者 & "', 発生日 = #" & Me.発生日 & "#, " _
& "件名 = '" & Me.件名 & "', 曜日 = '" & Me.曜日 & "', " _
& "入力日 = #" & Me.入力日 & "#, " & "' "
Else
MystrItemDst = "SET " _
& "整理番号 = '" & Me.整理番号 & "', " _
& "発掘者 = '" & Me.発掘者 & "', 発生日 = #" & Me.発生日 & "#, " _
& "件名 = '" & Me.件名 & "', 曜日 = '" & Me.曜日 & "', " _
& "対策完了 = #" & Me.対策完了 & "#, 入力日 = #" & Me.入力日 & "#, " & "' "
End If
MystrItemSrc = ""
MystrTableSrc = ""
MystrParmSrc = "WHERE (連番 = " & Me.連番 & ");"
MystrSqlDst = MystrTableDst & MystrItemDst & MystrItemSrc & MystrTableSrc & MystrParmSrc
MycnnDst.Execute MystrSqlDst
End Select
Forms!HiyariHattoIchiran2013.Requery
WriteMyData = True
ExitMe:
On Error Resume Next
On Error GoTo errHandler
DoEvents
DoCmd.Hourglass False

Exit Function

errHandler:
MsgBox "WriteMyData Error Number " & Err.Number & " : " & Err.Description
WriteMyData = False
Resume ExitMe
End Function

gooドクター

A 回答 (3件)

エラーについては、既出の3つの回答で解決されるかと思います。


私からはそのエラーが解消したとして・・・やっておきたい事を(他の部分も提示されていたので)
やりたい処理を整理されてみてはどうでしょう。

MycnnrstDst は、(「追加」時に)ある/ない判別にしか使ってない様ですね。
MycnnrstDst を得ているのなら、追加時には MycnnrstDst.AddNew してから
MycnnrstDst("整理番号") = Me.整理番号  等羅列して最後に Update すれば良いような気がします。

例)
MycnnrstDst.AddNew
MycnnrstDst("整理番号") = Me.整理番号
・・・
MycnnrstDst("重要度") = Me.重要度
If (Not IsNull(Me.対策完了)) Then
  MycnnrstDst("内容") = Me.内容
  ・・・
  MycnnrstDst("対策完了") = Me.対策完了
End If
・・・
MycnnrstDst.Update


そうすれば、INSERT文に記述しているフィールド部分と VALUES 部分の個数/順があっていない
等、間違いがなくなるような気がします。

If IsNull(Me.対策完了) Then 側では、天候, 温度, 風,・・・ に対する VALUES が無さそう
その Else 側では、上記に加え、件名,発生日が "#" & Me.発生日 & "#,'" & Me.件名 で逆 とか

また、「追加」の最後の方で MycnnrstDst.AddNew してますが、この後どうなるのでしょう
変数の宣言部分( Dim なんチャラ )がないので、他の処理で使っているのかもしれませんが・・・
MycnnrstDst.Close しないまま、また MycnnrstDst.Open するとエラーになったような
(実際には Set MycnnrstDst = New ADODB.Recordset しているので大丈夫かと思いますが、Close は必要な気がします)

「修正」時の方では、
> Me.入力日 & "#, " & "' "
ここは、Me.入力日 & "# " で良さそうなんですが
    • good
    • 0
この回答へのお礼

質問以外の部分についてもご教授いただき有難うございます。

全体的に見直して整理して行きたいと思います。

お礼日時:2013/07/10 11:04

Dim sql As String


としておいて

sql = "SELECT 整理番号,発掘者,件名,発生日,曜日,時間," _
& "天候,温度,風,体調," _
& "作業分類,作業詳細," _
& "MAN,MACHINE,MEDIA,MANAGE," _
& "内容,影響,対策,重要度,対策完了,入力日 " _
& "FROM " & MyTableName & " WHERE 整理番号='" & Me.整理番号 & "'"
Debug.Print sql
MycnnrstDst.Open sql, MycnnDst, adOpenKeyset, adLockPessimistic, adCmdText

でSQL文が正しいか確認したらどうなりますか?
    • good
    • 0
この回答へのお礼

確認方法をご教授いただき有難うございました。

色々やり過ぎて原因は分かりませんでしたが、エラーは出なくなりました。

お礼日時:2013/07/10 11:02

DBアクセス?でしょうか。


詳しくは分からないのですが、上から12行目あたりに、

& "FROM " & MyTableName &

がありますが、MyTableName  というのはどこかで定義されていますか?
    • good
    • 0
この回答へのお礼

どこまで投稿してらよいか分からず、必要な情報が不足しており申し訳ありません。他で定義されております。

お礼日時:2013/07/10 11:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング