2

私は現在、Excel VBA を使用して簡単な在庫システム アプリケーションを作成しています。入力を取得するためのユーザーフォームがあり、インポートデータをいくつかの Microsoft Access テーブルに保存したいと考えています。

ユーザーがEnterキーを押したときに、ユーザーフォームからデータを取得してアクセステーブルに入力しようとしています。このコードを実行すると、テーブル ID を使用して新しいレコードが作成されますが、インポートしようとしている 2 つのレコードは空白のままです。

    Public Sub AddDatabaseEntry()

      'Initialize all variables
      Dim cn As New ADODB.Connection
      Dim rs As New ADODB.Recordset
      Dim stDB As String, stSQL As String, stProvider As String
      Dim orderNum As String
      Dim orderDate As String

      orderNum = txtOrderNum
      orderDate = txtDate


      stDB = "Data Source= " & ThisWorkbook.Path & "\obsDatabase.accdb"
      stProvider = "Microsoft.ACE.OLEDB.12.0"


      'Opening connection to database
      With cn

          .ConnectionString = stDB
          .Provider = stProvider
          .Open

      End With

     'SQL Statement of what I want from the database
      stSQL = "INSERT INTO Orders (OrderNumber, OrderDate) " & _
              "Values ('" & orderNum & "', '" & orderDate & "')"

      Set rs = cn.Execute(stSQL)


      'Looping through the records I pulled and inserting the data into the comboBox

      cn.Close
      Set rs = Nothing
      Set cn = Nothing

    End Sub

    Private Sub btnAdd_Click()

      AddProduct
      AddDatabaseEntry

    End Sub
4

1 に答える 1

3

データ型が間違っていると思われます:

tSQL = "INSERT INTO Orders (OrderNumber, OrderDate) " & _
          "Values (" & orderNum & ", #" & orderDate & "#)"

注文番号は数値である可能性が高いと思われるため、引用符は使用せず、日付の区切り文字は引用符 (') ではなくハッシュ (#) です。

ほとんどの場合、日付を明確な形式にフォーマットする方が安全です。

"Values (" & orderNum & ", #" & Format(orderDate,"yyyy/mm/dd") & "#)"

レコードセットをアクション クエリに設定することはできないため、次のようになります。

cn.Execute stSQL

最後に、データ型の問題、文字列の問題などをパラメーターで保存できます。

stSQL = "INSERT INTO table1 (id, adate) " & _
          "Values (?, ?)"

cmd.ActiveConnection = cn
cmd.CommandText = stSQL
cmd.CommandType = adCmdText
cmd.Parameters.Append _
      cmd.CreateParameter("p1", adInteger, adParamInput, , OrderNum)
cmd.Parameters.Append _
      cmd.CreateParameter("p2", adDate, adParamInput, , OrderDate)

cmd.Execute

余談ですが、1 つのクエリで数値の範囲またはシートを Access テーブルに挿入できます。

INSERT INTO Table1 ( ADate ) 
SELECT SomeDate FROM [Excel 8.0;HDR=YES;DATABASE=Z:\Docs\Test.xls].[Sheet1$a1:a4]
于 2012-07-27T13:09:40.023 に答える