2010-07-23 2 views
0

문제를 해결하는 데 어려움이 있습니다.SQL 데이터베이스의 확인란

이메일 주소가 포함 된 확인란이 여러 개인 양식이 있으며 그 결과는 다른 페이지로 전송됩니다.

이 페이지는 뉴스 레터를 발송합니다.

현재이 작업이 진행되고 있지만 내가하고 싶은 것은 이름이 포함되어 있습니다. 양식에서

내가 결과를 얻을받은 ([email protected], [email protected] 등 ...) 나는 결과를 분리하고 배열에 넣어 관리해야

,하지만 지금 SQL db에 액세스하여 전자 메일 주소의 이름을 찾아야합니다. 이것은 내가 고심하고있는 곳이다. 여기에 내가 사용하려고 한 코드는 다음과 같습니다

name = request.form("list") 

If name = "" Then 
Response.redirect ("batchselect.asp") 
End If 

Dim your_name() 
Dim mode 
Dim mode_a 
Dim i 
mode=Request("list") 
mode_a=split(mode,",") 

For i=LBound(mode_a) to UBound(mode_a) 
Next 

i = i - 1 

Redim PRESERVE your_name(i) 
For t = 0 to i 

Set conn = Server.CreateObject("ADODB.Connection") 
conn.open connStr 

strSQL = "SELECT name FROM emails WHERE emails = '" & mode_a(t) & "'" 
Set rs = conn.Execute(strSQL) 

your_name(t) = rs("name") 
Next 

내가 노력하고 내가이 오류 받기를 실행하는 경우 :

오류 유형 : ADODB.Field (0x800A0BCD가) 중 하나를 BOF 또는 EOF가를 참이거나 현재 레코드가 삭제되었습니다. 요청 된 작업에는 현재 레코드가 필요합니다.

SQL 쿼리 'mode_a (t)'에 문제가 있다는 것을 알고 있습니다. 왜냐하면 for ... next를 취해서 이것을 mode_a (0) 또는 mode_a (1)로 바꾸면 문제가 없기 때문입니다. 나는 MS SQL과 클래식 ASP를 사용하고

사전

답변

0

확실하지 않음에

덕분에 당신은이 일을하는 이유 :

For i=LBound(mode_a) to UBound(mode_a) 
Next 

i = i - 1 

는 확실히이 충분하다, 당신은 제거 i의 모호성 :

i = UBound(mode_a) - 1 
0

만약 당신이 w를 다루지 않는다면 너무 많은 이메일 주소를 SQL에서 IN 문을 사용하려고 시도하고 전자 메일에 대한 모든 레코드를 다시 가져 오는 것이 좋습니다. 그것은 훨씬 더 빠를 것이고 많은 db 호출을 저장할 것입니다.

이렇게했다면 레코드 세트 행에있는 이름을 가진 이메일 주소를 반환하고이를 사용하여 일치시킬 수 있습니다.

실제 질문에 대해서는 i의 값을 확인하고 -1로 설정되지 않았는지 또는 실제로 인덱스를 가리 키지 않는 다른 값으로 설정되어 있지 않은지 확인하십시오. 반환되는 결과가 없으므로 오류가 발생하기 때문입니다. 실제로 레코드 집합을 사용하기 전에 EOF를 확인하는 것이 좋습니다.