|
|
|
| необходимо сделать запрос из одной таблицы,
который вернет все её поля и все значения,
добавит одно поле , в котором в каждой строке будет фиксированное значение- возвращаемое функцией имя таблицы из которой делается запрос
собственно получается вопрос один:
1. как в запросе вернуть имя таблицы из которой делается запрос | |
|
| |
|
|
|
| А функционал какой - в смысле - зачем? | |
|
| |
|
|
|
| SELECT *, "TestTable" As TableName
FROM TestTable; | |
|
| |
|
|
|
|
| Если так уж надо функцией, то можно и функцией, которая в качестве аргумента получает имя запроса, например:
Public Function TableName(ByVal QueryName As String)
TableName = CurrentDb.QueryDefs(QueryName).Fields(0).SourceTable
End Function
|
Естественно, что если надо получить все таблицы, то можно перебрать все поля ...
Функция приведена лишь для примера, в реале нежелательно вызывать CurrentDb для каждой записи. | |
|
| |
|
|
|
| Спасибо, это кажется то что надо, только в построителе когда пытюсь вызвать эту функцию в MYzapros в дополнительном поле: Выражение1: TableName([MYzapros]), выборка считает MYzapros параметром и запрашивает его значение.
функцию воткнул в модуль проекта.
Ещё чуток подтолкните как правильно использовать функцию в запросе
>автор: Bellerofont (14.12.2010 в 12:56)
>SELECT *, "TestTable" As TableName
>FROM TestTable
это понятно, только таблиц много и писать длинные имена в ручную очень скучно, темболее количество таблиц может увеличиться и легче один раз написать функцию,
>автор: Дядя Федор (14.12.2010 в 12:38)
>А функционал какой - в смысле - зачем?
в базе есть полтора десятка импортированных таблиц,
имена таблиц совпадают с расположением данных в определенной(не акцесовской) структуре данных.
таблицы по структуре принадлежат двум группам,
необходимо сделать два запроса на объединения в таблицах в рамках группы,
а затем из объединений сделать выборку совпадающих по значению одинакового для обеих групп поля. выборка должна давать также представление к какой таблице первой группы принадлежит запись.
запросы на объединения и выборку - простейшие и я уже сделал как надо, осталось прикрутить имя таблицы
>автор: Дядя Федор (14.12.2010 в 13:03)
>а если несколько таблиц в запросе - вернуть все таблицы
ситуация ограничена - один запрос- одна таблица | |
|
| |
|
|
|
| только в построителе когда пытюсь вызвать эту функцию в MYzapros в дополнительном поле: Выражение1: TableName([MYzapros]), выборка считает MYzapros параметром и запрашивает его значение.
Аргумент же строка, поэтому должно быть Выражение1: TableName("MYzapros")
А модуль лучше такой:
Option Compare Database
Option Explicit
Private CurrentQuery As Object
Public Function TableName(ByVal QueryName As String)
If CurrentQuery Is Nothing Then
Set CurrentQuery = CurrentDb.QueryDefs(QueryName)
ElseIf StrComp(CurrentQuery.Name, QueryName, vbTextCompare) <> 0 Then
Set CurrentQuery = CurrentDb.QueryDefs(QueryName)
End If
TableName = CurrentQuery.Fields(0).SourceTable
End Function
|
| |
|
| |
|
|
|
| Можно собирать полное предложение SQL кодом, например как-то так:
Public Function GetSQL(strGroupeName As String) As String
GetSQL="SELECT ... " & strGroupeName & "..."
End Function
|
Пользовать результаты функции по надобности, например как источник для формы/отчета или вывода "на сторону". | |
|
| |