|
|
|
Скопировать данные из рекордсета в таблицу
|
|||
|---|---|---|---|
|
#18+
Есть у меня в 97-м аксессе рекордсет, который через ODBC заполняется результатами выполнения хранимой процедуры MS SQL 2000. Открывается он почему-то только в режиме ForwardOnly, но это, как я понял, неизлечимо. Мне же необходимо пройтись по нему в цикле несколько раз. Для этого я хочу скопировать данные из этого рекордсета в таблицу аксесса, специально для этого заведенную, и работать уже с ее табличным рекордсетом. Вопрос - как лучше скопировать данные? Сейчас я открываю табличный рекордсет, прохожу в цикле по своему исходному и копирую все записи по полям, примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Можно ли как нибудь более быстро и изящно? Или может быть все-таки есть возможность открыть такой рекордсет в режиме, отличном от ForwardOnly? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2004, 14:28:43 |
|
||
|
Скопировать данные из рекордсета в таблицу
|
|||
|---|---|---|---|
|
#18+
Если таблицы одинаковы, то можно так: Код: plaintext 1. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2004, 14:33:55 |
|
||
|
Скопировать данные из рекордсета в таблицу
|
|||
|---|---|---|---|
|
#18+
Поиграйся с параметрами открытия рекордсета Типа rs.Open strSQL, Cnn, adOpenDynamic (например) По поводу временной таблы А почему нельзя ее на стороне сервера (MSSQL) сделать? Типа Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2004, 14:36:37 |
|
||
|
Скопировать данные из рекордсета в таблицу
|
|||
|---|---|---|---|
|
#18+
TalenЕсли таблицы одинаковы, то можно так: Код: plaintext 1. Код: plaintext 1. Если бы источником данных была таблица, то и вопросов бы не было :) А там рекордсет, и опять же не на основе родной аксессовской таблицы, а на основе процедуры MS-SQL... paparome Поиграйся с параметрами открытия рекордсета Типа rs.Open strSQL, Cnn, adOpenDynamic (например) Игрался вроде всячески... :( авторПо поводу временной таблы А почему нельзя ее на стороне сервера (MSSQL) сделать? Потому что мне данные из нее в Аксессе нужны ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2004, 14:42:15 |
|
||
|
Скопировать данные из рекордсета в таблицу
|
|||
|---|---|---|---|
|
#18+
А ключевое поле в выборке присутствует? А текст ХП покажите? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2004, 14:45:17 |
|
||
|
Скопировать данные из рекордсета в таблицу
|
|||
|---|---|---|---|
|
#18+
paparome А ключевое поле в выборке присутствует? А текст ХП покажите? Текст ХП: Код: 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. Поле TicketVexelItemID ключевое, то есть Primary Key на сервере. Это имеет какое-то значение для возможности открывать полученный рекордсет в Аксессе в режиме не-ForwardOnly? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2004, 15:01:26 |
|
||
|
Скопировать данные из рекордсета в таблицу
|
|||
|---|---|---|---|
|
#18+
SET NOCOUNT ON в начале ХП стоит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2004, 15:31:29 |
|
||
|
Скопировать данные из рекордсета в таблицу
|
|||
|---|---|---|---|
|
#18+
2 paparome: SET NOCOUNT ON Влияет только на трафик, не засоряй человеку мозги. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2004, 15:38:45 |
|
||
|
Скопировать данные из рекордсета в таблицу
|
|||
|---|---|---|---|
|
#18+
F rf cjа ка собственно открывается рекордсет? Openrecordset - в студию! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2004, 15:46:23 |
|
||
|
Скопировать данные из рекордсета в таблицу
|
|||
|---|---|---|---|
|
#18+
Proga2 paparome: SET NOCOUNT ON Влияет только на трафик, не засоряй человеку мозги. Вот тебе FAQ на эту тему http://www.sql.ru/faq/faq_topic.aspx?fid=111 И сходи на соседний форум (тот что по MSSQL) с этим заявлением - много нового о себе как о программисте узнаешь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2004, 17:28:18 |
|
||
|
Скопировать данные из рекордсета в таблицу
|
|||
|---|---|---|---|
|
#18+
Все нижесказанное имхо: Используя odbc соединение и получая данные из хп обновляемый рекордсет вроде не получишь, это вроде тока в адо и то в .net. В таких случаях я делал так - создовал в запросах запрос к серверу (хотя постоянный иметь наверно не обязательно, можно каждый раз создовать программно, но так было проще) типа mysp @parametr1 и тд в программе через свойство запроса .sql подставлял нужную стороку(если менябтся параметры, если без параметров то и менять ничего не надо), после чего: docmd.RunSQL "insert into t (....) from сохраненный запром к серверу " (сорри не помня точный синтаксис :), но смысл думаю ясен - одним запросом заполняем таблицу ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2004, 22:54:34 |
|
||
|
Скопировать данные из рекордсета в таблицу
|
|||
|---|---|---|---|
|
#18+
Сорри что пропал, не было меня в выходные в инете. По порядку: paparomeSET NOCOUNT ON в начале ХП стоит? Нет, сейчас попробовал поставить - не повлияло ни на что. У меня данные-то в рекордсет корректно передаются, проблема только в том, что он ForwardOnly, и никакими силами мне этого изменить не удалось. Alexey Shка собственно открывается рекордсет? Openrecordset - в студию! Вот так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. lsnkВсе нижесказанное имхо: Используя odbc соединение и получая данные из хп обновляемый рекордсет вроде не получишь, это вроде тока в адо и то в .net. В таких случаях я делал так - создовал в запросах запрос к серверу (хотя постоянный иметь наверно не обязательно, можно каждый раз создовать программно, но так было проще) типа mysp @parametr1 и тд в программе через свойство запроса .sql подставлял нужную стороку(если менябтся параметры, если без параметров то и менять ничего не надо), после чего: docmd.RunSQL "insert into t (....) from сохраненный запром к серверу " (сорри не помня точный синтаксис :), но смысл думаю ясен - одним запросом заполняем таблицу ) Обновляемый мне и не нужен, пусть он будет ReadOnly, но только чтобы по нему можно было больше одного раза пройти :) А данные нужно обрабатывать именно в Аксессе, чтобы сравнить их с локальными аксессовскими же данными... Спасибо всем кто ответил, я так думаю что наверно Бог с ним с рекордсетом, есть в нем нужные данные и хорошо, а ситуация с ForwardOnly в 97-м наверно неразрешима. В общем-то единственный оставшийся вопрос - можно ли скопировать данные из этого рекордсета в таблицу Аксесса более красивым способом, чем в заглавном топике? Или пусть работает так, если уж работает? Вопрос собственно возник из-за того, что сейчас данных таким образом обрабатывается немного (порядка 5-10 записей), и я не уверен что эта конструкция не начнет жутко тормозить при сотнях или тысячах записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2004, 08:28:55 |
|
||
|
Скопировать данные из рекордсета в таблицу
|
|||
|---|---|---|---|
|
#18+
Ну я же предложил вам способ одним запросом заполнить локальную таблицу(без использования рекордсета). Чем он не подходит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2004, 10:46:37 |
|
||
|
Скопировать данные из рекордсета в таблицу
|
|||
|---|---|---|---|
|
#18+
lsnkВ таких случаях я делал так - создовал в запросах запрос к серверу (хотя постоянный иметь наверно не обязательно, можно каждый раз создовать программно, но так было проще) типа mysp @parametr1 и тд в программе через свойство запроса .sql подставлял нужную стороку(если менябтся параметры, если без параметров то и менять ничего не надо), после чего: docmd.RunSQL "insert into t (....) from сохраненный запром к серверу " (сорри не помня точный синтаксис :), но смысл думаю ясен - одним запросом заполняем таблицу ) lsnkНу я же предложил вам способ одним запросом заполнить локальную таблицу(без использования рекордсета). Чем он не подходит? Ага, со второго раза мне удалось разбить ваш поток сознания на отдельные мысли. :) Думаю это примерно то что надо, большое спасибо. Я как-то совершенно забыл, что в запросы к серверу действительно можно передавать параметры, хоть и таким извращенным способом как полная смена текста запроса :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2004, 11:11:23 |
|
||
|
Скопировать данные из рекордсета в таблицу
|
|||
|---|---|---|---|
|
#18+
Все дегко получается если воспользоваться pass-through queries Создаю query с connection на сервер, текст его: EXEC ХП, после этого открываю рекордсет Dim db As DAO.Database: Set db = CurrentDb Dim rs As DAO.Recordset: Set rs = db.OpenRecordset("Qry", dbOpenSnapshot) и гуляю по нему как хочу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2004, 12:06:43 |
|
||
|
|

start [/forum/topic.php?fid=45&fpage=1576&tid=1672458]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
23ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 349ms |

| 0 / 0 |
