1

Access でコーディングを開始し、テーブルに行を追加する関数を作成しようとしましたが、これは機能しません。

「FirstName」と「LastName」の 2 つの列と、次のコードを起動するボタンを含む単純なテーブル (Table1) を作成しました。

Private Sub Command0_Click()
    AppendRow "Table1", "John", "Doe"
End Sub

AppendRow の場所:

Function AppendRow(toTableName As String, firstName As String, lastName As String) As Boolean
   ' Returns True on success, false otherwise
   ' USAGE: AppendRow "toTableName", "firstName", "lastName"

   On Error GoTo errhandler
   Dim strSql As String

   'Create the SQL string
   strSql = "INSERT INTO " & toTableName & " (FirstName, LastName) " & _
        "VALUES ('" & firstName & "', '" & lastName & "');"


   'Print the SQL so we can paste into the query build if there are errors
   Debug.Print strSql
   MsgBox strSql

   'Run the SQL Query
   CurrentDb.Execute strSql

   'If no errors return true
   AppendRow = True

ExitHere:
   Exit Function

errhandler:
   'There is an error return false
   AppendRow = False
   With Err
      MsgBox "Error " & .Number & vbCrLf & .Description, vbOKOnly Or vbCritical, "AppendTable"
   End With
   Resume ExitHere
End Function

SQL文字列は次のようになります

INSERT INTO Table1 (FirstName, LastName) VALUES ('John', 'Doe')

編集:欠落している引用符を追加しました。

4

2 に答える 2

2

挿入しようとしているテキスト値を引用しているが、行が挿入されず、エラーメッセージが表示されないことを報告しました。それがなぜそうなのか理解できません。この簡単な手順を提供して、何かが機能するかどうかを確認します。

Public Sub AppendRow(ByVal toTableName As String, _
        ByVal pFirstName As String, _
        ByVal pLastName As String)
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    '* ensure SetWarnings is not off *'
    DoCmd.SetWarnings True
    Set db = CurrentDb
    Set rs = db.OpenRecordset(toTableName, dbOpenTable, dbAppendOnly)
    With rs
        .AddNew
        !firstName = pFirstName
        !lastName = pLastName
        .Update
        .Close
    End With
    Set rs = Nothing
    Set db = Nothing
End Sub

これはテストのみを目的としているため、エラー処理は含めませんでした。関数を呼び出すコードで関数の戻り値を使用していないことに気付いたので、関数ではなくサブルーチンにしました。

これでうまくいかない場合は、受け取ったエラーメッセージと、その手順のどの行でエラーが発生したかをお知らせください。

于 2012-09-17T17:30:24.037 に答える
1

HansUp のコードは、OpenRecordSet 関数呼び出しから dbAppendOnly オプションを削除するまで機能しませんでした。MS ヘルプ ドキュメントは、それがテーブルセット レコードセットではなく、ダイナセット レコードセットに対してのみ有効であることを暗示しています。「Set rs = db.OpenRecordset(toTableName, dbOpenTable)」に変更すると、機能しました。

しかし、彼のコードは非常に役に立ち、とても感謝しています。私は自分の .Execute "INSERT "...-type コードを機能させることができずに何度も何度も行っていました。私はそれで何が起こっていたのかわかりません。1回効いてマイナーチェンジしたのですが… 悪化して血圧がピークに達したことが関係していたのかもしれません。

ところで、@ymail.com は、自動化されたアドレス チェッカーが何と言おうと、有効な電子メール ドメインです。

于 2013-11-06T13:25:31.060 に答える