Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/26: Рейтинг темы: голосов - 26, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 09.05.2010
Сообщений: 233

Recordset.AddNew не работает (VB->ADO->Access)

19.05.2010, 10:26. Показов 4934. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Код:
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Dim cnnAccess As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim strSQL As String
Dim GetIdProduct  As Long
 
Dim Id_Customer As Long
Dim Articul As Long
 
Id_Customer = 81
Articul = 43144
 
cnnAccess.Open 'Provider=Microsoft.Jet.OLEDB.4.0;' & _
           'Data Source=\ServDData.mdb;'
 
strSQL = 'SELECT Id_Product FROM Products' & _
       ' WHERE ID_Customer = ' & Id_Customer & _
       ' AND ID_Articul = ' & Articul
 
With rst
    .ActiveConnection = cnnAccess
    .CursorLocation = adUseServer
    .CursorType = adOpenKeyset
    .LockType = adLockOptimistic
    .Source = strSQL
    .Open
End With
 
Set rst = cnnAccess.Execute(strSQL)
If rst.RecordCount > 0 Then
    GetIdProduct = rst!Id_Customer
Else
    rst.AddNew
    GetIdProduct = rst!Id_Product
    rst!Id_Customer = 81
    rst!Name = 'Name'
    rst!ID_Articul = 43144
    rst.Update
End If

Как бы CursorLocation и CursorType не менял - всегда rst.RecordCount = -1 (даже если товар такой есть)
А на AddNew выдает ошибку:
Run-time error '3251':

Current Recordset does not support updating. This may be a limitation of the provider, or of the selected locktype.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.05.2010, 10:26
Ответы с готовыми решениями:

Проблемы с кодом Recordset.AddNew() Recordset(0) = '01/02/2002' Recordset.Update()
Recordset.AddNew() Recordset(0) = '01/02/2002' Recordset.Update() //----------дает результат 1 февраля 2002 Recordset.AddNew() ...

Recordset.addnew
Здравствуйте! Есть форма (form1) в ней подчинённая форма (form2). На главной форме есть кнопка которая (как я надеялся) осуществит...

Как использовать RecordSet при обновлении данных (выдает ошибку: update или cancelupdate без addnew или edit)
Доброго времени суток уважаемые форумчане! Подскажите пожалуйста где ошибку делаю, при обновлении данных с помощью рекодсета: Sub...

6
2 / 2 / 1
Регистрация: 19.07.2007
Сообщений: 737
19.05.2010, 14:20
смотри permissions на саму базу \ServDData.mdb для удаленного юзера или возможно сетевой диск доступен только для чтения
0
0 / 0 / 3
Регистрация: 28.01.2010
Сообщений: 279
20.05.2010, 13:27
Ты смотри что запрашиваешь:
Visual Basic
1
 strSQL = 'SELECT Id_Product FROM Products'
И смотри что пытаешься присвоить рекордсету:
Visual Basic
1
2
3
  rst!Id_Customer = 81
  rst!Name = 'Name'
  rst!ID_Articul = 43144
У тебя рекордсет содержит только одно поле Id_Product которое ты запросил, а ты пытаешься присвоить кучу значений полям, которых нет в рекордсете.
0
0 / 0 / 0
Регистрация: 09.05.2010
Сообщений: 233
20.05.2010, 14:01  [ТС]
Хоть бы кто заметил лишнюю строчку в коде:
Visual Basic
1
Set rst = cnnAccess.Execute(strSQL)
А поля тут не при чем, это уже будет следующая ошибка.
0
pl
51 / 17 / 6
Регистрация: 18.05.2007
Сообщений: 1,322
20.05.2010, 14:19
И поля при чем и эта строчка причем, поскольку эта строчка перечеркивает строчку
.Open
и открывает рекордсет по умолчанию, т.е. ForvardOnly, ReadOnly, обновление которого естественно невозможно. К тому же при таком открытии рекордсета RecordCount дает -1. Так что до добавления записи вообще не должно доходить.
0
0 / 0 / 3
Регистрация: 28.01.2010
Сообщений: 279
20.05.2010, 14:26
Слушай, открой по человечески рекордсет без Execute.
Visual Basic
1
rsRecordset.Open strSQL, ActiveConnectionName, adOpenDynamic, adLookOptimistic
а потом делай сколько тебе угодно:
Visual Basic
1
2
3
rsRecordset.AddNew
rsRecordset.Update
Set rsRecordset = Nothing
0
0 / 0 / 0
Регистрация: 09.05.2010
Сообщений: 233
20.05.2010, 14:57  [ТС]
pl
XPraptor
Не, ну вы даете )))))
После драки кулаками не машут, я уже и без вас понял что виной всему
Visual Basic
1
Set rst = cnnAccess.Execute(strSQL)
я же написал что это строка в коде лишняя!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.05.2010, 14:57
Помогаю со студенческими работами здесь

Создание ADO Recordset
Привет, есть такая проблема - при использовании для работы с ADO используются adoid.h и adoint.h HRESULT hr; _ADORecordset...

Операторы IN и CASE в Recordset (ADO)
Я использую оператор IN в свойстве Filter объекта Recordset (ADO) и оператор CASE ... WHEN ... THEN в свойстве Sort. Оба случая вызывают...

Не обновляется ADO Client Recordset
А именно, как решить следующую проблему: Я открыл ADO Recordset как клиентский. Внес изменения. Батч апдейтнул. Закрыл. Открываю - а...

ADO Recordset и временные таблицы
ADO.RecordSet не хочет работать с временными таблицами. Есть запрос: CREATE TABLE #EntsLeav (J_DATE DATETIME) insert into...

Неправильная работа Recordset с ADO
Добрый день. Имею БД Access (Users_base.accdb) в которой таблица Users с полями ID и FName (все по 16 уникальных значений) Хочу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru