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? Пусть каждый раз это будет новый файл, удалю его потом и всё.
Спасибо!
Crey-hen
Дата: 27.11.2015 00:56:59
sdku, спасибо за ответ.
с Like с синтаксисом разобралась. и сейчас ищется по части кода ТН ВЭД.
а с выгрузкой никак не выходит.
пишу в процедуре на нажатие кнопки:
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97, "Сводный запрос", "C:\Test.xls"
не работает.
а про CurrentDb.QueryDefs совсем ничего не могу понять. в английском хелпе разобраться не могу. можно, хоть пару слов для чего это "CurrentDb.QueryDefs("ИмяЗапроса").SQL = "strSQL""
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
А Вы не хотите создать отчет и уже потом делать с ним что пожелаете