У меня есть приложение Access (Access Front-end, SQL backend с использованием связанных таблиц), и у меня возникла эта проблема: пользователь вводит номер детали. Затем они входят в количестве. В новой бизнес-логике c говорится, что я должен сравнить этот номер детали с таблицей, чтобы узнать, цитировали ли мы его клиенту в течение прошлого года. Если у нас есть, мы можем процитировать это сейчас; если нет, мы должны отклонить часть. Когда программа была изначально написана, они использовали формат таблицы данных, чтобы позволить пользователю скопировать из Excel список деталей, вставить их в таблицу данных, а затем скопировать и вставить в список количеств. Как только количество введено / вставлено для строки, эта строка обрабатывается. Если я вручную ввожу номер детали, то количество, необходимый код проверяет, был ли номер детали процитирован в течение последнего года, и все ли хорошо. Но если я копирую и вставляю в список частей, первый раз в процессе он работает нормально; но каждый второй раз терпит неудачу. Вот базовый c код:
Dim cn21 As ADODB.Connection
Set cn21 = New ADODB.Connection
Dim strsql21 As String
Dim cm21 As New ADODB.Command
Dim rs21 As New ADODB.Recordset
' gblODBCString = "ODBC;Description=PartsPortalsSql;DRIVER=SQL Server;SERVER=db-TEST-partsptl-primary;Trusted_Connection=Yes;APP=Microsoft Office 2010;DATABASE=PartsPortalSQL;"
cn21.Open gblODBCString
cm21.ActiveConnection = cn21
' All I want to know is how many records there are for this part within the last year...
strsql21 = "Select count(*) from tblQuoteDetail tqd INNER JOIN tblQuotes tq on tqd.quoteid = tq.quoteid WHERE " _
& " tqd.qdetailpartno = '" & Me.QDetailPartNo & "' AND tq.quotesentdate >= '" & OneYearAgo & "' AND tqd.qdetailunitprice > 0"
cm21.CommandText = strsql21
Set rs21 = New ADODB.Recordset
Set rs21 = cn21.Execute(strsql21, varparams, adCmdText)
If rs21(0) = 0 Then ' nothing found! can't be escalated...
blah blah blah...
end if
' done with this part... clean up
Set cm21 = Nothing
rs21.Close
Set rs21 = Nothing
Set cn21 = Nothing
Затем он вернется сюда, когда перейдет к следующей части ... Но если я сделаю это вручную, он будет работать нормально. Но когда он проходит через l oop частей, он попадает в строку: Set rs21 = cn21.Execute (strsql21, varparams, adcmdtext) и занимает около 30 секунд для «обработки / тайм-аута», а затем rs21 (0) возвращает «Ошибка времени выполнения '3265': элемент не может быть найден в коллекции, соответствующей запрошенному имени или порядковому номеру."
Я проверил, что каждое поле в запросе sql заполнено правильно , Я никогда не сталкивался с этой проблемой раньше.
Другие вещи, которые я пытался - использовать DAO вместо ADODB ... не повезло ...
Если у кого-то есть предложения, я все уши ... кроме как взорвать его ... Я нахожусь в стадии тестирования замены версии, которая не использует эту функцию копирования / вставки. Но до выпуска еще месяц или два.
Спасибо
Access 2016, Связанные таблицы с Microsoft SQL Server 2016 Я полагаю ... Windows 10 64 bit Также работает на VPN, подключенная к VDI.