По нажатию кнопки на форме выполнить запрос и выгрузить результат в Excel

Crey-hen
Дата: 24.11.2015 17:20:30
Добрый день!
С Access никогда не работала. Задумала автоматизировать часть своей работы с его помощью, но так закопалась, что и работать стало некогда. Буду благодарна за помощь.
Пишу подробно, потому что не пойму, на что внимание обратить.
Сейчас пока всего 3 таблица про экспорт и импорт страны. Таблицы:
country (с названиями стран и идентификатором),
code (там кода ТН ВЭД - десятизначное число, но поле текстовое, потому что код может начинаться с "0" и это важно, т.е. 0210 и 210 - разные товары; ещё в таблице название кода и идентификатор),
2009 (поля с экспортом и импортом, идентификатором страны и кодом ТН ВЭД).

Есть запрос (пока только про импорт):
SELECT country.country_name, [2009].im_t, [2009].im_unit, [2009].im_doll, code.code
FROM country INNER JOIN (code INNER JOIN 2009 ON code.code=[2009].code) ON country.Код=[2009].country_code
WHERE (code.code=forms!FZapros.ved and country.country_name=forms!FZapros.Spcon);

Хотелось бы, что выбрав в форме FZapros страну из списка (Spcon) и введя код ТН ВЭД (а чаще только часть его) в поле (ved), выполнялся этот запрос, а результат выгружался в Excel.

Есть 3 вопроса:
1) Со списком все хорошо, а вот в поле чаще всего мне нужно не подробное десятизначное значение, а покрупнее. Т.е. надо, чтобы я ввела "0210", а мне выдавалось "0210000201", "0210000203", "0210000209" и т.д.
2) Никак не пойму, как подвязать выполнение запроса к кнопке на форме. Сейчас запрос выполняется, если выбрать-ввести значения на форме, но неудобно же) нужно идти запрос, просматривать его в режиме таблицы.
3) Можно как-то результат запроса сразу выгружать в файл Excel? Пусть каждый раз это будет новый файл, удалю его потом и всё.

Спасибо!
sdku
Дата: 24.11.2015 18:01:49
Crey-hen,
Like,TransferSpreadsheet и CurrentDb.QueryDefs("ИмяЗапроса").SQL = "strSQL"
Crey-hen
Дата: 27.11.2015 00:56:59
sdku, спасибо за ответ.
с Like с синтаксисом разобралась. и сейчас ищется по части кода ТН ВЭД.
а с выгрузкой никак не выходит.
пишу в процедуре на нажатие кнопки:
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97, "Сводный запрос", "C:\Test.xls"
не работает.
а про CurrentDb.QueryDefs совсем ничего не могу понять. в английском хелпе разобраться не могу. можно, хоть пару слов для чего это "CurrentDb.QueryDefs("ИмяЗапроса").SQL = "strSQL""
sdku
Дата: 27.11.2015 11:48:31
Crey-hen,
Crey-hen
Дата: 30.11.2015 02:07:09
sdku,
спасибо огромное! заработало) где тут ставить плюсы в карму?
при чем работает даже без этой страшной строчки с CurrentDb.QueryDefs. я так и не поняла, зачем в VB переписывать уже готовый запрос.
а можно сделать так, чтобы этот экселевский файл, в который результат запроса сохраняется, у меня сразу открывался?
sdku
Дата: 30.11.2015 10:21:48
Crey-hen,
это в общий модуль
Option Compare Database
Option Explicit

Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
                (ByVal Hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
                ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Public Const SW_SHOWMAXIMIZED = 3
Public Const SW_SHOWDEFAULT = 10
Public Const SW_SHOWNOACTIVATE = 4
Public Const SW_SHOWNORMAL = 1

Function StartOfFile(strNameFile As String)
Dim intResult As Integer
intResult = ShellExecute(Application.hWndAccessApp, "open", strNameFile, 0, 0, SW_SHOWNORMAL)
If intResult = 31 Then
    MsgBox "Незарегестрированный тип файла"
End If
End Function

Существующую процедуру дополнить строкой:
StartOfFile ("d:\zapros.xlsx") ' путь тот же, что и в TransferSpreadsheet

А Вы не хотите создать отчет и уже потом делать с ним что пожелаете

sdku
Дата: 30.11.2015 10:27:33
Вдогонку:
Crey-hen
... я так и не поняла, зачем в VB переписывать уже готовый запрос.
А что, за все время существования БД Вы параметр менять не будете?
Анатолий ( Киев )
Дата: 30.11.2015 11:55:53
Crey-hen
а можно сделать так, чтобы этот экселевский файл, в который результат запроса сохраняется, у меня сразу открывался?
Зная путь к файлу, его можно открыть методом FollowHiperlink объекта Application.
Еще файл Excel можно создать методом DoCmd.OutputTo. Он умеет и сразу открывать созданный файл.
Crey-hen
Дата: 01.12.2015 16:57:05
sdku,
снова спасибо! мне теперь нужно время, чтобы понять все эти многа букв) и всё переварить.

sdku
Вдогонку:
Crey-hen
... я так и не поняла, зачем в VB переписывать уже готовый запрос.
А что, за все время существования БД Вы параметр менять не будете?


нет, конечно. но я прямо в запросе ссылаюсь forms!FZapros.Spcon (страна т.е.) но вообщем, не суть.
Crey-hen
Дата: 01.12.2015 16:59:28
Анатолий ( Киев ),

спасибо! попробую.