Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: как получить в запросе имя таблицы
 
 автор: s_nm   (14.12.2010 в 12:26)   личное сообщение
 
 

необходимо сделать запрос из одной таблицы,
который вернет все её поля и все значения,
добавит одно поле , в котором в каждой строке будет фиксированное значение- возвращаемое функцией имя таблицы из которой делается запрос
собственно получается вопрос один:
1. как в запросе вернуть имя таблицы из которой делается запрос

  Ответить  
 
 автор: Дядя Федор   (14.12.2010 в 12:38)   личное сообщение
 
 

А функционал какой - в смысле - зачем?

  Ответить  
 
 автор: Bellerofont   (14.12.2010 в 12:56)   личное сообщение
 
 

SELECT *, "TestTable" As TableName
FROM TestTable;

  Ответить  
 
 автор: Дядя Федор   (14.12.2010 в 13:03)   личное сообщение
 
 



возвращаемое функцией имя таблицы из которой делается запрос


ФУНКЦИЕЙ!!!

Он оно чё

а если несколько таблиц в запросе - вернуть все таблицы

  Ответить  
 
 автор: Bellerofont   (14.12.2010 в 13:48)   личное сообщение
 
 

Если так уж надо функцией, то можно и функцией, которая в качестве аргумента получает имя запроса, например:

Public Function TableName(ByVal QueryName As String)
    TableName = CurrentDb.QueryDefs(QueryName).Fields(0).SourceTable
End Function


Естественно, что если надо получить все таблицы, то можно перебрать все поля ...
Функция приведена лишь для примера, в реале нежелательно вызывать CurrentDb для каждой записи.

  Ответить  
 
 автор: s_nm   (14.12.2010 в 14:22)   личное сообщение
 
 

Спасибо, это кажется то что надо, только в построителе когда пытюсь вызвать эту функцию в 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)
>а если несколько таблиц в запросе - вернуть все таблицы
ситуация ограничена - один запрос- одна таблица

  Ответить  
 
 автор: Bellerofont   (14.12.2010 в 14:44)   личное сообщение
 
 

только в построителе когда пытюсь вызвать эту функцию в 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

  Ответить  
 
 автор: Lukas   (14.12.2010 в 16:13)   личное сообщение
 
 

Можно собирать полное предложение SQL кодом, например как-то так:

Public Function GetSQL(strGroupeName As String) As String
     GetSQL="SELECT ... " & strGroupeName & "..."
End Function

Пользовать результаты функции по надобности, например как источник для формы/отчета или вывода "на сторону".

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList