iT邦幫忙

0

VB6 SQL語法

vb

原本為
Adodc1.RecordSource = "select * from EPSTC where TA002 like '%" & Text2.Text & "%'"
改為
Adodc1.RecordSource = "select * from EPSTC where '" & Text2.Text & "'<= TC002 <= '" & Text2.Text & "'"
Adodc1.Refresh
會出現
接近'<'之處的語法不正確
請問該如何修改

2
海綿寶寶
iT邦大神 1 級 ‧ 2013-03-15 15:41:11
最佳解答

isaepfkeyr提到:
"select * from EPSTC where '" & Text2.Text & "'<= TC002 <= '" & Text2.Text & "'"

題目中的 SQL 敍述
假設 Text2.Text = "P123" 的話
那麼
SQL 敍述是
select * from EPSTC where 'P123'<= TC002 <= 'P123'

而這段 SQL 敍述
你貼到 SQL Analyer 去執行
就算不出錯
也挑不到任何資料

SQL 錯誤的問題的解法之一
就是「先寫出正確的 SQL 語法,再貼進程式碼當中使用」

我後來改成
Adodc1.RecordSource = "select * from EPSTC where TC002 >= 'Text2.Text'and TC002 <= 'Text3.Text'
是不會出現錯誤了 但是沒任何資料若只有
Adodc1.RecordSource = "select * from EPSTC where TC002 >= 'Text2.Text'"
就又很正常

isaepfkeyr提到:
select * from EPSTC where TC002 >= 'Text2.Text'

要注意一點
Text2.Text 是變數,不是真正要拿來比較的值

我猜可能是

&lt;pre class="c" name="code">
Adodc1.RecordSource = "select * from EPSTC where TC002 >= '" & Text2.Text & "'and TC002 &lt;= '" & Text3.Text &"'" 
2
kgame
iT邦新手 4 級 ‧ 2013-03-18 03:42:14

這種寫法不怕SQL inject攻擊嗎?

所謂的SQL inject攻擊是?剛開始嘗試寫這個,不是很懂,而且只是單純給內部USER列印資料而已,沒要用其他功能

huijoson iT邦新手 5 級 ‧ 2018-02-13 14:19:05 檢舉

內部使用的話風險確實是比較小,isaepfkeyr的意思是建議不要直接將控制項的值直接帶入到sql語法內,先過濾過後再組成查詢字串會比較安全些 ~

4
cyuwww
iT邦新手 2 級 ‧ 2013-03-23 15:26:59

TC002 是您的欄位名稱吧?

Adodc1.RecordSource = "select * from EPSTC where TC002 >= '" & Text2.Text & "'and TC002 <= '" & Text3.Text & "'"
現在是學習階段,就算了!
未來,您還是需要去了解一下 SQL inject的問題。

我要發表回答

立即登入回答