2014-09-01 54 views
1

仍然在爲一個項目查詢工作,我的合作伙伴已經設法提出一個漂亮的SQL語句什麼時候運行奇蹟,但似乎在VBA中工作,它讓我質疑有多少SQL語句在VBA中受支持VBA SQL查詢字符串,支持多少?

這是我的工作夥伴颳起了原來的查詢和SQL

SELECT 
    crm_clients.`id`, 
    crm_clients.`national_insurance`, 
    crm_clients.`total_hmrc`, 
    (SELECT 
    crm_crmuseractions.title 
    FROM 
    dev_pfands.`crm_crmuseractions` 
    WHERE crm_crmuseractions.`id` = crm_clients.`status`) AS `status` 
FROM 
    dev_pfands.`crm_clients` 
    INNER JOIN crm_client_cheques 
    ON crm_clients.id = crm_client_cheques.`client_id` 
    INNER JOIN dev_pfands.`crm_payments` 
    ON crm_clients.id = crm_payments.`client_id` 
    INNER JOIN dev_pfands.`crm_self_assesments` 
    ON crm_clients.id = crm_self_assesments.`client_id` 
WHERE crm_clients.`status` = 9 
    OR crm_clients.`status` = 8 
    OR crm_clients.`status` = 7 
    OR crm_clients.`national_insurance` != '' 
    OR crm_clients.`id` != '' 

運行查詢時,它的偉大工程,我知道VBA喜歡的SQL結構略有不同,所以我就適應了這個,這也許是錯誤的,如果它是隨意燒我,因爲我需要學習。

sql = "SELECT crm_clients.id, crm_clients.national_insurance, crm_clients.total_hmrc _ 
    (SELECT _ 
    crm_crmuseractions.title _ 
    FROM _ 
    crm_crmuseractions _ 
    WHERE crm_crmuseractions.id = crm_clients.status) AS 'status _ 
    FROM _ 
    crm_clients _ 
    INNER JOIN crm_client_cheques _ 
    ON crm_clients.id = crm_client_cheques.client_id _ 
    INNER JOIN crm_payments _ 
    ON crm_clients.id = crm_payments.client_id _ 
    INNER JOIN crm_self_assesments.client_id _ 
    WHERE crm_clients.status = 9 _ 
    OR crm_clients.status = 8 _ 
    OR crm_clients.status = 7 _ 
    OR crm_clients.national_insurance != '' _ 
    OR crm_clients.id != '' " 

道歉提前如果一些香港專業教育學院錯過了,但不是簡單的選擇或插入/刪除和其他任何更新一些SQL的其他功能,如連接等不似乎對我在VBA

如果工作任何人都知道我出錯的地方,那樣會很好,如果我做得很好,它的不支持功能甚至可以解釋爲什麼會很好,所以我可以把它和我工作的朋友相聯繫。

感謝先進的傢伙。

+0

可能是所有的反引號(')字符需要在任何應用程序的執行SQL的被使用 - 我以前見過類似的東西。 – citizenkong 2014-09-01 14:52:46

+0

''''蜱是什麼意思?列名稱 – 2014-09-01 14:53:49

+1

即使反引號不是必需的,您也有不匹配的單引號。 ''status''只有一個。 – 2014-09-01 14:56:44

回答

2
Dim query As String 

query = "SELECT " & _ 
     "crm_clients.id, " & _ 
     "crm_clients.national_insurance, " & _ 
     "crm_clients.total_hmrc, " & _ 
     "(SELECT " & _ 
     " crm_crmuseractions.Title " & _ 
     "FROM " & _ 
     " dev_pfands.crm_crmuseractions " & _ 
     "WHERE crm_crmuseractions.`id` = crm_clients.status) AS 'status' " & _ 
     "FROM " & _ 
     "dev_pfands.crm_clients " & _ 
     "INNER JOIN crm_client_cheques " & _ 
     " ON crm_clients.id = crm_client_cheques.client_id " & _ 
     "INNER JOIN dev_pfands.crm_payments " & _ 
     " ON crm_clients.id = crm_payments.client_id " & _ 
     "INNER JOIN dev_pfands.crm_self_assesments " & _ 
     " ON crm_clients.id = crm_self_assesments.client_id " & _ 
     "WHERE crm_clients.status = 9 " & _ 
     "OR crm_clients.status = 8 " & _ 
     "OR crm_clients.status = 7 " & _ 
     "OR crm_clients.national_insurance != '' " & _ 
     "OR crm_clients.id != ''" 
2

您需要連接的數據串橫跨多行,像這樣:

strText = "This is the first line " & _ 
      "This is the second line" 

鑑於你有大量的文字,你可能會碰到一個錯誤Too many line continuations(如最高金額續行是25)。在這種情況下,您可以在連接字符串,像這樣:

strText = "This is the first line" 
strText = strText & "This is the second line" 

注意 當你正在編寫SQL語句,你需要確保您在正確的位置空間,即你最有可能需要離開每行末尾的空格。

+0

感謝Man的建議,明天當我返回工作時我會嘗試這個 – Jimjebus 2014-09-01 15:05:02

1

寫它沒有單一的蜱和避免單引號,在VBA中總是使用雙引號。

像這樣

Sql = "SELECT" & _ 
    " crm_clients.""id""," & _ 
    " crm_clients.""national_insurance"","