Ошибка 3709 access

Icon Ex Номер ошибки: Ошибка 3709
Название ошибки: Microsoft Access Error 3709
Описание ошибки: The search key was not found in any record.
Разработчик: Microsoft Corporation
Программное обеспечение: Microsoft Access
Относится к: Windows XP, Vista, 7, 8, 10, 11

Оценка «Microsoft Access Error 3709»

«Microsoft Access Error 3709» обычно называется формой «ошибки времени выполнения». Программисты работают через различные уровни отладки, пытаясь убедиться, что Microsoft Access как можно ближе к безошибочным. Поскольку разработчики программного обеспечения пытаются предотвратить это, некоторые незначительные ошибки, такие как ошибка 3709, возможно, не были найдены на этом этапе.

После первоначального выпуска пользователи Microsoft Access могут столкнуться с сообщением «The search key was not found in any record.» во время запуска программы. Когда это происходит, конечные пользователи программного обеспечения могут сообщить Microsoft Corporation о существовании ошибки 3709 ошибок. Затем Microsoft Corporation исправляет эти дефектные записи кода и сделает обновление доступным для загрузки. Чтобы исправить такие ошибки 3709 ошибки, устанавливаемое обновление программного обеспечения будет выпущено от поставщика программного обеспечения.

Почему и когда срабатывает ошибка времени выполнения 3709?

В первый раз, когда вы можете столкнуться с ошибкой среды выполнения Microsoft Access обычно с «Microsoft Access Error 3709» при запуске программы. Следующие три наиболее значимые причины ошибок выполнения ошибки 3709 включают в себя:

Ошибка 3709 Crash — Номер ошибки вызовет блокировка системы компьютера, препятствуя использованию программы. Если Microsoft Access не может обработать данный ввод, или он не может получить требуемый вывод, это обычно происходит.

Утечка памяти «Microsoft Access Error 3709» — ошибка 3709 приводит к постоянной утечке памяти Microsoft Access. Потребление памяти напрямую пропорционально загрузке ЦП. Возможные провокации включают отсутствие девыделения памяти и ссылку на плохой код, такой как бесконечные циклы.

Ошибка 3709 Logic Error — логическая ошибка Microsoft Access возникает, когда она производит неправильный вывод, несмотря на то, что пользователь предоставляет правильный ввод. Это видно, когда исходный код Microsoft Corporation включает дефект в анализе входных данных.

В большинстве случаев проблемы с файлами Microsoft Access Error 3709 связаны с отсутствием или повреждением файла связанного Microsoft Access вредоносным ПО или вирусом. Как правило, решить проблему можно заменой файла Microsoft Corporation. Если ошибка Microsoft Access Error 3709 возникла в результате его удаления по причине заражения вредоносным ПО, мы рекомендуем запустить сканирование реестра, чтобы очистить все недействительные ссылки на пути к файлам, созданные вредоносной программой.

Распространенные проблемы Microsoft Access Error 3709

Частичный список ошибок Microsoft Access Error 3709 Microsoft Access:

  • «Ошибка в приложении: Microsoft Access Error 3709»
  • «Microsoft Access Error 3709 не является приложением Win32.»
  • «Microsoft Access Error 3709 столкнулся с проблемой и закроется. «
  • «Microsoft Access Error 3709 не может быть найден. «
  • «Microsoft Access Error 3709 не может быть найден. «
  • «Ошибка запуска программы: Microsoft Access Error 3709.»
  • «Файл Microsoft Access Error 3709 не запущен.»
  • «Microsoft Access Error 3709 выйти. «
  • «Ошибка пути программного обеспечения: Microsoft Access Error 3709. «

Эти сообщения об ошибках Microsoft Corporation могут появляться во время установки программы, в то время как программа, связанная с Microsoft Access Error 3709 (например, Microsoft Access) работает, во время запуска или завершения работы Windows, или даже во время установки операционной системы Windows. Запись ошибок Microsoft Access Error 3709 внутри Microsoft Access имеет решающее значение для обнаружения неисправностей электронной Windows и ретрансляции обратно в Microsoft Corporation для параметров ремонта.

Создатели Microsoft Access Error 3709 Трудности

Проблемы Microsoft Access и Microsoft Access Error 3709 возникают из отсутствующих или поврежденных файлов, недействительных записей реестра Windows и вредоносных инфекций.

В частности, проблемы Microsoft Access Error 3709 возникают через:

  • Недопустимая или поврежденная запись Microsoft Access Error 3709.
  • Зазаражение вредоносными программами повредил файл Microsoft Access Error 3709.
  • Другая программа злонамеренно или по ошибке удалила файлы, связанные с Microsoft Access Error 3709.
  • Microsoft Access Error 3709 конфликтует с другой программой (общим файлом).
  • Microsoft Access/Microsoft Access Error 3709 поврежден от неполной загрузки или установки.

Продукт Solvusoft

Загрузка
WinThruster 2023 — Проверьте свой компьютер на наличие ошибок.

Совместима с Windows 2000, XP, Vista, 7, 8, 10 и 11

Установить необязательные продукты — WinThruster (Solvusoft) | Лицензия | Политика защиты личных сведений | Условия | Удаление

A runtime error of 3709 keeps popping up when I run this part of the program. Does anyone know what I can do to fix it?

Public cn As New ADODB.Connection

Public rs As New ADODB.Recordset

Public CustomerID As Integer

Public CustFirstName As String

Public CustLastName As String


Sub GetCustomerList()

    Dim strSQL As String
    Dim Customers As Variant

    ' Import customer info and use it to populate the list box.
    ' After frmcustomers is unloaded, we will know the CustomerID
    ' and Customer Name of the selected order.

    strSQL = "SELECT CustomerID, CustFirstName, CustLastName FROM Customers"
    rs.Open strSQL, cn

    frmCustomers.Show

    rs.Close
End Sub

Thanks,

JM

Mitch Wheat's user avatar

Mitch Wheat

296k44 gold badges466 silver badges542 bronze badges

asked Nov 28, 2009 at 3:48

JM.'s user avatar

I got the same error code when trying to edit one specific record. It was a regular record, with no data or validation inconsistency.

Apparently this was a random data corruption issue, the 1st I believe to have gotten after some years working with MS Access (just for statistical reference, not a pro or con statement!)

Problem solved by running Compact And Repair routine.

answered Apr 27, 2017 at 15:04

DBS's user avatar

DBSDBS

1912 silver badges14 bronze badges

Solved,
I got this error «3709 the search key was not found in any record», while using this code :

DoCmd.CopyObject , "Data_OldCurrentMemberDetails", acTable, "Data_CurrentMemberDetails"

Leter what I leant is it was an issue with the name of my file which contained «[, ]» (square brackets).

To avoid these kind of errors keep your file names in plain text i.e Do not include «[, ], %, …»

answered Aug 10, 2017 at 6:43

Shrishail's user avatar

From the error you are reporting, it would seem that at the point you call GetCustomerList() the connection is not open.

answered Nov 28, 2009 at 4:25

Mitch Wheat's user avatar

Mitch WheatMitch Wheat

296k44 gold badges466 silver badges542 bronze badges

In a database, when you create a Memo field that includes an index or when it creates a field name that contains the text automatically indexed, it can not write to the text field that includes more than 3450 characters or so. When you try to write more text in the field or modify existing data, receive an error message similar to the following Exception 3709

http://support.microsoft.com/kb/302525

answered Dec 20, 2012 at 18:40

Jorgesys's user avatar

JorgesysJorgesys

124k23 gold badges334 silver badges268 bronze badges

Just for completeness, I get error 3709 (the search key was not found in any record) when trying to import an Excel spreadsheet that has a leading or trailing space in a column header. Remove that and it goes away. This is in Access 2013.

answered Aug 19, 2015 at 16:33

Brian Burns's user avatar

Brian BurnsBrian Burns

20.6k9 gold badges83 silver badges78 bronze badges

A runtime error of 3709 keeps popping up when I run this part of the program. Does anyone know what I can do to fix it?

Public cn As New ADODB.Connection

Public rs As New ADODB.Recordset

Public CustomerID As Integer

Public CustFirstName As String

Public CustLastName As String


Sub GetCustomerList()

    Dim strSQL As String
    Dim Customers As Variant

    ' Import customer info and use it to populate the list box.
    ' After frmcustomers is unloaded, we will know the CustomerID
    ' and Customer Name of the selected order.

    strSQL = "SELECT CustomerID, CustFirstName, CustLastName FROM Customers"
    rs.Open strSQL, cn

    frmCustomers.Show

    rs.Close
End Sub

Thanks,

JM

Mitch Wheat's user avatar

Mitch Wheat

294k43 gold badges465 silver badges540 bronze badges

asked Nov 28, 2009 at 3:48

JM.'s user avatar

I got the same error code when trying to edit one specific record. It was a regular record, with no data or validation inconsistency.

Apparently this was a random data corruption issue, the 1st I believe to have gotten after some years working with MS Access (just for statistical reference, not a pro or con statement!)

Problem solved by running Compact And Repair routine.

answered Apr 27, 2017 at 15:04

DBS's user avatar

DBSDBS

1912 silver badges14 bronze badges

Solved,
I got this error «3709 the search key was not found in any record», while using this code :

DoCmd.CopyObject , "Data_OldCurrentMemberDetails", acTable, "Data_CurrentMemberDetails"

Leter what I leant is it was an issue with the name of my file which contained «[, ]» (square brackets).

To avoid these kind of errors keep your file names in plain text i.e Do not include «[, ], %, …»

answered Aug 10, 2017 at 6:43

Shrishail's user avatar

From the error you are reporting, it would seem that at the point you call GetCustomerList() the connection is not open.

answered Nov 28, 2009 at 4:25

Mitch Wheat's user avatar

Mitch WheatMitch Wheat

294k43 gold badges465 silver badges540 bronze badges

In a database, when you create a Memo field that includes an index or when it creates a field name that contains the text automatically indexed, it can not write to the text field that includes more than 3450 characters or so. When you try to write more text in the field or modify existing data, receive an error message similar to the following Exception 3709

http://support.microsoft.com/kb/302525

answered Dec 20, 2012 at 18:40

Jorgesys's user avatar

JorgesysJorgesys

123k23 gold badges329 silver badges264 bronze badges

Just for completeness, I get error 3709 (the search key was not found in any record) when trying to import an Excel spreadsheet that has a leading or trailing space in a column header. Remove that and it goes away. This is in Access 2013.

answered Aug 19, 2015 at 16:33

Brian Burns's user avatar

Brian BurnsBrian Burns

19.9k8 gold badges82 silver badges76 bronze badges

Какую именно запись в таблице «Лекарства» вы меняете?

Тут столько проблем, я даже не знаю с чего начать.

Добавлено через 19 минут
Начну, пожалуй, со способа, которым вы заполняете Combobox.
По моему опыту, наиболее оптимальным является создание 2-х полей в Combobox (свойство ColumnCount), одно из которых делается нулевой длины (свойство ColumnWidth, которое должно при этом выглядеть примерно вот так: «0;100», т.е. первый столбец длины 0 точек, второй — длины 100 точек). Обратите при этом внимание на свойство BoundColumn, которое определяет порядковый номер столбца начиная с 1, из которого берется значение для всего Combobox. Если вы будете передавать значение в Combobox, или извлекать его, программа по умолчанию будет «смотреть» именно на этот столбец.

При этом заполнить Combobox, имеющий 2 значения, из Recordset можно следующим образом:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Sub test()
    Dim oRS As Recordset        'Результат запроса
    Dim sSQL As String          'Текст запроса
    Dim i As Long               'Счетчик
    
    'Получаем данные из базы
    sSQL = "SELECT [Код],[Название группы] FROM Группа"
    Set oRS = Db.OpenRecordset(sSQL, dbOpenForwardOnly)
    
    'Читаем данные и записываем их в Combobox
    With UserForm2.ComboBox1
        Do Until oRS.EOF 'Обходим Recordset с первой до последней записи
            .AddItem                        'Добавляем запись в Combobox
            .Column(0, i) = oRS("Код")      'NB: в VBA нумерация колонок начиначся с 0, а не 1
            .Column(1, i) = oRS("Группа")
            i = i + 1
            oRS.MoveNext
        Loop
    End With
    
    'Закрываем запрос
    oRS.Close
    Set oRS = Nothing
End Sub

Добавлено через 18 минут
Далее, по вашему способу изменять базу данных. На мой взгляд, использование метода Edit сопряжено с такой массой проблем и ограничений, что является банально нецелесообразным. Намного разумнее использовать для изменения SQL-запросы UPDATE и INSERT.

Например, вам надо поменять некую запись в таблице «Лекарства», добавив в поле «Фармокологическая группа» значение из Combobox, соответствующее Коду записи в таблице Группа. Предположим, вы каким-то образом уже получили Код этой записи. Он у меня в коде будет представлен переменной «PharmID».
Так как мы уже выгрузили в скрытую колонку Combobox Коды соответствующих записей, нам не нужен отдельный запрос, для получения Кода нужной нам записи из БД, достаточно просто получить значение колонки 0:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub Update_Pharm()
    Dim sSQL As String
    Dim lGroupID As Long
    Dim lPharmID As Long
    
    'Ïîëó÷àåì Êîä òàáëèöû Ëåêàðñòâà (íåîáõîäèìî ñàìîìó ñîçäàòü ìåõàíèçì ïîëó÷åíèÿ
    lPharmID = 0
    'Ïîëó÷àåì Êîä òàáëèöû Ãðóïïà
    lGroupID = UserForm2.ComboBox1.Column(0)
    'Ôîðìèðóåì çàïðîñ íà îáíîâëåíèå òàáëèöû Ëåêàðñòâà
    'NB: íèêîãäà íå çàáûâàéòå â çàïðîñå UPDATE ÷àñòü WHERE,
    'âûáèðàþùóþ ðåäàêòèðóåìóþ çàïèñü. Èíà÷å áóäóò îáíîâëåíû âñå çàïèñè â òàáëèöå
    sSQL = "UPDATE Ëåêàðñòâà SET [Ôàðìîêîëîãè÷åñêàÿ ãðóïïà]=" & lGroupID & " WHERE Êîä=" & lPharmID
    'Выполяем запрос
    db.Execute sSQL
End Sub

I’ve been logging user errors and noticed that 3709 has cropped up a couple of times on a particular form. What’s odd is that the bulk of the procs for the form simply close the form or change display-related properties of controls on the form. We’re running
a SQLServer backend and I haven’t detected any issues yet.

The error is being trapped by the Form_AfterUpdate Event

Private Sub Form_AfterUpdate()

On Error GoTo Err_Form_AfterUpdate

    If isLoaded(gCallingForm) Then Forms(gCallingForm).Refresh
    Call lockFields

   
Exit_Form_AfterUpdate:
    Exit Sub

Err_Form_AfterUpdate:
    MsgBox getDefaultErrorMessage(Me.Name, «Form_AfterUpdate», Err.Number, Err.Description), vbCritical
    Resume Exit_Form_AfterUpdate

End Sub

Private Sub cmdAddTrailer_Click()

On Error GoTo Err_cmdAddTrailer_Click

   
    If Me.Dirty Then Me.Dirty = False
    DoCmd.RunCommand acCmdRecordsGoToNew

   
Exit_cmdAddTrailer_Click:
    Exit Sub

Err_cmdAddTrailer_Click:
    MsgBox getDefaultErrorMessage(Me.Name, «cmdAddTrailer_Click», Err.Number, Err.Description), vbCritical
    Resume Exit_cmdAddTrailer_Click

End Sub

Private Sub lockFields()

On Error GoTo Err_lockFields

   
    If Me.NewRecord Then
        With Me.txtTrailerDOTNumber
            .BackColor = RGB(255, 255, 255)
            .Locked = False
            .TabStop = True
            .SetFocus
        End With
    Else
        Me.txtVendorCrossReference.SetFocus
        With Me.txtTrailerDOTNumber
            .BackColor = -2147483633
            .Locked = True
            .TabStop = False
        End With
    End If

   
    Me.TabCtlTrailerInformation.Pages(«pg2_TrailerComments»).Visible = Not Me.NewRecord

   
Exit_lockFields:
    Exit Sub

Err_lockFields:
    MsgBox getDefaultErrorMessage(Me.Name, «lockFields», Err.Number, Err.Description), vbCritical
    Resume Exit_lockFields

   
End Sub


David H

run time error 3709

PYCTAM

Дата: Вторник, 01.07.2014, 09:46 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 24


Репутация:

0

±

Замечаний:
60% ±


Excel 2010

Запускаю форму partnet_f и выбираю из strana_combo (илова кардан (добавить)) появляется другая форма и закрывается нынешняя и добавляю то что хочу добавить… все вроде бы не чего, НО вторая форму не получается закрыть, и когда опят хочу добавить программа ругает… После того я останавливаю программу и когда запускаю заново выдается ошибка run time error 3709 невозможно использование подключения для выполнения операции…

К сообщению приложен файл:

tst.rar
(55.5 Kb)

Сообщение отредактировал PYCTAMВторник, 01.07.2014, 09:50

 

Ответить

doober

Дата: Вторник, 01.07.2014, 10:48 |
Сообщение № 2

Группа: Друзья

Ранг: Ветеран

Сообщений: 910


Репутация:

317

±

Замечаний:
0% ±


Excel 2010

Создавайте подключение по мере необходимости,зачем держать его открытым.
Аналогично подправте код на открытие книги

[vba]

Код

Private Sub UserForm_Initialize()
     Dim sql As String
     If flag_strana = True Then Unload strana_f
     flag2 = False
     flag = True
     flag_strana = False
     calendar.Show
     data.Caption = sana
     Set rs = New ADODB.Recordset
         Set cn = New ADODB.Connection
     cn.Open ConnectionString:=»Provider=Microsoft.ACE.OLEDB.12.0;» & _
     «Data Source=» & ThisWorkbook.Path & «/tst.accdb» & «;»
     If cn.State <> 1 Then Exit Sub
     sql = «select distinct faculta from omuzgoron order by faculta»
     rs.Open sql, cn, adOpenStatic, adLockBatchOptimistic
     For i = 1 To rs.RecordCount
         strana_сombo.AddItem rs.Fields(0).Value
         rs.MoveNext
     Next i
     strana_сombo.AddItem «(Илова кардан)»
     rs.Close
     cn.Close
      Set cn = Nothing
End Sub

[/vba]


 

Ответить

PYCTAM

Дата: Вторник, 01.07.2014, 17:50 |
Сообщение № 3

Группа: Пользователи

Ранг: Новичок

Сообщений: 24


Репутация:

0

±

Замечаний:
60% ±


Excel 2010

doober, огромное спасибо… проблема с 3709 решена…а вот проблема с не закрывающей формой никак не получается решить…
проста откройте пожалуйста форму strana_f запустив форму partner_f и выбрав из списка strana_combo (илова кардан т.е. добавить) и нажмите кнопку выход… форма strana_fне закрывается и когда опят хочу добавить программа ругает…

К сообщению приложен файл:

1237031.rar
(64.2 Kb)

 

Ответить

doober

Дата: Вторник, 01.07.2014, 22:25 |
Сообщение № 4

Группа: Друзья

Ранг: Ветеран

Сообщений: 910


Репутация:

317

±

Замечаний:
0% ±


Excel 2010

Измените код в форму strana_f

[vba]

Код

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

     End Sub
Private Sub vixod_Click()
    Me.Hide
      If flag_strana = True Then
         partner_f.Show
     End If
End Sub

[/vba]

Здесь ругается правильно,у вас в базе нет таблицы strana
[vba]

Код

     sql = «select strana  from strana»
     rs.Open sql, cn, adOpenDynamic, adLockBatchOptimistic

[/vba]


 

Ответить

PYCTAM

Дата: Среда, 02.07.2014, 13:10 |
Сообщение № 5

Группа: Пользователи

Ранг: Новичок

Сообщений: 24


Репутация:

0

±

Замечаний:
60% ±


Excel 2010

doober, ещё раз огромное-огромное спасибо.
тут другая проблема у меня нарисовалась, незнаю именно когда, но переодический появляется это злощасная ошибка… закрываю книгу и открываю заново проблема исчезает…

К сообщению приложен файл:

8897252.png
(22.8 Kb)

 

Ответить

doober

Дата: Среда, 02.07.2014, 13:45 |
Сообщение № 6

Группа: Друзья

Ранг: Ветеран

Сообщений: 910


Репутация:

317

±

Замечаний:
0% ±


Excel 2010

Ответ в моем первом посте.
У вас обнуляется публичная переменная строки подключения
Уберите с публичных переменных подключение и рекордсет.
Создавайте их в процедуре и закрывайте


 

Ответить

PYCTAM

Дата: Четверг, 03.07.2014, 21:17 |
Сообщение № 7

Группа: Пользователи

Ранг: Новичок

Сообщений: 24


Репутация:

0

±

Замечаний:
60% ±


Excel 2010

doober, очень Вам благодарен за все…
тут ещё одна не понятно для меня ситуация получилась…
хочу ограничить ввод символов на текстовое поле мейл, чтобы кроме латиницы, цифр, @, «.», _ и — не чего не вводилась….
[vba]

Код

    If (KeyAscii < 65 Or KeyAscii > 91) And (KeyAscii < 97 Or KeyAscii > 122) And (KeyAscii < 48 Or KeyAscii > 58) And KeyAscii <> 64 And KeyAscii <> 46 And KeyCode <> 45 And KeyAscii <> 95 Then KeyAscii = 0

[/vba]
Все нормально работает кроме символа -… Почему???

 

Ответить

_Boroda_

Дата: Четверг, 03.07.2014, 21:40 |
Сообщение № 8

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

А зачем Вы черточку (45-й символ) в KeyCode вместо KeyAscii засунули?


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

RAN

Дата: Четверг, 03.07.2014, 22:05 |
Сообщение № 9

Группа: Друзья

Ранг: Экселист

Сообщений: 5642

Так понагляднее
[vba]

Код

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
     Select Case KeyAscii
     Case 45, 46, 48 To 57, 64 To 90, 95, 97 To 122
     Case Else
         KeyAscii = 0
     End Select
End Sub

[/vba]


Быть или не быть, вот в чем загвоздка!

 

Ответить

Solution 1

First (and unrelated to your error), unless you need to support clients using Windows 2000 or earlier, you should reference the highest Microsoft ActiveX Data Objects version instead of 2.0. If you’re only using ADODB to interact with the database, you don’t need the Microsoft Access 16.0 Object Library at all.

Second, if you already have a reference, don’t create late bound objects like this:

Set cn = CreateObject("ADODB.connection")

Adding the reference early binds the type, so explicitly declare them and instantiate them using New:

Dim cn As ADODB.Connection
Set cn = New ADODB.Connection

Your connection string should be fine — where you run into problems are these 2 lines:

    Set rs1 = CreateObject("ADODB.recordset")

    rs1.activeconnection = cn

Executing an ADODB.Command will return the Recordset, not the other way around. Remove those 2 lines entirely. Instead of attaching the connection to the Recordset, you need to use it when you’re building your ADODB.Command:

    Dim strSQL As New ADODB.Command
    strSQL.ActiveConnection = cn      '<---Insert this.
    strSQL.CommandText = "SELECT * FROM Table1"
    strSQL.CommandType = adCmdText

Also, get rid of the Hungarian notation there — it’s confusing as hell. An ADODB command isn’t a String, so why should it be named strFoo?

You also need to clean up after yourself — don’t leave your recordset and connection just hanging open when you’re done with them. Call .Close when you’re finished.

Finally, your SQL statement is most likely incorrect — you probably need to enclose your TID in single quotes('):

"SELECT * FROM Tooling WHERE TID='BD0001'"

It should look closer to this:

Sub Importfromaccess()
    Dim Path As String
    Path = "C:UsersmyUserDesktopDatabase1.accdb"

    Dim cn As ADODB.Connection
    Set cn = New ADODB.Connection
    cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Path & ";"

    Dim query As New ADODB.Command
    query.ActiveConnection = cn
    query.CommandText = "SELECT * FROM Tooling WHERE TID='BD0001'"
    query.CommandType = adCmdText

    Dim rs1 As ADODB.Recordset
    Set rs1 = query.Execute ' This is the line the error occurs on

    Sheets("Calc").Range("K1").CopyFromRecordset rs1

    'CLEAN UP AFTER YOURSELF:
    rs1.Close
    cn.Close 
End Sub

Solution 2

You already Set rs1

How about trying something more like:

Sub Importfromaccess()
  Dim strSQL As String, strPath as String
  Dim cn as Object, rs1 as Object

  strPath = "C:UsersmyUserDesktopDatabase1.accdb"
  Set cn = CreateObject("ADODB.connection")

  cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Path & ";"

  Set rs1 = CreateObject("ADODB.Recordset")

  strSQL = "SELECT * FROM Tooling WHERE TID='BD0001'"
  rs1.Open strSQL, cn

  Sheets("Calc").Range("K1").CopyFromRecordset rs1
End Sub

Related videos on Youtube

Run-Time Error '9' Subscript out of range - Identify and Fix it

06 : 09

Run-Time Error ‘9’ Subscript out of range — Identify and Fix it

how to fix run time error in excel VBA

05 : 53

how to fix run time error in excel VBA

VBA Run-time Error '91' Object-variable or With block variable not set

04 : 24

VBA Run-time Error ’91’ Object-variable or With block variable not set

VBA run-time error '1004' Application-defined or Object-defined error

02 : 51

VBA run-time error ‘1004’ Application-defined or Object-defined error

How to Fix VBA Run-time error '1004' - Excel VBA Tutorial

05 : 41

How to Fix VBA Run-time error ‘1004’ — Excel VBA Tutorial

How to Fix Runtime Error 91? (Complete Guide)

04 : 27

How to Fix Runtime Error 91? (Complete Guide)

Solved: Excel vba Run-time error -2146232576 (80131700) Automation error

02 : 29

Solved: Excel vba Run-time error -2146232576 (80131700) Automation error

CodeDocu Developer C# Asp Net Angular

How to Fix Run Time Error in Excel VBA

01 : 38

How to Fix Run Time Error in Excel VBA

MDTechVideos International

Solución! RunTime Error 380 invalid property value

03 : 04

Solución! RunTime Error 380 invalid property value

Khắc phục lỗi Run time error '9'   Subscript out of range trong excel - Nhật ký thi công tự động

03 : 38

Khắc phục lỗi Run time error ‘9’ Subscript out of range trong excel — Nhật ký thi công tự động

Chu Công Ước Nhật ký thi công tự động

Comments

  • This is my first question so constructive criticism is welcome! I am attempting to query an access database from excel vba and place the return information into an Excel range. I get this error:

    Error Message: «Run-time error ‘3709’ The connection cannot be used to
    perform this operation. It is either closed or invalid in this
    context.»

    Code:

    Sub Importfromaccess()
            Path = "C:UsersmyUserDesktopDatabase1.accdb"
    
            Set cn = CreateObject("ADODB.connection")
    
            cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Path & ";"
    
            Set rs1 = CreateObject("ADODB.recordset")
    
            rs1.activeconnection = cn
    
            Dim strSQL As New ADODB.Command
    
            strSQL.CommandText = "SELECT * FROM Tooling WHERE TID=BD0001"
            strSQL.CommandType = adCmdText
    
            Set rs1 = strSQL.Execute ' This is the line the error occurs on
    
            Sheets("Calc").Range("K1").CopyFromRecordset rs1
    End Sub
    

    I have enabled the following references:

    1. Visual Basic For Applications,
    2. Microsoft Excel 16.0 Object Library,
    3. OLE Automation,
    4. Microsoft Office 16.0 Object Library,
    5. Microsoft Access 16.0 Object Library,
    6. Microsoft ActiveX Data Objects 2.0 Library,

    I tried placing the line:

    cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Path & ";"
    

    right before the error line and received this error:

    Run-time error ‘3705’: Operation is not allowed when the object is
    open.

    Anybody know what my problem might be?

  • Thanks a ton man. I learned a lot just form reading through that. I had no idea my code was so riddled with errors O.o

Recents

David Meego - Click for blog homepageThis is a reposting of an article I originally wrote on my Developing for Dynamics GP blog.

It has been a long time since I shared a Quick Tip for Visual Basic for Applications (VBA), but I have had this one waiting for me to write up for a while.

When using VBA on a window with ActiveX Data Object (ADO) to connect to SQL Server to read and/or write data to tables, the best practice is to open the ADO connection on the Window_BeforeOpen() event and to close the ADO connection using the Window_AfterClose() event.

This is similar to the best practice for reports discussed in the Using ADO with VBA with Report Writer post.

There is one big difference in behaviour between windows and reports that can cause problems with this technique…. cue dramatic music…..

Windows have a user interface which might cause a dialog to open and the window closure to be aborted.

OK, big deal, why should this cause a problem for us?

Well, let’s work with the following scenario:

  1. The user opens the window and the Window_BeforeOpen() event opens the ADO connection.
  2. The user is working in the window and the VBA code is reading and writing via ADO as desired.
  3. The user is has finished editing data in the window (but has not saved) and closes the window.
  4. The “Do you want to Save, Discard or Cancel?” dialog opens and the user decides to cancel.
  5. The window closure is aborted and the window stays open.
  6. The user continues working and the next time VBA attempts to use ADO, the following error shows up:

Run=time error ‘3709’:

Requested operation requires an OLE DB Session object, which is not supported by the current provider.

So what happened?

The issue here is that while the Dexterity WIN_POST script aborted the window closure, the script itself as still executed. Therefore the VBA Window_AfterClose() script also executed… and closed the ADO connection even though the window remained open.

The solution to this issue is to make sure that the Window_AfterClose() script does not close the ADO connection if Cancel was selected on the pop up dialog.

Please see the Knowledge Base (KB) Article below for details of the solution including example scripts:

  • How to use ActiveX Data Object (ADO) with VBA on a window with Microsoft Dynamics GP and with Microsoft Business Solutions – Great Plains 8.0 (KB 942327)

Hope you find this one useful.

David

This article was originally posted on the Developing for Dynamics GP Blog and has been reposted on http://www.winthropdc.com/blog.

excelvba

This is my first question so constructive criticism is welcome! I am attempting to query an access database from excel vba and place the return information into an Excel range. I get this error:

Error Message: «Run-time error ‘3709’ The connection cannot be used to
perform this operation. It is either closed or invalid in this
context.»

Code:

Sub Importfromaccess()
        Path = "C:UsersmyUserDesktopDatabase1.accdb"

        Set cn = CreateObject("ADODB.connection")

        cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Path & ";"

        Set rs1 = CreateObject("ADODB.recordset")

        rs1.activeconnection = cn

        Dim strSQL As New ADODB.Command

        strSQL.CommandText = "SELECT * FROM Tooling WHERE TID=BD0001"
        strSQL.CommandType = adCmdText

        Set rs1 = strSQL.Execute ' This is the line the error occurs on

        Sheets("Calc").Range("K1").CopyFromRecordset rs1
End Sub

I have enabled the following references:

  1. Visual Basic For Applications,
  2. Microsoft Excel 16.0 Object Library,
  3. OLE Automation,
  4. Microsoft Office 16.0 Object Library,
  5. Microsoft Access 16.0 Object Library,
  6. Microsoft ActiveX Data Objects 2.0 Library,

I tried placing the line:

cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Path & ";"

right before the error line and received this error:

Run-time error ‘3705’: Operation is not allowed when the object is
open.

Anybody know what my problem might be?

Related Question

    Icon Ex Номер ошибки: Ошибка 3709
    Название ошибки: Microsoft Access Error 3709
    Описание ошибки: The search key was not found in any record.
    Разработчик: Microsoft Corporation
    Программное обеспечение: Microsoft Access
    Относится к: Windows XP, Vista, 7, 8, 10, 11

    Оценка «Microsoft Access Error 3709»

    «Microsoft Access Error 3709» обычно называется формой «ошибки времени выполнения». Программисты работают через различные уровни отладки, пытаясь убедиться, что Microsoft Access как можно ближе к безошибочным. Поскольку разработчики программного обеспечения пытаются предотвратить это, некоторые незначительные ошибки, такие как ошибка 3709, возможно, не были найдены на этом этапе.

    После первоначального выпуска пользователи Microsoft Access могут столкнуться с сообщением «The search key was not found in any record.» во время запуска программы. Когда это происходит, конечные пользователи программного обеспечения могут сообщить Microsoft Corporation о существовании ошибки 3709 ошибок. Затем Microsoft Corporation исправляет эти дефектные записи кода и сделает обновление доступным для загрузки. Чтобы исправить такие ошибки 3709 ошибки, устанавливаемое обновление программного обеспечения будет выпущено от поставщика программного обеспечения.

    В первый раз, когда вы можете столкнуться с ошибкой среды выполнения Microsoft Access обычно с «Microsoft Access Error 3709» при запуске программы. Следующие три наиболее значимые причины ошибок выполнения ошибки 3709 включают в себя:

    Ошибка 3709 Crash — Номер ошибки вызовет блокировка системы компьютера, препятствуя использованию программы. Если Microsoft Access не может обработать данный ввод, или он не может получить требуемый вывод, это обычно происходит.

    Утечка памяти «Microsoft Access Error 3709» — ошибка 3709 приводит к постоянной утечке памяти Microsoft Access. Потребление памяти напрямую пропорционально загрузке ЦП. Возможные провокации включают отсутствие девыделения памяти и ссылку на плохой код, такой как бесконечные циклы.

    Ошибка 3709 Logic Error — логическая ошибка Microsoft Access возникает, когда она производит неправильный вывод, несмотря на то, что пользователь предоставляет правильный ввод. Это видно, когда исходный код Microsoft Corporation включает дефект в анализе входных данных.

    В большинстве случаев проблемы с файлами Microsoft Access Error 3709 связаны с отсутствием или повреждением файла связанного Microsoft Access вредоносным ПО или вирусом. Как правило, решить проблему можно заменой файла Microsoft Corporation. Если ошибка Microsoft Access Error 3709 возникла в результате его удаления по причине заражения вредоносным ПО, мы рекомендуем запустить сканирование реестра, чтобы очистить все недействительные ссылки на пути к файлам, созданные вредоносной программой.

    Распространенные проблемы Microsoft Access Error 3709

    Частичный список ошибок Microsoft Access Error 3709 Microsoft Access:

    • «Ошибка в приложении: Microsoft Access Error 3709»
    • «Microsoft Access Error 3709 не является приложением Win32.»
    • «Microsoft Access Error 3709 столкнулся с проблемой и закроется. «
    • «Microsoft Access Error 3709 не может быть найден. «
    • «Microsoft Access Error 3709 не может быть найден. «
    • «Ошибка запуска программы: Microsoft Access Error 3709.»
    • «Файл Microsoft Access Error 3709 не запущен.»
    • «Microsoft Access Error 3709 выйти. «
    • «Ошибка пути программного обеспечения: Microsoft Access Error 3709. «

    Эти сообщения об ошибках Microsoft Corporation могут появляться во время установки программы, в то время как программа, связанная с Microsoft Access Error 3709 (например, Microsoft Access) работает, во время запуска или завершения работы Windows, или даже во время установки операционной системы Windows. Запись ошибок Microsoft Access Error 3709 внутри Microsoft Access имеет решающее значение для обнаружения неисправностей электронной Windows и ретрансляции обратно в Microsoft Corporation для параметров ремонта.

    Создатели Microsoft Access Error 3709 Трудности

    Проблемы Microsoft Access и Microsoft Access Error 3709 возникают из отсутствующих или поврежденных файлов, недействительных записей реестра Windows и вредоносных инфекций.

    В частности, проблемы Microsoft Access Error 3709 возникают через:

    • Недопустимая или поврежденная запись Microsoft Access Error 3709.
    • Зазаражение вредоносными программами повредил файл Microsoft Access Error 3709.
    • Другая программа злонамеренно или по ошибке удалила файлы, связанные с Microsoft Access Error 3709.
    • Microsoft Access Error 3709 конфликтует с другой программой (общим файлом).
    • Microsoft Access/Microsoft Access Error 3709 поврежден от неполной загрузки или установки.

    Продукт Solvusoft

    Загрузка
    WinThruster 2022 — Проверьте свой компьютер на наличие ошибок.

    Совместима с Windows 2000, XP, Vista, 7, 8, 10 и 11

    Установить необязательные продукты — WinThruster (Solvusoft) | Лицензия | Политика защиты личных сведений | Условия | Удаление

    В этой статье представлена ошибка с номером Ошибка 3709, известная как Ошибка Microsoft Access 3709, описанная как Ключ поиска не найден ни в одной записи.

    О программе Runtime Ошибка 3709

    Время выполнения Ошибка 3709 происходит, когда Microsoft Access дает сбой или падает во время запуска, отсюда и название. Это не обязательно означает, что код был каким-то образом поврежден, просто он не сработал во время выполнения. Такая ошибка появляется на экране в виде раздражающего уведомления, если ее не устранить. Вот симптомы, причины и способы устранения проблемы.

    Определения (Бета)

    Здесь мы приводим некоторые определения слов, содержащихся в вашей ошибке, в попытке помочь вам понять вашу проблему. Эта работа продолжается, поэтому иногда мы можем неправильно определить слово, так что не стесняйтесь пропустить этот раздел!

    • Доступ — НЕ ИСПОЛЬЗУЙТЕ этот тег для Microsoft Access, используйте вместо него [ms-access].
    • Ключ — уникальный идентификатор используется для получения парного значения.
    • Запись . Запись в программировании — это тип данных с метками для доступа к полям записи.
    • Поиск — Вопросы о механике и реализации алгоритма поиска.
    • Access . Microsoft Access, также известный как Microsoft Office Access, представляет собой систему управления базами данных от Microsoft, которая обычно объединяет реляционные Microsoft JetACE Database Engine с графическим пользовательским интерфейсом и инструментами разработки программного обеспечения.
    • Доступ к Microsoft . Microsoft Access, также известный как Microsoft Office Access, представляет собой систему управления базами данных от Microsoft, которая обычно сочетает в себе реляционное ядро ​​СУБД Microsoft JetACE с графическим пользовательским интерфейсом и инструментами разработки программного обеспечения.
    Симптомы Ошибка 3709 — Ошибка Microsoft Access 3709

    Ошибки времени выполнения происходят без предупреждения. Сообщение об ошибке может появиться на экране при любом запуске %программы%. Фактически, сообщение об ошибке или другое диалоговое окно может появляться снова и снова, если не принять меры на ранней стадии.

    Возможны случаи удаления файлов или появления новых файлов. Хотя этот симптом в основном связан с заражением вирусом, его можно отнести к симптомам ошибки времени выполнения, поскольку заражение вирусом является одной из причин ошибки времени выполнения. Пользователь также может столкнуться с внезапным падением скорости интернет-соединения, но, опять же, это не всегда так.

    Fix Ошибка Microsoft Access 3709 (Error Ошибка 3709)
    (Только для примера)

    Причины Ошибка Microsoft Access 3709 — Ошибка 3709

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

    Ошибки во время выполнения обычно вызваны несовместимостью программ, запущенных в одно и то же время. Они также могут возникать из-за проблем с памятью, плохого графического драйвера или заражения вирусом. Каким бы ни был случай, проблему необходимо решить немедленно, чтобы избежать дальнейших проблем. Ниже приведены способы устранения ошибки.

    Методы исправления

    Ошибки времени выполнения могут быть раздражающими и постоянными, но это не совсем безнадежно, существует возможность ремонта. Вот способы сделать это.

    Если метод ремонта вам подошел, пожалуйста, нажмите кнопку upvote слева от ответа, это позволит другим пользователям узнать, какой метод ремонта на данный момент работает лучше всего.

    Обратите внимание: ни ErrorVault.com, ни его авторы не несут ответственности за результаты действий, предпринятых при использовании любого из методов ремонта, перечисленных на этой странице — вы выполняете эти шаги на свой страх и риск.

    Метод 7 — Ошибка выполнения, связанная с IE

    Если полученная ошибка связана с Internet Explorer, вы можете сделать следующее:

    1. Сбросьте настройки браузера.
      • В Windows 7 вы можете нажать «Пуск», перейти в «Панель управления» и нажать «Свойства обозревателя» слева. Затем вы можете перейти на вкладку «Дополнительно» и нажать кнопку «Сброс».
      • Для Windows 8 и 10 вы можете нажать «Поиск» и ввести «Свойства обозревателя», затем перейти на вкладку «Дополнительно» и нажать «Сброс».
    2. Отключить отладку скриптов и уведомления об ошибках.
      • В том же окне «Свойства обозревателя» можно перейти на вкладку «Дополнительно» и найти пункт «Отключить отладку сценария».
      • Установите флажок в переключателе.
      • Одновременно снимите флажок «Отображать уведомление о каждой ошибке сценария», затем нажмите «Применить» и «ОК», затем перезагрузите компьютер.

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

    Метод 1 — Закройте конфликтующие программы

    Когда вы получаете ошибку во время выполнения, имейте в виду, что это происходит из-за программ, которые конфликтуют друг с другом. Первое, что вы можете сделать, чтобы решить проблему, — это остановить эти конфликтующие программы.

    • Откройте диспетчер задач, одновременно нажав Ctrl-Alt-Del. Это позволит вам увидеть список запущенных в данный момент программ.
    • Перейдите на вкладку «Процессы» и остановите программы одну за другой, выделив каждую программу и нажав кнопку «Завершить процесс».
    • Вам нужно будет следить за тем, будет ли сообщение об ошибке появляться каждый раз при остановке процесса.
    • Как только вы определите, какая программа вызывает ошибку, вы можете перейти к следующему этапу устранения неполадок, переустановив приложение.

    Метод 6 — Переустановите графический драйвер

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

    • Откройте диспетчер устройств и найдите драйвер видеокарты.
    • Щелкните правой кнопкой мыши драйвер видеокарты, затем нажмите «Удалить», затем перезагрузите компьютер.

    Метод 2 — Обновите / переустановите конфликтующие программы

    Использование панели управления

    • В Windows 7 нажмите кнопку «Пуск», затем нажмите «Панель управления», затем «Удалить программу».
    • В Windows 8 нажмите кнопку «Пуск», затем прокрутите вниз и нажмите «Дополнительные настройки», затем нажмите «Панель управления»> «Удалить программу».
    • Для Windows 10 просто введите «Панель управления» в поле поиска и щелкните результат, затем нажмите «Удалить программу».
    • В разделе «Программы и компоненты» щелкните проблемную программу и нажмите «Обновить» или «Удалить».
    • Если вы выбрали обновление, вам просто нужно будет следовать подсказке, чтобы завершить процесс, однако, если вы выбрали «Удалить», вы будете следовать подсказке, чтобы удалить, а затем повторно загрузить или использовать установочный диск приложения для переустановки. программа.

    Использование других методов

    • В Windows 7 список всех установленных программ можно найти, нажав кнопку «Пуск» и наведя указатель мыши на список, отображаемый на вкладке. Вы можете увидеть в этом списке утилиту для удаления программы. Вы можете продолжить и удалить с помощью утилит, доступных на этой вкладке.
    • В Windows 10 вы можете нажать «Пуск», затем «Настройка», а затем — «Приложения».
    • Прокрутите вниз, чтобы увидеть список приложений и функций, установленных на вашем компьютере.
    • Щелкните программу, которая вызывает ошибку времени выполнения, затем вы можете удалить ее или щелкнуть Дополнительные параметры, чтобы сбросить приложение.

    Метод 3 — Обновите программу защиты от вирусов или загрузите и установите последнюю версию Центра обновления Windows.

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

    Метод 4 — Переустановите библиотеки времени выполнения

    Вы можете получить сообщение об ошибке из-за обновления, такого как пакет MS Visual C ++, который может быть установлен неправильно или полностью. Что вы можете сделать, так это удалить текущий пакет и установить новую копию.

    • Удалите пакет, выбрав «Программы и компоненты», найдите и выделите распространяемый пакет Microsoft Visual C ++.
    • Нажмите «Удалить» в верхней части списка и, когда это будет сделано, перезагрузите компьютер.
    • Загрузите последний распространяемый пакет от Microsoft и установите его.

    Метод 5 — Запустить очистку диска

    Вы также можете столкнуться с ошибкой выполнения из-за очень нехватки свободного места на вашем компьютере.

    • Вам следует подумать о резервном копировании файлов и освобождении места на жестком диске.
    • Вы также можете очистить кеш и перезагрузить компьютер.
    • Вы также можете запустить очистку диска, открыть окно проводника и щелкнуть правой кнопкой мыши по основному каталогу (обычно это C :)
    • Щелкните «Свойства», а затем — «Очистка диска».
    Другие языки:

    How to fix Error 3709 (Microsoft Access Error 3709) — The search key was not found in any record.
    Wie beheben Fehler 3709 (Microsoft Access-Fehler 3709) — Der Suchschlüssel wurde in keinem Datensatz gefunden.
    Come fissare Errore 3709 (Errore di Microsoft Access 3709) — La chiave di ricerca non è stata trovata in nessun record.
    Hoe maak je Fout 3709 (Microsoft Access-fout 3709) — De zoeksleutel is in geen enkel record gevonden.
    Comment réparer Erreur 3709 (Erreur Microsoft Access 3709) — La clé de recherche n’a été trouvée dans aucun enregistrement.
    어떻게 고치는 지 오류 3709 (마이크로소프트 액세스 오류 3709) — 검색 키를 레코드에서 찾을 수 없습니다.
    Como corrigir o Erro 3709 (Erro 3709 do Microsoft Access) — A chave de busca não foi encontrada em nenhum registro.
    Hur man åtgärdar Fel 3709 (Microsoft Access Error 3709) — Söknyckeln hittades inte i någon post.
    Jak naprawić Błąd 3709 (Błąd Microsoft Access 3709) — Klucz wyszukiwania nie został znaleziony w żadnym rekordzie.
    Cómo arreglar Error 3709 (Error 3709 de Microsoft Access) — La clave de búsqueda no se encontró en ningún registro.

    The Author Об авторе: Фил Харт является участником сообщества Microsoft с 2010 года. С текущим количеством баллов более 100 000 он внес более 3000 ответов на форумах Microsoft Support и создал почти 200 новых справочных статей в Technet Wiki.

    Следуйте за нами: Facebook Youtube Twitter

    Последнее обновление:

    24/03/23 03:46 : Пользователь Windows 10 проголосовал за то, что метод восстановления 1 работает для него.

    Рекомендуемый инструмент для ремонта:

    Этот инструмент восстановления может устранить такие распространенные проблемы компьютера, как синие экраны, сбои и замораживание, отсутствующие DLL-файлы, а также устранить повреждения от вредоносных программ/вирусов и многое другое путем замены поврежденных и отсутствующих системных файлов.

    ШАГ 1:

    Нажмите здесь, чтобы скачать и установите средство восстановления Windows.

    ШАГ 2:

    Нажмите на Start Scan и позвольте ему проанализировать ваше устройство.

    ШАГ 3:

    Нажмите на Repair All, чтобы устранить все обнаруженные проблемы.

    СКАЧАТЬ СЕЙЧАС

    Совместимость

    Требования

    1 Ghz CPU, 512 MB RAM, 40 GB HDD
    Эта загрузка предлагает неограниченное бесплатное сканирование ПК с Windows. Полное восстановление системы начинается от $19,95.

    ID статьи: ACX07093RU

    Применяется к: Windows 10, Windows 8.1, Windows 7, Windows Vista, Windows XP, Windows 2000

    • Remove From My Forums
    • Question

    • Hello,

      i have two access apps, one (1) is calling the other (2)

      in (1), i have a vba function which pulls data (from a odbc-connected db) and stores it in a native table in (2)

      then, (1) calls a routine to manipulate said data, finally printing it to a report

      now, in some cases i get this error 3709 «the search key was not found in any record» when doing «docmd.Openrecord» with a filter criterion. after doing some research, i thought i had the solution, and removed the memo fields’ (there are some) index.

      strangeley enough the problem still exists.

      to be more specific: the calling from (1) to (2) is within a loop. running a single recordset through the loop (at least til now) never crashed.

      running the app (2) seems to run smoothly as well, but as the access-apps run within a scheduled job (evry 3 mins) the manual way is out of debate.

      any suggestions?

    Answers

    • There’s no such thing as `DoCmd.OpenRecord`, so we really need to see your code to know what you’re talking about.


      David W. Fenton
      David Fenton Associates

      • Marked as answer by

        Thursday, July 21, 2011 7:54 AM

    • Correct, I missed that.

      More likely two commands.

      DoCmd.OpenForm,,,,acnormal

      DoCmd.GoToRecord,acLast

      • Marked as answer by
        Macy Dong
        Thursday, July 21, 2011 7:54 AM

    Какую именно запись в таблице «Лекарства» вы меняете?

    Тут столько проблем, я даже не знаю с чего начать.

    Добавлено через 19 минут
    Начну, пожалуй, со способа, которым вы заполняете Combobox.
    По моему опыту, наиболее оптимальным является создание 2-х полей в Combobox (свойство ColumnCount), одно из которых делается нулевой длины (свойство ColumnWidth, которое должно при этом выглядеть примерно вот так: «0;100», т.е. первый столбец длины 0 точек, второй — длины 100 точек). Обратите при этом внимание на свойство BoundColumn, которое определяет порядковый номер столбца начиная с 1, из которого берется значение для всего Combobox. Если вы будете передавать значение в Combobox, или извлекать его, программа по умолчанию будет «смотреть» именно на этот столбец.

    При этом заполнить Combobox, имеющий 2 значения, из Recordset можно следующим образом:

    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    Sub test()
        Dim oRS As Recordset        'Результат запроса
        Dim sSQL As String          'Текст запроса
        Dim i As Long               'Счетчик
        
        'Получаем данные из базы
        sSQL = "SELECT [Код],[Название группы] FROM Группа"
        Set oRS = Db.OpenRecordset(sSQL, dbOpenForwardOnly)
        
        'Читаем данные и записываем их в Combobox
        With UserForm2.ComboBox1
            Do Until oRS.EOF 'Обходим Recordset с первой до последней записи
                .AddItem                        'Добавляем запись в Combobox
                .Column(0, i) = oRS("Код")      'NB: в VBA нумерация колонок начиначся с 0, а не 1
                .Column(1, i) = oRS("Группа")
                i = i + 1
                oRS.MoveNext
            Loop
        End With
        
        'Закрываем запрос
        oRS.Close
        Set oRS = Nothing
    End Sub

    Добавлено через 18 минут
    Далее, по вашему способу изменять базу данных. На мой взгляд, использование метода Edit сопряжено с такой массой проблем и ограничений, что является банально нецелесообразным. Намного разумнее использовать для изменения SQL-запросы UPDATE и INSERT.

    Например, вам надо поменять некую запись в таблице «Лекарства», добавив в поле «Фармокологическая группа» значение из Combobox, соответствующее Коду записи в таблице Группа. Предположим, вы каким-то образом уже получили Код этой записи. Он у меня в коде будет представлен переменной «PharmID».
    Так как мы уже выгрузили в скрытую колонку Combobox Коды соответствующих записей, нам не нужен отдельный запрос, для получения Кода нужной нам записи из БД, достаточно просто получить значение колонки 0:

    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    Sub Update_Pharm()
        Dim sSQL As String
        Dim lGroupID As Long
        Dim lPharmID As Long
        
        'Ïîëó÷àåì Êîä òàáëèöû Ëåêàðñòâà (íåîáõîäèìî ñàìîìó ñîçäàòü ìåõàíèçì ïîëó÷åíèÿ
        lPharmID = 0
        'Ïîëó÷àåì Êîä òàáëèöû Ãðóïïà
        lGroupID = UserForm2.ComboBox1.Column(0)
        'Ôîðìèðóåì çàïðîñ íà îáíîâëåíèå òàáëèöû Ëåêàðñòâà
        'NB: íèêîãäà íå çàáûâàéòå â çàïðîñå UPDATE ÷àñòü WHERE,
        'âûáèðàþùóþ ðåäàêòèðóåìóþ çàïèñü. Èíà÷å áóäóò îáíîâëåíû âñå çàïèñè â òàáëèöå
        sSQL = "UPDATE Ëåêàðñòâà SET [Ôàðìîêîëîãè÷åñêàÿ ãðóïïà]=" & lGroupID & " WHERE Êîä=" & lPharmID
        'Выполяем запрос
        db.Execute sSQL
    End Sub

    Понравилась статья? Поделить с друзьями:

    Интересное по теме:

  • Ошибка 3725 sql
  • Ошибка 3714 газель камминз
  • Ошибка 372 оки
  • Ошибка 3706 не удается найти указанный поставщик
  • Ошибка 3704 бартендер

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии