powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как вставить длинный запрос в VBA
25 сообщений из 27, страница 1 из 2
Как вставить длинный запрос в VBA
    #32884027
Yura_s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть запрос, текст которого состоит из около 10 тыс. символов. Его, этот запрос, необходимо выполнить в коде VBA посредством

CurrentDb.Execute "тест большого запроса"

В VBA не помещается в одну строку такой длинный запрос (10 тыс. символов). Можно ли эту строку как-то разбить на несколько, но при этом, чтобы она воспринималась как один непрерывный запрос?
...
Рейтинг: 0 / 0
Как вставить длинный запрос в VBA
    #32884101
Alexey Sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно. Символ переноса не поможет, например так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
dim s as string
s=""
s=s & " frag1 ......."
s=s &  "...frag2...."
......

currentdb.execute s,dbfailonerror

или хранить текст в мемо-поле, файле - как удобнее
без dbfailonerror возможны чудеса

P.S. Если запрос - пачка INSERT или несколько других запросов, то CurrentDb.Execute такое не переваривает(чтоб они сдохли :)
...
Рейтинг: 0 / 0
Как вставить длинный запрос в VBA
    #32884131
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yura_sЕсть запрос, текст которого состоит из около 10 тыс. символов. Его, этот запрос, необходимо выполнить в коде VBA посредством

CurrentDb.Execute "тест большого запроса"

В VBA не помещается в одну строку такой длинный запрос (10 тыс. символов). Можно ли эту строку как-то разбить на несколько, но при этом, чтобы она воспринималась как один непрерывный запрос?
Что значит не влезает:
В переменную? - точно влезает
или на экран? - тогда как сказали выше или так:
Код: plaintext
1.
2.
3.
4.
s = "aaa" & _
"bbb" & _
...
"yyy" & _
"zzz"

PS: Вот только запрос такой длины вряд ли Акс захотит выполнять.
...
Рейтинг: 0 / 0
Как вставить длинный запрос в VBA
    #32884146
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Откройте страшную тайну, откуда в запросе 10000 символов ? Это SQL процедура ? Данные для вставки ?
...
Рейтинг: 0 / 0
Как вставить длинный запрос в VBA
    #32884168
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист-ЛюбительОткройте страшную тайну, откуда в запросе 10000 символов ? Это SQL процедура ? Данные для вставки ?
скорее последнее - но это ИМХО
...
Рейтинг: 0 / 0
Как вставить длинный запрос в VBA
    #32884171
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда почему не разбить на куски
...
Рейтинг: 0 / 0
Как вставить длинный запрос в VBA
    #32884189
Yura_s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Программист-ЛюбительОткройте страшную тайну, откуда в запросе 10000 символов ? Это SQL процедура ? Данные для вставки ?

Это инсерт-селект для слияния двух таблиц, в которых по 106 полей каждая. А запрос должен работать. Кол-во символов в запросе в Аксессе, на сколько мне известно ограничено 64000.
...
Рейтинг: 0 / 0
Как вставить длинный запрос в VBA
    #32884216
Alexey Sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну дык помести текст в таблицу в мемо-поле и достань хоть DLookup'ом
...
Рейтинг: 0 / 0
Как вставить длинный запрос в VBA
    #32884220
Alexey Sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в .execute можно не только константы использовать но и переменные и выражения
...
Рейтинг: 0 / 0
Как вставить длинный запрос в VBA
    #32884280
Фотография Shark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>В VBA не помещается в одну строку такой длинный запрос (10 тыс. символов)
There are two kinds of strings: variable-length and fixed-length strings.

A variable-length string can contain up to approximately 2 billion (2^31) characters.


A fixed-length string can contain 1 to approximately 64K (2^16) characters.

Так что два миллиарда можно. Почему у тебя 10 тыс не поместилось- ХЗ
...
Рейтинг: 0 / 0
Как вставить длинный запрос в VBA
    #32884289
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"инсерт-селект для слияния двух таблиц"

Если инсерт, то можно вставлять порциями.

Слияние двух таблиц в третью - неужели список полей не влезает ?

В общем запрос себе не представляю. Дайте пример, заменив куски многоточием, чтобы структура была понятна.
...
Рейтинг: 0 / 0
Как вставить длинный запрос в VBA
    #32884432
Yura_s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
paparomeЧто значит не влезает:
В переменную? - точно влезает

А разве кол-во символов в переменной типа String не ограничено 255-ю?
...
Рейтинг: 0 / 0
Как вставить длинный запрос в VBA
    #32884474
Yura_s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Программист-ЛюбительВ общем запрос себе не представляю. Дайте пример, заменив куски многоточием, чтобы структура была понятна.

вот такой запрос:

INSERT INTO tb_main(field1,field2,...,field106,)
SELECT
tb_main_new.field1 AS Выражение1,
tb_main_new.field2 AS Выражение2,
...,
tb_main_new.field106 AS Выражение106
FROM [" & путь к базе с таблицей tb_main_new& "].tb_main_new




tb_main и tb_main_new - таблицы с одинаковой струтурой.
...
Рейтинг: 0 / 0
Как вставить длинный запрос в VBA
    #32884508
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
106 полей не влезли в 10000 символов ?

Если структура одинакова до имен полей и их порядка, то можно сделать INSERT INTO <куда> SELECT * FROM <откуда>
...
Рейтинг: 0 / 0
Как вставить длинный запрос в VBA
    #32884519
Yura_s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Программист-ЛюбительЕсли структура одинакова до имен полей и их порядка, то можно сделать INSERT INTO <куда> SELECT * FROM <откуда>

Одно (ключевое поле) нужно игнорировать при вставке, вот и приходиться перечислять все, кроме одного. С SELECT * FROM не получается.
...
Рейтинг: 0 / 0
Как вставить длинный запрос в VBA
    #32884542
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я проверил на своей табличке, с автоинкрементным первичным ключом - все OK. INSERT INTO tbTownNew SELECT * FROM tbTown Первый раз прекрасно вставляет. Потом только те записи, кода которых нет в tbTownNew.

Можно сократить SQL

INSERT INTO tb_main(field1,field2,...,field106,)
SELECT
field1,
field2,
...,
field106
FROM [" & путь к базе с таблицей tb_main_new& "].tb_main_new

экономится 106 * длина имени таблицы + длина " AS .... "
...
Рейтинг: 0 / 0
Как вставить длинный запрос в VBA
    #32884548
Alexey Sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Yura_s : так что у тебя куда не лезет? Текст запроса в переменную String?
...
Рейтинг: 0 / 0
Как вставить длинный запрос в VBA
    #32884621
Yura_s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey Sh2 Yura_s : так что у тебя куда не лезет? Текст запроса в переменную String?

Да. Когда я прогоняю программу в пошаговом режиме, то в окне Watches значение переменной с запросом - только первйх 254 символа.
Сливаю так:
s = "INSERT INTO ...."
s = s & "...................."
s = s & "...."
s = s & "...."


Цитирую из Help VBA :
"типы данных:
String
(variable-length) 10 bytes + string length 0 to approximately 2 billion
String
(fixed-length) Length of string 1 to approximately 65,400 "

Почему же у меня только 254??? Или это окно Watches не показывает больше 255 символов??
...
Рейтинг: 0 / 0
Как вставить длинный запрос в VBA
    #32884648
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Watches обрезает 255. Debug - побольше, но тоже режет.
...
Рейтинг: 0 / 0
Как вставить длинный запрос в VBA
    #32884740
Yura_s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Программист-ЛюбительЯ проверил на своей табличке, с автоинкрементным первичным ключом - все OK. INSERT INTO tbTownNew SELECT * FROM tbTown Первый раз прекрасно вставляет. Потом только те записи, кода которых нет в tbTownNew.

У меня так не получается.
Дело в том, что вставка производится из нескольких таблиц последовательно, но у всех вставляемых таблиц есть поля с одинаковыми значениями в первичном ключе и его нужно игнорировать при вставке. Новая вставленная запись получает новое порядковое значение. Как при этом соблюсти ссылочную целостность между вставляемыми значениями (таблиц в базе всего 34 :-)) я смутно представляю, но пока стоИт задача объеденить главные таблицы в базе.
...
Рейтинг: 0 / 0
Как вставить длинный запрос в VBA
    #32884766
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
INSERT INTO <куда> SELECT * FROM <откуда> WHERE <ключ> NOT IN (SELECT <ключ> FROM <куда>)

Ну а экономия на именах таблиц/полей неужели не помогла ?
...
Рейтинг: 0 / 0
Как вставить длинный запрос в VBA
    #32884772
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yura_s Дело в том, что вставка производится из нескольких таблиц последовательно, но у всех вставляемых таблиц есть поля с одинаковыми значениями в первичном ключе и его нужно игнорировать при вставке.
Код: plaintext
1.
2.
3.
Insert Into Tbl_New
Select Tbl_Old0000.*
From Tbl_Old0000 Left Join Tbl_New On Tbl_Old0000.PK = Tbl_New.PK
Where Tbl_New.PK Is Null
Не оно?
...
Рейтинг: 0 / 0
Как вставить длинный запрос в VBA
    #32885448
Yura_s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем за помощь! таблицы начали сливаться.
Но возникла по ходу вот такая проблема:
в операторе
SELECT .... FROM [" & путь к базе с таблицей tb_main_new& "].tb_main_new
в секции
&путь к базе с таблицей tb_main_new&
Может появиться путь вида:
C:\Documents and Settings\Administrator\Рабочий стол\Base
И при этом выдается "Ошибка синтаксиса в предложении FROM". Если папку с базой переместить в корень диска, то таких проблем не возникает. Эта проблема с длинными именами папок решается?
...
Рейтинг: 0 / 0
Как вставить длинный запрос в VBA
    #32885462
Alexey Sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю, как аксесс, а я убиваю за использование пробелов и русских букв в именах файлов, таблиц, полей

С нормальными путями проблем не было. Попробуй вместо квадратных скобок обратные кавычки ` , может поможет
...
Рейтинг: 0 / 0
Как вставить длинный запрос в VBA
    #32885497
Yura_s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey ShНе знаю, как аксесс, а я убиваю за использование пробелов и русских букв в именах файлов, таблиц, полей

С нормальными путями проблем не было. Попробуй вместо квадратных скобок обратные кавычки ` , может поможет

Да я тоже убиваю своих юзверей за такие извращения, но этим продуктом будет пользоваться руководство, поэтому мои руки будут коротки, чтобы достать пользователей такого ранга :(
А кавычки уже пробовал - не помагает.
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как вставить длинный запрос в VBA
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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