2011-04-11 47 views
1

我知道,有什麼問題我的語法...... "select * from tblpayroll where empid = userid"請糾正我的SQL語法

用戶ID是一個變量...

+2

你需要提供更多的細節。這是你正在寫的存儲過程嗎? = @userid這是在你的VB代碼?和userID是一個VB變量? ''select * from tblpayroll where empid =「&userId' – Prescott 2011-04-11 06:22:26

+0

我已經提供了我的問題的更多細節......但我讓它更簡單...希望你能幫助我。在此先感謝 – aer 2011-04-11 07:58:38

+0

請不要以自然完全改變的方式編輯您的問題。它使所有的答案日期無用。如果你有一個根本不同的問題(儘管關於同一個程序,它有根本的不同),請問另一個問題。 – paxdiablo 2011-04-11 08:20:37

回答

0

文本"select * from tblpayroll where empid = userid"將通過發送正是因爲是到SQL後端,則userid部分將不會被取代。所以,除非你有一個userid列,否則你可能會得到一個錯誤。即使你有一個userid列,結果將不會是你所期望的。

您需要做什麼取決於userid是數值還是字符串值。對於數字,您可以使用:

"select * from tblpayroll where empid = " & CStr(userid) 

這將首先將數字值轉換爲字符串並按原樣進行檢查。

對於字符串值,使用:

"select * from tblpayroll where empid = '" & userid & "'" 

這將只需用引號括起來,以確保一個字符串比較的作品。您需要意識到,如果userid未被清除,這是一個壞主意 - 它可能會導致SQL注入攻擊。修復這個藝術超出了這個特定問題的範圍,但值得記住。

如果您的變量是數字,但數據庫字段是字符串,該怎麼辦是另一回事。你可以用CStr和zero-padding來做,但由於這不太可能發生,所以我在這裏沒有記錄它。

+0

......這對我有幫助,但它只能得到一組記錄。我的意思是,例如UserID的值是A52,因此,具有A52的用戶ID的所有記錄必須分別出現在文本框中。 – aer 2011-04-11 06:45:14

+1

@aerohn,該查詢將返回滿足該條件的所有行。如果您只獲得一個,那麼(1)只有一行,如果該表是一個員工類型的表(每個員工一行)而不是一個payrun類型的表(例如,每個員工每行一行月);或者(2)您沒有正確處理返回的行集。 – paxdiablo 2011-04-11 06:49:30

+0

請看看我的工作。我編輯了我的問題... – aer 2011-04-11 07:57:20

2

顯然,這是你的VB變量。

select * from tblpayroll where empid = '" & userid & "' " 

使用這種方式,它會工作

+0

...這對我有幫助,但它只獲得一組記錄。我的意思是,例如,UserID的值是* A52 *,所以具有* A52 *的用戶ID的所有記錄必須分別出現在文本框中。 – aer 2011-04-11 06:37:44

+0

@aerohn這是一個非常不同的問題。如果你想得到答案,請在這裏標記其中一個答案是正確的,並提供一個新問題,詳細說明你如何從數據庫獲取數據以及你擁有哪些文本框 - 你可能希望提供代碼以便人們可以理解你在問什麼 – Prescott 2011-04-11 20:42:12