2016-03-05 16 views
0

我從來沒有使用過像這樣的代碼,並且在如何將代碼輸出到asp經典頁面時丟失了代碼。 我試着簡單地調用rs(「theFile」),但是,這沒有奏效。 這是打破,給我一個錯誤。帶「SET」輸出到ASP Classic的SQL查詢

這裏是代碼,帶演示行,輸出。 我需要把代碼放在SSMS中輸出的相同方式,在經典ASP頁面中。

Set sqlGetSong = Server.CreateObject("ADODB.Command") 
sqlGetSong.ActiveConnection=EV_WikiConn 
sqlGetSong.Prepared = true 

sqlGetSong.commandtext = "DECLARE @seperator INT;" & vbCrLf & _ 
    "Declare @String nvarchar(max);" & vbCrLf & _ 
    "Declare @Tab TABLE (DT VARCHAR(100));" & vbCrLf & _ 
    "set @String='File_Date_(Jan_21,_1976)/File_Date_(Mar_18,_1996)/File_Date_(Jan_22,_1983)/File_Date_(Jan_20,_1983)/File_Date_(Jan_14,_1976)/File_Date_(Jan_18,_1979)/File_Date_(Dec_18,_1979)';" & vbCrLf & _ 
    "WHILE (CHARINDEX('/', @String, 0) > 0) BEGIN" & vbCrLf & _ 
     "SET @seperator = CHARINDEX('/', @String, 0);" & vbCrLf & _ 
     "INSERT INTO @Tab (DT) SELECT RTRIM(LTRIM(SUBSTRING(@String, 0, @seperator)));" & vbCrLf & _ 
     "SET @String = STUFF(@String, 1, @seperator, '');" & vbCrLf & _ 
    "END" & vbCrLf & _ 
    "INSERT INTO @Tab (DT) SELECT RTRIM(LTRIM(@String));" & vbCrLf & _ 
    "select DT as theFile from" & vbCrLf & _ 
     "(select right(REPLACE(DT,right(DT,7),''),2)DY, right(REPLACE(DT, ')',''), 4)YR, * from @Tab) A" & vbCrLf & _ 
    "order by YR, DY;" 

set rsSongs = sqlGetSong.execute 
if rsSongs.eof then 
    ' show records here 
end if 

在這裏給我一個錯誤:當對象被關閉

if rsSongs.eof then
操作是不允許的。

有人可以讓我知道如何將此代碼輸出到經典ASP。 謝謝 韋恩

+0

您所提供的代碼是純粹的SQL,沒有傳統的ASP VBScript中存在。您的錯誤消息意味着您尚未打開記錄集對象。我認爲你需要閱讀關於如何用Classic ASP與數據庫交談的教程 - 這裏有一個。 http://www.4guysfromrolla.com/webtech/faq/Databases/faq4.shtml – John

+0

約翰3,對不起,我沒有剩下的代碼了。我知道如何顯示記錄,以及上面的代碼,我只是需要知道如何讓它顯示記錄。即使使用代碼中提供的記錄,仍然會出現該錯誤。所以。任何想法的任何人如何獲得此代碼,以顯示記錄... –

+0

你錯過了'不'從'如果不是rsSongs.EOF然後'''如果'語句在此刻只會得到「顯示記錄在這裏」當沒有記錄顯示時。 'If Not'則相反,當Recordset沒有到達EOF時,你將會「在這裏顯示記錄」。如果記錄集已達到EOF(文件結束),它將被關閉,因爲沒有要顯示的記錄。 – Lankymart

回答

0

您需要使用記錄前打開連接:

EV_WikiConn.Open 

另外:這似乎是一個令人難以置信的尷尬的方式做一些簡單的字符串操作。人們想知道爲什麼你在這裏連接到一個數據庫,當這些數據只能以正確的順序被硬編碼到一個數組中。

+0

Hello Joel ....第二段.... >>帶有演示線<<這是爲了展示它是如何工作的,以及應該顯示的內容......如果您有更好的方式來訂購演示線,那麼請盡一切辦法展示......此外,連接已經打開。我可以在這裏放一個簡單的選擇語句,它的工作沒有問題,這個SQL代碼不會讓它工作。但就像我說的。如果您有更好的方法,請訂購內容(按年,月和日),然後通過任何方式,請協助。 –

+0

EV_WikiConn可以是連接字符串,在這種情況下,傳統的ASP將自行創建一個臨時連接,並在後臺打開它。這裏的問題在別處。 (請參閱[這裏](https://msdn.microsoft.com/en-us/library/ms676107(v = vs.85).aspx):「如果您嘗試在設置此命令之前調用Command對象上的Execute方法屬性打開連接對象**或有效連接字符串**,發生錯誤。「) –

+0

陰影。如果我替換SQL代碼,使用表「Query ... select」中的一個簡單的查詢字段「........它運行時沒有問題,它只是不適用於此SQL查詢。連接打開,只是不與這種類型的查詢,如果我一起刪除if rsSongs.eof,那麼我在rsSongs(「theFile」)上得到一個錯誤,說它不存在。...........我之前從未使用過這種類型的SQL查詢,所以,我在新的領域。 –

1

我更新了Lankymart提供的信息。現在一切都很好用。 Lankymart,如果你想採取這些信息,並把它作爲你自己的,我會接受你作爲答案。

Set sqlGetSong = Server.CreateObject("ADODB.Command") 
sqlGetSong.ActiveConnection=EV_WikiConn 
sqlGetSong.Prepared = true 

sqlGetSong.commandtext = "SET NOCOUNT ON DECLARE @seperator INT;" & vbCrLf & _ 
    "Declare @String nvarchar(max);" & vbCrLf & _ 
    "Declare @Tab TABLE (DT VARCHAR(100));" & vbCrLf & _ 
    "set @String='File_Date_(Jan_21,_1976)/File_Date_(Mar_18,_1996)/File_Date_(Jan_22,_1983)/File_Date_(Jan_20,_1983)/File_Date_(Jan_14,_1976)/File_Date_(Jan_18,_1979)/File_Date_(Dec_18,_1979)';" & vbCrLf & _ 
    "WHILE (CHARINDEX('/', @String, 0) > 0) BEGIN" & vbCrLf & _ 
     "SET @seperator = CHARINDEX('/', @String, 0);" & vbCrLf & _ 
     "INSERT INTO @Tab (DT) SELECT RTRIM(LTRIM(SUBSTRING(@String, 0, @seperator)));" & vbCrLf & _ 
     "SET @String = STUFF(@String, 1, @seperator, '');" & vbCrLf & _ 
    "END" & vbCrLf & _ 
    "INSERT INTO @Tab (DT) SELECT RTRIM(LTRIM(@String));" & vbCrLf & _ 
    "select DT as theFile from" & vbCrLf & _ 
     "(select right(REPLACE(DT,right(DT,7),''),2)DY, right(REPLACE(DT, ')',''), 4)YR, * from @Tab) A" & vbCrLf & _ 
    "order by YR, DY;" 

set rsSongs = sqlGetSong.execute 
while not rsSongs.eof%> 
<%=rsSongs("theFile")%><br /> 
<%rsSongs.movenext 
Wend 
'set rsSongs = rsSongs.Nextrecordset ' was not needed 

謝謝 韋恩

+0

不,沒關係,有很多類似的例子。 – Lankymart