#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
как сказал Эван.