powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Создание Recordset-a на базе имеющегося
13 сообщений из 13, страница 1 из 1
Создание Recordset-a на базе имеющегося
    #32593961
AlexSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возникла такая проблема, беру recordset (из формы скажем), хочу на его базе создать второй, выбрав только нужные записи. После чего применить этот новый Recordset к отчету.
Делаю примерно так:

Код: plaintext
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.
39.
40.
Dim oRS As ADODB.Recordset
Set oRS = New ADODB.Recordset
 '
 
oRS.Fields.Append "AppName", adVarChar,  100 , adFldMayBeNull
oRS.Fields.Append "ID", adBigInt, , adFldMayBeNull
 '
 
oRS.open
 '
 
 ' Далее в цикле по старому рекордсету, заполяю новый
 
 '
 
Do While Not oRS_old.EOF
  oRS1.AddNew
  oRS!AppName = oRS_old.Fields("AppName")
  oRS![ID] = oRS_old.Fields("ID")
  oRS.Update
   '
 
  oRS_old.MoveNext
Loop

 '
 
 ' Применяю к отчету
 
 '
 
Set Me.Recordset = oRS.Clone
 '    
 
oRS.Close
oRS_old.Close
 '
 
Set oRS = Nothing
Set oRS_old = Nothing

В отчете полям присвоены источники данных ID и AppName.
В результате всего отображается правильное количество строк, но нет самих значений!
Проверяю новый Recordset, все в порядке, данные есть...
Где грабли?
...
Рейтинг: 0 / 0
Создание Recordset-a на базе имеющегося
    #32593965
AlexSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
небольшая поправочка

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Do While Not oRS_old.EOF
  oRS.AddNew
  oRS!AppName = oRS_old.Fields("AppName")
  oRS![ID] = oRS_old.Fields("ID")
  oRS.Update
   '
 
  oRS_old.MoveNext
Loop
...
Рейтинг: 0 / 0
Создание Recordset-a на базе имеющегося
    #32594032
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
глюкавой дорожкой идешь....
в ADP вообще бардак с рекордсетом отчета...

когда мне нужно было подобное решил следующим образом:

из формы собрал в строку через запятую идентификаторы нужных записей
строка типа : STR_LIST_IDS = "1,22,34,65,2333,33"

в рекордсоурс отчета собираешь строку

"Select * from anytable where ID in ( " & STR_LIST_IDS & ") "
...
Рейтинг: 0 / 0
Создание Recordset-a на базе имеющегося
    #32594082
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То же что и предложил АлексейК , только с использованием функции на стороне сервера
Тогда строку можно будет передавать в виде параметра и не завязываться на динамический SQL (если это противоречит правилам безопасности - т.е. нет прямого доступа к данным, а есть доступ только через ХП и UDF)

Сама функция здесь
...
Рейтинг: 0 / 0
Создание Recordset-a на базе имеющегося
    #32594084
AlexSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Самое инетерсное, что это почему-то в отношении нового (руками созданного).
Если беру родительский Recordset (полученный из вормы) и применяю его, все ок!
В моем случае (требуется просто список), можно вообще нарисовать поле-список и туда запихать нужные строки. Но хотелось бы все же добить этот метод. Пригодится ;)
...
Рейтинг: 0 / 0
Создание Recordset-a на базе имеющегося
    #32594088
AlexSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть конечно методы, поудалять из копии старого ненужное, или применить фильтр. Но все как-то в обход...
...
Рейтинг: 0 / 0
Создание Recordset-a на базе имеющегося
    #32594090
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexSVЕсть конечно методы, поудалять из копии старого ненужное, или применить фильтр. Но все как-то в обход...А чем тебе не нравиться метод подмены RecordSource, а не RecordSet?
...
Рейтинг: 0 / 0
Создание Recordset-a на базе имеющегося
    #32594096
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Создание Recordset-a на базе имеющегося
    #32594100
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗЫ: Что бы отдельную таблицу с цифирками не заводить :)
...
Рейтинг: 0 / 0
Создание Recordset-a на базе имеющегося
    #32594117
IgorM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй, вместо oRS.Update поставь oRS.UpdateBatch

Но всё же лучше избегать такой методики формирования источника данных.
...
Рейтинг: 0 / 0
Создание Recordset-a на базе имеющегося
    #32594478
MVN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй подставить так:

Dim oRS As ADODB.Recordset
Set oRS = New ADODB.Recordset
'
oRS.Fields.Append "AppName", adVarChar, 100, adFldMayBeNull
oRS.Fields.Append "ID", adBigInt, , adFldMayBeNull
'
oRS.LockType = adLockOptimistic
oRS.open
...
Рейтинг: 0 / 0
Создание Recordset-a на базе имеющегося
    #32594483
MVN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще я не вижу oRS.CursorLocation = adUseClient
...
Рейтинг: 0 / 0
Создание Recordset-a на базе имеющегося
    #32594591
AlexSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор
oRS.LockType = adLockOptimistic


То что нужно! Все заработало, спасибо.


ЗЫ: oRS.CursorLocation = adUseClient и
oRS.CursorType = adOpenDynamic были, просто не вошли в пример ;)
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Создание Recordset-a на базе имеющегося
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]