Ошибка: Открытие набора записей с помощью инструкции SQL MSAccess

#sql #sql-server #ms-access #vba

#sql #sql-сервер #ms-access #vba

Вопрос:

моя цель — проверить таблицу на наличие записи, и если эта конкретная запись существует, ничего не делать, иначе сделайте какую-нибудь вставку записи. Я написал следующую инструкцию SQL, чтобы попытаться извлечь конкретную запись

 Update: Dim strSQL2 As String
        Dim objRecordset As ADODB.Recordset
Dim BatchID As Long
Dim instrumentName As String
strSQL2 = "SELECT * FROM tblInstrumentInterfacelog " amp; _
          "WHERE BatchID = " amp; BatchID amp; " " amp; _
          "AND InstrumentName = '" amp; InstrumentName amp; "'" 
Set objRecordset = CurrentDb.OpenRecordset(strSQL2, dbOpenDynaset, dbSeeChanges)
If objRecordset.RecordCount > 0 Then
Else
"logic to insert record"
End if 
  

Я получаю ошибку несоответствия типов в строке

 Set objRecordset = CurrentDb.OpenRecordset(strSQL2, dbOpenDynaset, dbSeeChanges)
  

Схема для tblInstrumentInterfaceLog является:

  • [InstrumentInterfaceLogID] [int] ИДЕНТИФИКАТОР (1,1) НЕ РАВЕН НУЛЮ
  • [ИмяинструмЕнта] nvarchar НЕ РАВЕН НУЛЮ
  • [BatchID] [int] NOT NULL
  • [Имя файла] nvarchar НЕ РАВЕН НУЛЮ

Мне нужна помощь только по предоставленному коду, почему происходит это несоответствие типов?

Комментарии:

1. Где вы объявляете переменную objRecordset?

2. добавлено больше объявлений

3. См. раздел открытие набора записей classanytime.com/mis333k/sjdaoadorecordsets.html

4. Где вы открываете соединение с SQL? Кроме того, вы должны перечислить поля вместо использования SELECT * и вы должны проверить наличие пустого набора записей с помощью IF objRecordset.EOF .

Ответ №1:

Я всегда добивался успеха, просто используя Set objRecordset = CurrentDB.OpenRecordset(strSQL2)

Не могли бы вы опубликовать конкретное сообщение об ошибке?

Не могли бы вы попробовать использовать DAO.recordset?

Ответ №2:

Из того, что вы опубликовали, две переменные в вашем sql statment фактически не установлены ни на что. Попробуйте распечатать strSQL2 в msgbox и убедитесь, что это допустимый SQL.

Также попробуйте заменить Dim objRecordset As ADODB.Recordset на Dim objRecordset As Recordset .

Ответ №3:

Заменить

 Dim objRecordset As ADODB.Recordset
  

С

 Dim objRecordset As DAO.Recordset
  

как сказал Эван.