2010-12-18 56 views
0

我正在使用VB嘗試訪問MSACCESS中的數據庫。VB在sql中選擇命令

我這樣做是很愚蠢的事情:

SSQL9 = "select Username as docuser from Doctors where TreatmentField = '"&Treatment&"'" 
     set Rs9 = Server.CreateObject("ADODB.recordset") 
     Rs9.open SSQL9,conn 
     Something=Rs9("docuser") 
     Response.Write(Something) 

出於某種原因,我得到:

ADODB.Field錯誤 '800a0bcd'

BOF或EOF爲True ,或當前記錄已被刪除。請求的操作需要當前記錄。

雖然我是肯定有一個記錄。什麼原因導致錯誤?

+1

這很簡單:如果記錄集的'.EOF'和'.BOF'屬性都是'True',則記錄集是空的,即使你期望別的東西。 – Tomalak 2010-12-18 20:51:23

+2

只是好奇:如果'治療'變量有一個撇號在你的代碼會發生什麼?確保你仔細考慮。 – 2010-12-18 21:06:51

+0

@Joel他必須在 – 2010-12-18 21:08:52

回答

0

對於類似的任務,我們使用這樣的代碼:

Dim QD As adodb.Command 
Dim rs As adodb.Recordset 

Set QD = New adodb.Command 
QD.CommandText = sql 
QD.CommandType = adCmdText 
QD.ActiveConnection = conn 

Set rs = QD.Execute 

追查錯誤步驟如下:

  1. 治療
  2. 選擇一個值替換參數具有該值的查詢 - 在訪問中運行查詢
  3. 嘗試使用經過測試的成功查詢的VB程序。
  4. 當錯誤仍然出現了VB的其他查詢

爲了得到你需要某種類型的循環

Do While Not rs9.EOF 
     Something=Rs9!docuser 
     Response.Write(Something) 
     RS9.MoveNext 
Loop 

更改代碼中的所有記錄:

現在使用Something = Rs9!docuser請嘗試

1

@eve:對於我來說,這看起來更像是VBScript而不是VB ...假設conn是一個ADODB.Connection對象,除非您打算使用分頁,否則不需要創建RecordSet對象,因此您可以將代碼示例重寫爲 -

If Treatment <> "" Then 
    SSQL9 = "SELECT Username as docuser FROM Doctors WHERE (TreatmentField = '" & Treatment & "')" 
    Set Rs9 = con.Execute(SSQL9) 
    If NOT Rs9.EOF Then 
     Something = Rs9(0) 
     Response.Write(Something) 
    Else 
     ' Empty recordset ' 
    End If 
    Rs9.Close 
Else 
    Response.Write "No 'Treatment' input was sent" 
End If 
+0

謝謝!我想我可以確定我的問題,但我不知道爲什麼會發生這種情況。一旦我執行了SELECT命令,我就沒有收到任何記錄,而我確信在.mdb文件中有一個「處理」記錄。這很奇怪。 – eve 2010-12-18 21:18:21

+0

另一件事 - 如果我只選擇所有用戶名(不包括=處理),我只會得到第一個記錄。奇怪! – eve 2010-12-18 21:19:18

+0

@eve:您只會使用該查詢獲取第一條記錄,因爲您必須進行循環才能獲取所有其他記錄。你可能會發布你正在發送的「治療」輸入和「治療」,因爲它存儲在數據庫中? – stealthyninja 2010-12-18 21:22:59