|
Вставка набора записей.
|
|||
---|---|---|---|
#18+
Добрый день, Уважаемые форумчане! Вопрос скорее для расширения кругозора, поэтому прошу не отсылать фразами "такие вещи надо делать хранимками на стороне сервера" Подскажите как можно в коде VB сделать групповую вставку данных. Т.е. мне нужно вставить не одну запись с набором полей p1,p2,p3,p4, а произвольное количество от 1 до N записей отобранных во внешнем источнике. Логика примерно такая есть 3 таблицы: первая таблица справочная содержит набор записей на основании части которых(отобранной по определенному критерию) будет сделан отбор данных во внешней таблице и вот этот то набор и хотелось бы впихнуть сразу в конечную таблицу без цикла. Единственное получается что при добавлении набор данных отобранный во внешней таблице должен быть расширен на одно поле (имя пользователя который это делает). Возможно ли это сделать без цикла? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2012, 12:55 |
|
Вставка набора записей.
|
|||
---|---|---|---|
#18+
на сервере делай с помощью инструкции UPDATE ... FROM ... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2012, 12:58 |
|
Вставка набора записей.
|
|||
---|---|---|---|
#18+
или INSERT INTO ... SELECT ... в зависимости от т ого , что надо ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2012, 12:59 |
|
Вставка набора записей.
|
|||
---|---|---|---|
#18+
Alex_menЛогика примерно такая есть 3 таблицы: первая таблица справочная содержит набор записей на основании части которых(отобранной по определенному критерию) будет сделан отбор данных во внешней таблице и вот этот то набор и хотелось бы впихнуть сразу в конечную таблицу без цикла. Единственное получается что при добавлении набор данных отобранный во внешней таблице должен быть расширен на одно поле (имя пользователя который это делает). Возможно ли это сделать без цикла? можно сериализовать эти отобранные записи в xml и уже его отправить на сервер в ХП для вставки ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2012, 13:05 |
|
Вставка набора записей.
|
|||
---|---|---|---|
#18+
Konst_Oneили INSERT INTO ... SELECT ... в зависимости от т ого , что надо Я так пробовал делать пока не наткнулся на такую фишку: один и тот же код работает на ХР и начисто отказывается на семерке. А потом мне получается надо сделать вложенные запросы к разным базам. для пояснения: пусть Т1 - справочная Т2 внешняя Т3 конечная таблица тогда моя конструкция должна быть примерно такой cn_base.Execute "SELECT * INTO T3 " & _ "FROM OPENROWSET ('Data source=...','SELECT * FROM T2 WHERE t2.pn in (SELECT P2 FROM T1 Where p1=<критерий> )') " я честно говоря не уверен в ее работоспособности и конструкция 'Data source=...' видимо зависит от операционки как я уже писал выше. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2012, 13:14 |
|
Вставка набора записей.
|
|||
---|---|---|---|
#18+
так оберните свой вызов на сервере в ХП и вызывайте её с нужными вам параметрами. на сервере и линковать можно другие серверы/базы ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2012, 13:16 |
|
Вставка набора записей.
|
|||
---|---|---|---|
#18+
qwerty112Alex_menЛогика примерно такая есть 3 таблицы: первая таблица справочная содержит набор записей на основании части которых(отобранной по определенному критерию) будет сделан отбор данных во внешней таблице и вот этот то набор и хотелось бы впихнуть сразу в конечную таблицу без цикла. Единственное получается что при добавлении набор данных отобранный во внешней таблице должен быть расширен на одно поле (имя пользователя который это делает). Возможно ли это сделать без цикла? можно сериализовать эти отобранные записи в xml и уже его отправить на сервер в ХП для вставки Этотна мой взгляд излишнее усложнение, лишний так сказать посредник ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2012, 13:58 |
|
Вставка набора записей.
|
|||
---|---|---|---|
#18+
Konst_One, Да про хранимки то я понял, мне интересно можно ли такое кодом реализовать. Я же говорю интерес чисто теоретический. Понятно что это будет медленнее чем хранимая процедура. Интересно саму возможность исследовать понять и разобрать по винтикам. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2012, 14:00 |
|
Вставка набора записей.
|
|||
---|---|---|---|
#18+
Alex_men, как бе собрать рекордсет и updatebatch . В чем проблема то? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2012, 14:01 |
|
Вставка набора записей.
|
|||
---|---|---|---|
#18+
QValDAlex_men, как бе собрать рекордсет и updatebatch . В чем проблема то? Тут у меня пробельчик в знаниях который и хочу восполнить. До конца не понимаю как работает batch. Сейчас параллельно сижу читаю и ставлю опыты. Покамест у меня есть некий рекордсет RST. я пишу такой код Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
У меня добавляется только одна запись, соответственно первая в рекордсете. Где я ошибаюсь? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2012, 14:37 |
|
Вставка набора записей.
|
|||
---|---|---|---|
#18+
Код: vbnet 1. 2. 3.
это и есть твоя одна запись, больше ничего не добавляется. задача то какая? что такое P2 из T2 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2012, 14:40 |
|
Вставка набора записей.
|
|||
---|---|---|---|
#18+
код абсурдный, происходит добавление записи из текущей, зачем? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2012, 14:41 |
|
Вставка набора записей.
|
|||
---|---|---|---|
#18+
Alex_menQValDAlex_men, как бе собрать рекордсет и updatebatch . В чем проблема то? Тут у меня пробельчик в знаниях который и хочу восполнить. До конца не понимаю как работает batch. Сейчас параллельно сижу читаю и ставлю опыты. Покамест у меня есть некий рекордсет RST. я пишу такой код Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
У меня добавляется только одна запись, соответственно первая в рекордсете. Где я ошибаюсь? Заполняешь первый рекордсет Код: vbnet 1. 2.
Создаешь 2-й. В цикле по первому заполняешь 2-й Код: vbnet 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2012, 15:12 |
|
Вставка набора записей.
|
|||
---|---|---|---|
#18+
Konst_One Код: vbnet 1. 2. 3.
это и есть твоя одна запись, больше ничего не добавляется. задача то какая? что такое P2 из T2 ? Хорошо как мне в таблицу Т3 записать данные отобранного рекордсета плюс в дополнительном поле P3 таблици Т3 должно подставляться указанное мною значение "USER"? Konst_Oneкод абсурдный, происходит добавление записи из текущей, зачем? т.к. задачи которые решал раньше не требовали группового добавления/обновления записей, то и привык как то по одной. Сейчас скажем реши освоить что то новое, на будущее. А вот как наборами записей оперировать пока не освоился. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2012, 15:13 |
|
Вставка набора записей.
|
|||
---|---|---|---|
#18+
в цикле не забудь переходить на след запись Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2012, 15:16 |
|
Вставка набора записей.
|
|||
---|---|---|---|
#18+
Почитай любую книжку по основам языка SQL, ты удивишься, как вместо двух экранов кода на бэйсике, ты сможешь написать одну строку на SQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2012, 15:16 |
|
Вставка набора записей.
|
|||
---|---|---|---|
#18+
Shocker.Pro, как раз пошел на курсы ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2012, 15:48 |
|
Вставка набора записей.
|
|||
---|---|---|---|
#18+
QValDЗаполняешь первый рекордсет Код: vbnet 1. 2.
Создаешь 2-й. В цикле по первому заполняешь 2-й Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Т.е. без цикла не сделать, ну тогда я примерно так и делал. Ну а для больших объемов хранимки... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2012, 15:52 |
|
Вставка набора записей.
|
|||
---|---|---|---|
#18+
Alex_menqwerty112пропущено... можно сериализовать эти отобранные записи в xml и уже его отправить на сервер в ХП для вставки Этотна мой взгляд излишнее усложнение, лишний так сказать посредник сложность - кажущаяся, xml-строку можно получить одним простым запросом + ADO.Recordset.getstring (это если не брать во внимание стандартные АДО-варианты типа Save (.. adPersistXML)) а других вариантов - часто и нет ("перекачивание" из рекордсета в рекордсет - не обсуждается) линкед сервер / OPENROWSET и прочая - требуют "не дохлых" прав, для начала (и должны быть на этом сервере разрешены, а сервер конечно, в Омерике :)) ), даа, и плохо это в принципе - "зашитая" логика в клиенте ... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2012, 16:05 |
|
Вставка набора записей.
|
|||
---|---|---|---|
#18+
qwerty112, хм попробую этот вариант тоже разобрать, спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2012, 16:16 |
|
Вставка набора записей.
|
|||
---|---|---|---|
#18+
Alex_menQValDЗаполняешь первый рекордсет Код: vbnet 1. 2.
Создаешь 2-й. В цикле по первому заполняешь 2-й Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Т.е. без цикла не сделать, ну тогда я примерно так и делал. Ну а для больших объемов хранимки... Чуешь разницу между нагрузкой на сервер бд и нагрузкой на сервер приложений? Одно дело в цикле выполнить тыщу запросов и совсем другое - выбрать данные, собрать(циклом на стороне сервера приложений) и одним запросом вставить. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2012, 16:38 |
|
Вставка набора записей.
|
|||
---|---|---|---|
#18+
QValDЧуешь разницу между нагрузкой на сервер бд и нагрузкой на сервер приложений? Одно дело в цикле выполнить тыщу запросов и совсем другое - выбрать данные, собрать(циклом на стороне сервера приложений) и одним запросом вставить.особенно по сети через модем. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2012, 16:57 |
|
Вставка набора записей.
|
|||
---|---|---|---|
#18+
Konst_One, а можно ли в инструкции Код: vbnet 1.
вместо прописывания строки подключения использовать открытый connection ? Меня что то утомило то обстоятельство, что если открываю connection используя UDL файлы, то все работает как часы, если использую строку подключения (к томуже источнику данных в данном случае DBF) так он гад поработает месяц другой, а потом отвалится с ошибкой "источник данных не найден или не указан драйвер используемый по умолчанию". Сейчас уже второе пришествие данного бага, в прошлый раз помогло исправление параметра в реестре. Параметр остался на месте,машина моя для разработки. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2013, 18:48 |
|
Вставка набора записей.
|
|||
---|---|---|---|
#18+
Alex_men, нет OPENROWSET - это инструкция ядра БД ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2013, 08:08 |
|
|
start [/forum/topic.php?fid=60&msg=37899218&tid=2157054]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
others: | 17ms |
total: | 151ms |
0 / 0 |