2010-06-10 3 views
0

목록 상자가 선택되어 있고 사용자가 SQL 테이블에서 null을 가져 오기 위해 생성 한 빈 문자열에 대해 null을 선택할 때 원합니다.빈 문자열을 NULL로 반환하십시오.

다음은 현재 가지고있는 내용입니다. 빈 문자열은 테이블에 빈 필드가 없기 때문에 아무 것도 반환하지 않습니다.

SELECT * FROM dbo.Table WHERE ID = " & TextBox2.Text & " and And Field1 IN (" & Msg1 & ") 

어떻게 코딩합니까?

+1

그래서'Msg1'이 빈 문자열''''''Field1 IS NULL''이 데이터베이스에있는 모든 레코드를 가져 오길 원한다고 말하는 겁니까? –

+0

정확히. 이것은 더 큰 문자열의 일부이지만 중요한 부분입니다. – Daniel

+0

또한 Sql Injection에 대해 알아야합니다. –

답변

1

If 문을 사용하십시오. 텍스트 상자가 비어있을 때 텍스트 문자열의 값을 추가하는 대신 SQL 문자열에 "ID is null"이 포함되도록하십시오.

If (TextBox1.Text = "") Then 
    ' use Is Null in your sql statement 
Else 
    ' use the textbox text value in your sql statement 
End If 

(당신이 텍스트 상자에 대해 이야기하지 Msg1을 무엇이든하고 가정.)

+0

코드의 어디에 속합니까? – Daniel

+0

SQL 문을 생성하는 곳입니다. –

+0

그걸 vba에서 할 수 있니? strSQL = strSQL & ""... – Daniel

1
dim sql 
If (TextBox2.Text = null) Then 
     sql = "SELECT * FROM dbo.Table WHERE ID is null and And Field1 IN (" & Msg1 & ")" 
Else 
    sql = "SELECT * FROM dbo.Table WHERE ID = " & TextBox2.Text & " and And Field1 IN (" & Msg1 & ")" 
End If 

참조 @ 존 손더스 코멘트, 당신은 SQL 주입을 걸고있다. paremeter를 SQL 쿼리에 전달할 때는 parameters을 사용하고 문자열을 연결하지 마십시오.

+2

물론 SQL 인젝션 공격에 대해 알고 있다고 가정하고 있습니다 ... –

+0

@ 존, 물론 * –

+0

문제 없습니다. 이것은 내부 응용 프로그램입니다. – Daniel

0
SELECT * FROM dbo.Table WHERE ID = " & TextBox2.Text & 
" And Field1 " & IIF(Trim(Msg1) = "", "IS NULL", "IN (" & Msg1 & ")") 

예, 그렇습니다.
이 스타일로 쿼리를 작성하면 안됩니다.

편집 : 수정 됨. 확인해주십시오.

+0

멋지다. IIF와 트림은 무엇인가? – Daniel

+0

IIF 및 다듬기는 VB/VBA의 함수입니다. – shahkalpesh

+0

작동하지 않습니다. 그냥 폭탄을 터트렸다. 그것은 그것이()라고 말하지만, 그렇게 될 수는 없습니다. – Daniel

관련 문제