2010-07-23 44 views
0

我有一個問題,我正在努力修復。複選框到SQL數據庫

我有一個包含許多電子郵件地址的複選框,其結果被髮送到另一個頁面。

此頁面將發送新聞簡報。

這是目前的工作,但我想要做的是包括他們的名字。

從形式接收我得到的結果([email protected][email protected]等)

我已成功地分離的結果,並把它們放到一個數組,但現在我需要訪問SQL數據庫並找到電子郵件地址的名稱。這是我掙扎的地方。下面是我試圖使用代碼:

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¯¯ ith太多的電子郵件地址我會考慮嘗試在sql語句中使用IN語句,並將所有電子郵件記錄都帶回。它會更快,併爲您節省大量的數據庫調用。

如果你這樣做,那麼你可以返回電子郵件地址與記錄集行中的名稱,並使用它來匹配。

至於你的實際問題,雖然我會檢查我的價值,並確保它沒有被設置爲-1或其他一些實際上並沒有指向索引的值。因爲您的錯誤正在發生,因爲沒有結果被返回。在實際使用記錄集之前,您應該考慮檢查EOF。