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

Форум: MS ACCESS

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

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

 
 

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

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

тема: Как передать переменную из Vba в готовый запрос
 
 автор: mvo   (18.04.2010 в 22:54)   личное сообщение
 
 

Запрос

SELECT main.year, main.[1_10]
FROM main
WHERE main.year Between (Forms!graf_analiz!ot) And (Forms!graf_analiz!do);

имеет вид сводной диаграммы как передать из обработчика (нажатие кнопки) вычисляемую переменную nomer на место [1_10] и открыть запрос этой же кнопкой.

  Ответить  
 
 автор: Stanislav   (19.04.2010 в 04:14)   личное сообщение
 
 

Чтобы передать значение в запрос, надо вставить в него глобальную функцию.
Создадим запрос:

SELECT main.year, main.GetNomer()
FROM main 
WHERE main.year Between (Forms!graf_analiz!ot) And (Forms!graf_analiz!do);

Сохраним этот запрос MyQuery.

Объявим глобальную функцию:

public funсtion GetNomer() as string
if Not IsNull(Nomer) then
GetNomer = Nomer
end function


Не забудьте про соответствие типов данных и доступность переменной Nomer для функции GetNomer().

По нажатию кнопки:

Nomer = "[1_10]"
docmd.OpenQuery "MyQuery"

Таким образом запрос обратится к функции GetNomer(), которая выдаст ему значение 1_10.

  Ответить  
 
 автор: mvo   (19.04.2010 в 08:21)   личное сообщение
5 Кб.
 
 

При написании main.GetNomer()

ELECT main.year, main.GetNomer()
FROM main  
WHERE main.year Between (Forms!graf_analiz!ot) And (Forms!graf_analiz!do); 

выдает ошибку функция не определена а при GetNomer() передает значение но не производится выборка столбца зазначеного в GetNomer() вот что выдает

  Ответить  
 
 автор: mvo   (19.04.2010 в 08:21)   личное сообщение
5 Кб.
 
 

А нужно

  Ответить  
 
 автор: mvo   (19.04.2010 в 08:25)   личное сообщение
21 Кб.
 
 

Сама база

  Ответить  
 
 автор: час   (19.04.2010 в 08:41)   личное сообщение
 
 

GetNomer() - в услловие отбора надо вписывать, а не в поле отбора

  Ответить  
 
 автор: mvo   (19.04.2010 в 08:45)   личное сообщение
 
 

А нужно динамически выбирать разные поля.

  Ответить  
 
 автор: час   (19.04.2010 в 08:46)   личное сообщение
 
 

ААААААААААААААААААААА
как вариант - можно программно создавать запрос, удаляя прежний с таким же именем.
то есть строить строку запроса собирая её из кусочков...

  Ответить  
 
 автор: час   (19.04.2010 в 08:51)   личное сообщение
 
 

как то так


tabk = "kas" & Forms![спрос]![Поле97]
tabd = "dog" & Forms![спрос]![Поле97]
b:
If НаличиеЗапроса("НОВАЯ ОБЩАЯ") = True Then DoCmd.DeleteObject acQuery, "НОВАЯ ОБЩАЯ"

Set dbs = CurrentDb
strSQL = "SELECT " & tabk & ".M,Сотрудники.кто, Сотрудники.Фамилия, " & tabk & ".MASTER ," & Forms![спрос]![Поле97]
 & "&" & """год""" & " AS Выражение2," & tabk & ".KASSA, " & tabk & ".DAT," & tabk & ".STAVKA 
FROM  Сотрудники, " & tabd & " INNER JOIN " & tabk & " ON " & tabd & ".KOD = " & tabk & ".KOD WHERE 
(((Сотрудники.кто)<>False)AND((" & tabk & ".MASTER)=[Сотрудники]![Фамилия]));"

Set qdf = dbs.CreateQueryDef("НОВАЯ ОБЩАЯ", strSQL)
qdf.Close
Set dbs = Nothing

  Ответить  
 
 автор: mvo   (19.04.2010 в 09:19)   личное сообщение
 
 

А как потом этот запрос настроить в виде сводной диаграммы?

  Ответить  
 
 автор: mvo   (19.04.2010 в 08:51)   личное сообщение
 
 

Спасибо попробуем.

  Ответить  
 
 автор: час   (19.04.2010 в 08:57)   личное сообщение
 
 


 Public rst As Recordset, tdf As TableDef, dbs As Database, qdf As QueryDef, strSQL As String, tabk As String, tabd As String



Объявление единожды глобальных переменных - в отдельном модуле

  Ответить  
 
 автор: Stanislav   (19.04.2010 в 09:12)   личное сообщение
 
 


GetNomer() - в услловие отбора надо вписывать, а не в поле отбора


Да, гоню. Так работать не будет.

  Ответить  
 
 автор: osmor   (19.04.2010 в 09:00)   личное сообщение
27 Кб.
 
 

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

  Ответить  
 
 автор: mvo   (19.04.2010 в 09:11)   личное сообщение
 
 

Не понял вроде бы тоже самое (нужно динамически выбирать разные поля).

  Ответить  
 
 автор: osmor   (19.04.2010 в 10:00)   личное сообщение
 
 

что то же не работает как надо?

  Ответить  
 
 автор: mvo   (19.04.2010 в 10:08)   личное сообщение
 
 

Только записывает значение GetNomer() в столбец. А нужно динамически выбирать разные поля из таблицы main. Например поле 1_10 потом другое.

  Ответить  
 
 автор: osmor   (19.04.2010 в 10:10)   личное сообщение
 
 

динамически от какого условия? Сейчас результат как в той картинке которую Вы дади как образец.

  Ответить  
 
 автор: mvo   (19.04.2010 в 10:14)   личное сообщение
 
 

В картинке выведены значения столбца 1_10. Они могут быть разными заносятся пользователем в общую таблицу main. И пользователь говорит хочу выбирать какие столбцы мне нужно посмотреть а какие нет. Кнопачка выведи мне значения столбцов 1_1, 1_5. Друга 1_2, 1_8. Для каждой кнопки свой запрос делать?

  Ответить  
 
 автор: osmor   (19.04.2010 в 11:03)   личное сообщение
 
 

понятно.
Собирайте строку запроса динамически, другого пути нет.

  Ответить  
 
 автор: Анатолий (Киев)   (19.04.2010 в 11:48)   личное сообщение
 
 

Можно попробовать для выбора поля по определенному условию использовать функцию Choose или Switch. Правда кол-во вариантов в запросе ограничено (для Choose до 27 вроде бы).

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