Передать переменные в SQL запрос в Access
Lava
Дата: 19.04.2002 04:57:49
Как передать переменные в запросе типа where NAME.nameID=имя переменной, как ни пробовал, все равно access запрашивает параметр перед выполнением запроса или формы на этом запросе. Заранее благодарен.
АлексейК
Дата: 19.04.2002 07:27:27
здесь ответ:
http://www.kozin1.narod.ru/sql/forms/index.htm
AlexLexus
Дата: 22.04.2002 05:42:11
В Access в условия отбора можно подставлять только выражения или функции, но не переменные, поэтому нужно создать функцию, которая бы возвращала значения переменных. И в запросе в условие отбора для поля подставлять эту функцию.
В отдельном модуле создаешь функцию типа:
Public Function fob(nom As Long) as variant
Select Case nom
Case 1
nom=[имя переменной1]
Case 2
nom=[имя переменной2]
и т.д.
......
End Select
End Function
Перед вызовом запроса в переменную [имя переменной1] запоминаешь требуемое значение.
А в запросе в условии отбора для поля, которое нужно ограничить по [переменной1], ставишь fob(1).
Если в запросе нужно поставить условия отбора для 2-х и более полей по переменным,
то перед вызовом запроса в [имя переменной1], [имя переменной2], и т.д. запоминаешь требуемые значение,
а в запросе в условиях отбора ставишь соответственно fob(1), fob(2), и т.д. для соответствующих полей.
МашаТ
Дата: 30.12.2003 18:52:34
Dобрый вечер. может быть вы сможете мне помочь?
1.
У меня есть таблица FORECAST она содержит несколько полей (Product P/N, QTY JAN, QTY FEB, QTY MAR, QTY, NEED1, NEED2, NEED3)
Таблица STOCK она содержит несколько полей (Product P/N, QTY)
Мне нужно построить QUERIES на основе этих двух таблиц взять Product P/N (FORECAST ) найти его в таблице (STOCK) и QTY(STOCK ) поместить в
QTY(FORECAST ). Проблема в том что может быть случай когда Product P/N есть FORECAST но нет в STOCK, тогда мне нужно чтобы напротив
Product P/N (FORECAST) в STOCK он поставил 0, а он просто исключает этот Product P/N из FORECAST
2.
как написать такое условие в QUERIES
if need1>0 то NEED2= QTY FEB else NEED2=QTY FEB+need1
заранее благодарю.
Лох Позорный
Дата: 30.12.2003 19:14:04
2.
Select трампампам
From трампампам
Where IIf(need1>0, NEED2 = [QTY FEB], NEED2 = [QTY FEB] + need1)
Не за что
Владимир Саныч
Дата: 30.12.2003 19:16:36
Не знаю, правильно ли это (не проверял), но короче так:
Where NEED2 = QTY FEB + IIf(need1>0, 0, need1)
Лох Позорный
Дата: 30.12.2003 19:20:21
А по поводу 1 ("Проблема в том что может быть случай когда Product P/N есть FORECAST но нет в STOCK..... а он просто исключает этот Product P/N из FORECAST") - ключевое слово Left Join (или Right Join)
Программист-Любитель
Дата: 10.01.2005 16:44:21
А я в таких и подобных ситуациях всегда люблю:
1. Сконструировать строку sql со всеми селектами, ордерами, вэрами.
2. А потом запустить ее на выполнение.
Преимущеcтво - полная гибкость и удобство формирования строки средствами VBA.
SWD
Дата: 26.05.2013 21:33:30
AlexLexus |
---|
В Access в условия отбора можно подставлять только выражения или функции, но не переменные, поэтому нужно создать функцию, которая бы возвращала значения переменных. И в запросе в условие отбора для поля подставлять эту функцию.
В отдельном модуле создаешь функцию типа:
Public Function fob(nom As Long) as variant Select Case nom Case 1 nom=[имя переменной1] Case 2 nom=[имя переменной2] и т.д. ...... End Select End Function
Перед вызовом запроса в переменную [имя переменной1] запоминаешь требуемое значение. А в запросе в условии отбора для поля, которое нужно ограничить по [переменной1], ставишь fob(1).
Если в запросе нужно поставить условия отбора для 2-х и более полей по переменным, то перед вызовом запроса в [имя переменной1], [имя переменной2], и т.д. запоминаешь требуемые значение, а в запросе в условиях отбора ставишь соответственно fob(1), fob(2), и т.д. для соответствующих полей. |
Только не nom=[имя переменной1], а fob=[имя переменной1]
Иначе работать не будет