Vba для доступа к записи Вставить выпуск - PullRequest
1 голос
/ 28 мая 2010

Я хочу вставить значения в таблицу доступа с помощью элемента управления VBA, если для этого есть простой способ. я пытаюсь этот код, но он не работает должным образом, если я запускаю этот код, он выдает ошибку «переменная не установлена», может кто-нибудь мне помочь. заранее спасибо

Private Sub CommandButton1_Click()
Dim cn As ADODB.Connection
    Dim strSql As String
    Dim lngKt As Long
    Dim dbConnectStr As String
    Dim Catalog As Object
    Dim cnt As ADODB.Connection
    Dim dbPath As String

    Dim myRecordset As New ADODB.Recordset
    Dim SQL As String, SQL2 As String

    dbPath = "table.accdb"
    dbConnectStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbPath & ";"

   SQL = "INSERT INTO Jun_pre (ProductName,DESCRIPTION,SKU,MT,(mt),MRP,Remark,no_of_units_in_a_case) VALUES (""aa"",""bb"",""test"",""testUnit"",""1"",""2"",,""3"",,""4"");"

        With cnt
        .Open dbConnectStr 'some other string was there
        .Execute (SQL)
        .Close
    End With
End Sub

1 Ответ

5 голосов
/ 28 мая 2010

Вы работаете в Access, поэтому лучше использовать DAO, как он есть. Рассмотрим:

Private Sub CommandButton1_Click()
Dim sSQL As String

sSQL = "INSERT INTO Jun_pre " _
     & "(ProductName,DESCRIPTION,SKU,MT,(mt),MRP,Remark," _
     & "no_of_units_in_a_case) VALUES "
     & "(""aa"",""bb"",""test"",""testUnit"",1,2,Null,3,Null,4);"

CurrentDB.Execute sSQL, dbFailOnError
End Sub

Против:

Private Sub CommandButton1_Click()
    Dim cn As New ADODB.Connection
    Dim strSql As String
    Dim lngKt As Long
    Dim dbConnectStr As String
    Dim Catalog As Object
    Dim cnt As ADODB.Connection
    Dim dbPath As String

    ''You do not need a recordset to execute an SQL statement
    ''Dim myRecordset As New ADODB.Recordset
    Dim SQL As String, SQL2 As String

    dbPath = "table.accdb"
    dbConnectStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbPath & ";"

    strSQL = "INSERT INTO Jun_pre " _
           & "(ProductName,DESCRIPTION,SKU,MT,(mt),MRP,Remark," _
           & "no_of_units_in_a_case) VALUES "
           & "(""aa"",""bb"",""test"",""testUnit"",1,2,Null,3,Null,4);"

    With cnt
        .Open dbConnectStr 'some other string was there
        .Execute (strSQL)
        .Close
    End With
End Sub

Если ваш пример ADO вставляется в текущую базу данных, его можно значительно упростить.

Обратите внимание, что:

  • Маловероятно, что ваш стол будет принять строку нулевой длины (,,), Null is наверное лучше.
  • Я очень сомневаюсь, что 2 входит в текстовое поле, поэтому оно не нуждается в кавычках.
  • SQL - зарезервированное слово для VBA и не следует использовать для именования переменных.
  • Нельзя использовать SQL инъекция с помощью Access, хотя может быть трудным.
  • Если вы дадите вам контроль Собственные имена теперь, это спасет горе в будущем
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...