Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Создание Recordset-a на базе имеющегося / 13 сообщений из 13, страница 1 из 1
07.07.2004, 17:22:28
    #32593961
AlexSV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание Recordset-a на базе имеющегося
Возникла такая проблема, беру 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
07.07.2004, 17:24:32
    #32593965
AlexSV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание Recordset-a на базе имеющегося
небольшая поправочка

Код: 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
07.07.2004, 17:49:36
    #32594032
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание Recordset-a на базе имеющегося
глюкавой дорожкой идешь....
в ADP вообще бардак с рекордсетом отчета...

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

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

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

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

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

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

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
08.07.2004, 08:21:26
    #32594483
MVN
MVN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание Recordset-a на базе имеющегося
И еще я не вижу oRS.CursorLocation = adUseClient
...
Рейтинг: 0 / 0
08.07.2004, 09:32:09
    #32594591
AlexSV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание Recordset-a на базе имеющегося
автор
oRS.LockType = adLockOptimistic


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


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


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