2012-10-17 84 views
1

我有一個非常長的查詢通過MS Access與大量的工會(約30)和其他動態變量寫入。SQL MS Access查詢從表格文本框中獲取文本值

現在,我需要在所有這些工會插入一個「位置」子句和where子句將是恆定的,通過表單(選擇一些選項生成的,我寫了一個VB代碼來創建一個包含其中一個字符串。第

有什麼辦法,我可以用在SQL查詢的一些變量,這樣變量從形式操作的文本結果得到的where子句

說明問題:?我查詢

Select a,b,c,d from 
    (select x as a,b,c,d from abc <where clause> union 
    select y as a,b,c,d from abc <where clause> union 
    select z as a,b,c,d from abc <where clause> union 
    select p as a,b,c,d from abc <where clause>) 
order by a 

應該填充文本框的結果看起來像'where b = 1'

我想寫它在VB代碼本身,但對衆多換行和chaning性質的查詢,我不想手動添加「 & _在每行的末尾。

任何幫助將不勝感激。

問候, Navs的

回答

2

你可以寫在WHERE子句是這樣的:

WHERE B=[Forms]![FormName]![FieldName] 

所以它從形式價值。但是,如果我的理解正確,在形式不僅僅是條件,但有整個where子句,可能是'其中b = 1'但它也可能是'其中c = 4''where a = 2 and b = 6'

我覺得有沒有這個完美的解決方案,你不能使用普通的訪問,但你必須寫一些VBA代碼,您可以生成查詢字符串是這樣的:

$src_query = "Select a,b,c from abc <where clause> union select ..." 
$src_query = Replace($src_query, 
        "<where clause>", 
        [Forms]![FormName]![WhereClause]) 

然後您只需以編程方式修改查詢:

CurrentDb.QueryDefs("QueryName").SQL = $src_query 

現在您的查詢已準備好執行。

+0

非常感謝您的回覆。確切地說,where子句可以是動態的,添加或取出不同的字段。你的第二個解決方案似乎符合法案。但有一個問題我面對 - 我有很長的查詢(我使用Excel的公式來創建該查詢)。但查詢不會改變。一旦我鎖定了最終的邏輯,它將是一樣的。但是,當前長度限制了我使用$ src_query。你知道任何其他的手段,我可​​以把格式的長查詢,因爲我需要格式化,以適應衆多的換行符。 – user1087661

+0

嗨fthiella,有沒有什麼辦法指定一個查詢文件內容作爲字符串訪問vb中的變量? – user1087661

+0

嗨,我想我不明白這裏有什麼問題......換行符有什麼問題?你是指通過分配一個查詢文件的內容是什麼意思?如果你能解釋我可以幫助你更好! – fthiella

0

由於功課不多,我發現如何將文本文件的內容分配給變量。然後我可以用代碼片段「Fthiella」給出的變量來修改變量。

1

你可以放在一個單獨的查詢Where條款,並不會改變原來的

Select * 
from MyQuery 
Where (a=1 and b=7) or (c=3 and d="StackOverflow")