Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
4 / 4 / 0
Регистрация: 09.01.2014
Сообщений: 130
1

Импорт текстовых файлов средствами VBA. Ошибка около конструкции IN

20.06.2015, 16:50. Показов 3060. Ответов 31
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, уважаемые форумчане!
Возможно я ошибся разделом. Если это так, то я не специально.
Вопрос следующий. Каким образом составить запрос на выборку к текстовому файлу (txt) с последующей вставкой в MS SQL? Сразу отвечу на некоторые возможные вопросы от вас.
- Возможность импортировать напрямую в MS SQL отсутствует (bulk insert и прочее). Я не админ и таких прав мне не дадут.
- Импортировать построчно не вариант. Каждый файл весит по 1,5 ГБ. Более 1 млн строк. Очень долго.
Такой запрос говорит, что "ошибка синтаксиса около конструкции in..."
T-SQL
1
2
3
INSERT INTO testTbl (inn, schet, summa)
SELECT inn, schet, summa
FROM [test#txt] IN 'C:\Users\Александр\Documents\'[Text;DSN=testSpec;Imex=1;HDR=No]
Перед этим соотвественно подключаюсь к серверу, при попытке вызова Execute выпадает в ошибку, описанную ранее.
Если этот же запрос делать с базой access все импортируется идеально.
Заранее всем спасибо за помощь.

С уважением, Александр.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.06.2015, 16:50
Ответы с готовыми решениями:

Импорт текстовых файлов в таблицы Access через VBA
При создании базы данных столкнулся с проблемой... С импортом текстовых файлов в таблицы Access....

Импорт таблиц из Excel в Access средствами VBA
Здравствуйте еще раз, продолжаю разбираться с MS Access и VBA. И появился еще один вопрос. Я...

Импорт листа из экселя в отчет access средствами vba
Всем привет. Подскажите как написать программу, которая при нажатии на кнопку в форме access-а...

Импорт текстовых файлов .doc, .docx
Форумчане, доброго времени суток! Прошу Вашей помощи! Есть форма, через которую можно...

31
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
20.06.2015, 17:22 2
Не скажу в чем дело с сервером, вроде на вид все правильно.
Я бы не стал особо заморачиваться и сделал через промежуточную аксовскую таблицу. Т.е. из текстового файла импортировать в таблицу Access, а из нее уже на сервер. Разница во времени будет несущественная, так как основное время уйдет на импорт из текстового файла.
1
4 / 4 / 0
Регистрация: 09.01.2014
Сообщений: 130
20.06.2015, 17:48  [ТС] 3
mobile, спасибо за проявленный интерес к моей теме. Я так и пытался сделать, но когда access разбухает до 2 ГБ, он обваливается. Пытался грузить в одну БД access, вторую использовал как интерфейс. Потом программно удалял из второй БД данные после экспорта, программно сжимал и по новой (файлов много надо грузить). Но все это похоже на "танцы с бубном". Думал может есть решение практичное и элегантное.
Буду признателен за любую помощь в моем вопросе.

С уважением, Александр.
0
8860 / 5908 / 585
Регистрация: 27.03.2013
Сообщений: 19,575
20.06.2015, 17:52 4
Цитата Сообщение от alexandrstegnin Посмотреть сообщение
...когда access разбухает до 2 ГБ...
А не пытались - Сжать и Восстановить, иногда на 90% вес скидывается.
1
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
20.06.2015, 18:13 5
alexandrstegnin, прилинковать серверную таблицу не пробовали? По идее, в этом случае добавление данных совершается джетовским движком (а не серверным). Который, в данном случае, не дает ошибки.
1
4 / 4 / 0
Регистрация: 09.01.2014
Сообщений: 130
20.06.2015, 19:14  [ТС] 6
kmv-puh, спасибо за ответ. Постом выше Вашего я описал, что делал это программно. Файлов много, поэтому после обработки данных и экспорта в другую таблицу, удалял данные из, так сказать, временной БД, програмно сжимал, потом обрабатывал следующий файл и так далее.
mobile, прилинковать таблицу access к серверу? У меня в таблицу access не уместятся все данные. Если я Вас не правильно понял, объясните немного подробней, что Вы имели ввиду.
Вопрос остается открытым.
Буду признателен за любые мысли.

С уважением, Александр.
1
Эксперт MS Access
17487 / 7249 / 1651
Регистрация: 21.06.2012
Сообщений: 13,865
20.06.2015, 19:19 7
Цитата Сообщение от mobile Посмотреть сообщение
прилинковать серверную таблицу не пробовали
SQL сервера таблицу.
1
8860 / 5908 / 585
Регистрация: 27.03.2013
Сообщений: 19,575
20.06.2015, 19:41 8
Я конечнго не супер Асс, но просто слышал краем ужа, вот все возможные методы как побороть беду обычно и перечисляю.
Хотя вот вижу, магистры подключились, по любому поборете.
1
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
20.06.2015, 20:48 9
Цитата Сообщение от alexandrstegnin Посмотреть сообщение
прилинковать таблицу access к серверу?
Ровно наоборот! :-) Серверную таблицу в MS Access.

Сейчас попробовал. Стоит MS SQL Server 2008 R2. Вот точно по Вашей схеме, но с прилинкованной в MS Access серверной таблицей, запрос прошел, данные добавились. Правда, не полуторагигабайтный файл, но как мне кажется, размер значения не имеет.
1
4 / 4 / 0
Регистрация: 09.01.2014
Сообщений: 130
20.06.2015, 22:10  [ТС] 10
ltv_1953, спасибо, что присоединились к моему вопросу.
kmv-puh, в любом случае, спасибо за мысли.
mobile, сделать экспорт из access в MS SQL с прилинковыванием таблицы? Не до конца понял. Что мне это даст? В access у меня не будет обваливаться приложение? У меня проходит импорт в MS SQL, а access, как проводник в этом деле. Мне главное, чтобы я смог грузить данные в MS SQL из access. Такая вот задача.
Вопрос остается открытым.
Спасибо всем за участие.

С уважением, Александр.

Добавлено через 12 минут
Так же прошу посмотреть пример запроса в этой теме (Запрос максимальной суммы по счету и ИНН). Как можно сделать его под access? (с iPad почему-то не работает тег гиперссылки). Заранее всем спасибо.

С уважением, Александр.
0
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
20.06.2015, 23:02 11
alexandrstegnin, прилинкованная таблица НЕ содержит данные в Access. Данные на сервере как были, так и остаются. И акс будет именно тем, что Вы хотите: "как проводник в этом деле". Линкование таблицы создает подключение к источнику, но не импортирует файл к себе. Таким образом, создав коннекшен к SQL-server, Вы можете добиться цели, но уже не серверными средствами, а с помощью протокола ODBC. Собственно, Вы им уже пользуетесь, когда создали ДСН к текстовому файлу, но теперь я предлагаю сделать и экспорт в SQL-server средствами ODBC, а не серверными.

Попробуйте вариант на тестовой таблице сервера. Если получится, то на боевой. Прилинковать серверную таблицу к аксу несложно. Есть мастер, он поможет.

Добавлено через 49 минут
Цитата Сообщение от alexandrstegnin Посмотреть сообщение
прошу посмотреть пример запроса в этой теме (Запрос максимальной суммы по счету и ИНН). Как можно сделать его под access?
В предположении, что Ваш первый запрос в теме был правильный. Только не было инн.

Можно добавить коррелированный подзапрос по сумме и счету. Возможно подзапрос придется связать еще с FirstName. Но это Вам виднее
SQL
1
2
3
4
5
6
7
8
9
SELECT *, (SELECT inn_spis FROM UPP_OnePPSpis WHERE summ_spis=[Макс сумма] AND schet=t1.schet) AS inn
FROM
(SELECT DISTINCT t1.FirstName, t1.schet, MAX(t1.summ_spis) AS [Макс сумма]
FROM dbo.UPP_OnePPSpis AS t1
LEFT JOIN
(SELECT schet, inn_spis AS [ИНН] FROM dbo.UPP_OnePPSpis) AS t2 ON t1.schet = t2.schet
WHERE (t1.tip_klienta IS NOT NULL AND t1.tip_klienta IN (207, 217, 218)) AND t1.kod_block = 0 AND t1.inn_spis > 0
GROUP BY t1.FirstName, t1.schet
ORDER BY schet) q
1
4 / 4 / 0
Регистрация: 09.01.2014
Сообщений: 130
21.06.2015, 17:58  [ТС] 12
mobile, спасибо. Прилинковал таблицу, загрузил данные, попробовал вручную добавить - работает и access не разбухает. Очень интересное решение. Поиграюсь еще с настройками импорта и будет просто восхитительно.
По поводу запроса:
Хотел уточнить, но видимо забыл. Есть запрос в посте 5 и в посте 10 (Запрос максимальной суммы по счету и ИНН). Вопрос о том, как скорректировать мой запрос из поста 5 или как переделать запрос из поста 10 (access не распознает row_number, как я понял). Если Вас не затруднит помочь в этом вопросе, буду признателен.
Заранее спасибо.

С уважением, Александр.
0
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
22.06.2015, 18:26 13
Запрос достаточно сложный и для полного понимания хотелось бы видеть БД. Хотя бы фрагмент с небольшим количеством данных. Но таких, которые нужны для решения задачи.
Если там секретные или конфиденциальные данные, замените текст на соответствующую абракадабру. В числах, как правило, секретов нет.
Акцессную таблицу можно получить из серверной запросом Select * Into [таблица] from [сервернаятаблица]
1
4 / 4 / 0
Регистрация: 09.01.2014
Сообщений: 130
22.06.2015, 21:10  [ТС] 14
mobile, прикладываю кусок базы. Некоторые данные полностью удалены, они в отборе не участвуют. Оставил искаженные данные, но полностью отвечают требованиям, которые мне нужны для запроса.
Что нужно:
1. Не учитывать в отборе записи, у которых ИНН НЕ пусто и больше 0.
2. Учитывать только те записи, в которых код блокировки = 0
3. Не учитывать записи, если тип клиента не 207, 217, 218.
Дальше нужно выбрать данные:
4. Если с одного и того же ИНН поступила на один и тот же счет одинаковая сумма, то не учитывать ту запись, у которой дата выдачи меньшая.
5. Далее сложить суммы поступившие с одного и того же ИНН на один и тот же счет, но только с разными суммами.
6. Далее выбрать максимальную сумму, поступившую на один и тот же счет от одного и того же ИНН и показать все сопутствующие данные.
Если что-то не совсем понятно объяснил, готов прокомментировать.
Заранее спасибо за помощь.

С уважением, Александр.
0
4 / 4 / 0
Регистрация: 09.01.2014
Сообщений: 130
22.06.2015, 21:17  [ТС] 15
Вложение забыл...
Вложения
Тип файла: zip testDB.zip (15.3 Кб, 6 просмотров)
0
369 / 88 / 8
Регистрация: 14.08.2012
Сообщений: 248
22.06.2015, 21:26 16
Цитата Сообщение от alexandrstegnin Посмотреть сообщение
1. Не учитывать в отборе записи, у которых ИНН НЕ пусто и больше 0.
В представленной таблице все ИНН не пустые и больше 0. В запрос попадет ничего. И ничего больше.
1
4 / 4 / 0
Регистрация: 09.01.2014
Сообщений: 130
22.06.2015, 21:36  [ТС] 17
odbcsql, спасибо за поправку. Читать в редакции "Учитывать только те записи у которых ИНН НЕ пусто и больше 0".
0
Эксперт MS Access
17487 / 7249 / 1651
Регистрация: 21.06.2012
Сообщений: 13,865
22.06.2015, 22:12 18
Цитата Сообщение от alexandrstegnin Посмотреть сообщение
4. Если с одного и того же ИНН поступила на один и тот же счет одинаковая сумма, то не учитывать ту запись, у которой дата выдачи меньшая.
5. Далее сложить суммы поступившие с одного и того же ИНН на один и тот же счет, но только с разными суммами.
Зачем 4, если в 5 только уникальные суммы?
1
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
23.06.2015, 01:26 19
Если правильно понял ТЗ...

Смотрите запрос qFinal. Запросы qVib и qVib2 вспомогательные
Вложения
Тип файла: rar testDB.rar (16.6 Кб, 7 просмотров)
1
4 / 4 / 0
Регистрация: 09.01.2014
Сообщений: 130
23.06.2015, 20:36  [ТС] 20
ltv_1953, спасибо, что присоединились к обсуждению. Хотел дать как можно больше подробностей.
mobile, всё равно не то. Я добавил в файл таблицу Itog, это то, что должно получиться на выходе. Возможно я не самый лучший "объясняльщик". Если не затруднит, посмотрите. Голову всю сломал... 5 день сижу и ничего не могу поделать. Что-то постоянно не хватает.
Заранее спасибо всем за помощь.

С уважением, Александр.
Вложения
Тип файла: zip testDB.zip (19.1 Кб, 6 просмотров)
0
23.06.2015, 20:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.06.2015, 20:36
Помогаю со студенческими работами здесь

Импорт офисных файлов в таблицы Access через VBA (БД почтовых файлов)
помогите пожалуйста как работать с файлам в Access...основные поля и форму сделал, таблицу тоже,...

Импорт многомиллионных текстовых файлов в MS Excel средствами мастера импорта
Доброго времени суток, уважаемые обитатели форума! По работе появилась необходимость...

Ошибка: неправильный синтаксис около конструкции
Здравствуйте, пишу бд в RAD XE4 столкнулся с проблемой при создание нового клиента. на SQL servere...

Импорт текстовых файлов в Access
Привет, передо мной стоит такая задача. Много директорий, которые внутри содержат файлы с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru