精華區beta Visual_Basic 關於我們 聯絡資訊
我是VBscript的初學者, 最近拿到一份VB的程式碼,想要放到ASP的網頁上去跑, 因此得把語法改為VBscript才行, 所以想向大家請教一下, VB裡面的"Dim XX As XX" 和 "case XX to XX" 還有"!"在VB裡面有什麼特殊意義嗎? 若要轉換為VBscript的話,應該要怎麼寫呢? 拜託大家教教我,或是告訴我哪邊有VB如何轉換為VBscript的相關資訊, 拜託拜託~~我實在很苦惱~~~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.171.152.116 > -------------------------------------------------------------------------- < 作者: fumizuki (小獅) 看板: Visual_Basic 標題: Re: [問題] 請問VB與VBscript 時間: Sun Mar 20 12:50:51 2005 ※ 引述《misssun (sun)》之銘言: : 我是VBscript的初學者, : 最近拿到一份VB的程式碼,想要放到ASP的網頁上去跑, : 因此得把語法改為VBscript才行, : 所以想向大家請教一下, : VB裡面的"Dim XX As XX" 和 "case XX to XX" : 還有"!"在VB裡面有什麼特殊意義嗎? : 若要轉換為VBscript的話,應該要怎麼寫呢? : 拜託大家教教我,或是告訴我哪邊有VB如何轉換為VBscript的相關資訊, : 拜託拜託~~我實在很苦惱~~~ Dim 變數名稱 As 資料型態 整行可以拿掉,或拿掉As之後的字... 因為script可以宣告變數,但不能宣告型態,且沒規定一定要宣告才能使用 Select Case 變數 Case 範圍 (>,<,>=,<=,=,To) 敘述 Case 範圍 敘述 Case Else 敘述 End Select 可以換成 If 關係運算 Then 敘述 ElseIf 關係運算 Then 敘述 Else 敘述 End If 例如: Select Case a Case Is < 0 '小於零 Case 1 To 50 '1至50 Case 51 To 99 '51至99 Case 100 '100 Case Else '以上皆非 End Select 可以換成 If a < 0 Then '小於零 ElseIf a >= 1 And a <=50 Then '1至50 ElseIf a >=51 And a<=99 Then '51至99 ElseIf a = 100 Then '100 Else '以上皆非 End If -- 人若無星爺,跟條鹹魚有何分別? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.58.156.43 > -------------------------------------------------------------------------- < 作者: misssun (sun) 看板: Visual_Basic 標題: Re: [問題] 請問VB與VBscript 時間: Sun Mar 20 15:33:59 2005 謝謝你~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 講解這麼詳細,我的眼淚都要噴出來了!!!! 立刻去寫寫看!! 謝謝~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.171.152.116 > -------------------------------------------------------------------------- < 作者: misssun (sun) 看板: Visual_Basic 標題: Re: [問題] 請問VB與VBscript 時間: Sun Mar 20 16:42:40 2005 我的程式現在應該是可以跑了, 不過我想把結果秀出來卻失敗了~~ If Litemset_1R(1) = 1 And Litemset_1F(3) = 1 And Litemset_1M(3) = 1 Then CLUW = R(i, 1) * F(i, 3) * M(i, 3) If Litemset_1R(1) = 1 And Litemset_1F(3) = 1 And Litemset_1M(3) = 1 And CLUW >= afa1 Then Adodc1.Recordset.AddNew Adodc1.Recordset("CID") = sArray1(i) Adodc1.Recordset("CLU") = "1" Adodc1.Recordset("CTYPE") = "忠誠的老顧客(高消費非理性型)" Adodc1.Recordset("CLUW") = CLUW Adodc1.Recordset.Update response.write"<FONT Color=#97be1c>" & "代碼" & sArray1(i) & "</p>" & "</font> " response.Write "此群集為 " & "忠誠的老顧客(高消費非理性型)" & "</p>" End If 請您再幫我看看,是VB沒有轉換成VBscript上的緣故,還是我的程式哪邊寫錯了呢? 另外,"!"我從微軟的網站上有查到似乎是VB裡面的分隔符號, 但沒有更深入的說明了~ 請問您知道在VBscript中"!"這個分隔符號可用什麼符號來取代呢? 麻煩您了~ 謝謝!!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.171.154.109 ※ 編輯: misssun 來自: 218.171.154.109 (03/20 16:47) > -------------------------------------------------------------------------- < 作者: fumizuki (小獅) 看板: Visual_Basic 標題: Re: [問題] 請問VB與VBscript 時間: Sun Mar 20 17:16:46 2005 ※ 引述《misssun (sun)》之銘言: : 我的程式現在應該是可以跑了, : 不過我想把結果秀出來卻失敗了~~ : If Litemset_1R(1) = 1 And Litemset_1F(3) = 1 And Litemset_1M(3) = 1 Then CLUW = R(i, 1) * F(i, 3) * M(i, 3) : If Litemset_1R(1) = 1 And Litemset_1F(3) = 1 And Litemset_1M(3) = 1 And CLUW >= afa1 Then : Adodc1.Recordset.AddNew : Adodc1.Recordset("CID") = sArray1(i) : Adodc1.Recordset("CLU") = "1" : Adodc1.Recordset("CTYPE") = "忠誠的老顧客(高消費非理性型)" : Adodc1.Recordset("CLUW") = CLUW : Adodc1.Recordset.Update : response.write"<FONT Color=#97be1c>" & "代碼" & sArray1(i) & "</p>" & "</font> " : response.Write "此群集為 " & "忠誠的老顧客(高消費非理性型)" & "</p>" : End If : 請您再幫我看看,是VB沒有轉換成VBscript上的緣故,還是我的程式哪邊寫錯了呢? : 另外,"!"我從微軟的網站上有查到似乎是VB裡面的分隔符號, : 但沒有更深入的說明了~ : 請問您知道在VBscript中"!"這個分隔符號可用什麼符號來取代呢? : 麻煩您了~ 謝謝!!! ! 是資料庫存取用的, 可是你貼出來的程式碼中並沒有 ! 啊@@ 錯誤代碼是什麼... -- 人若無星爺,跟條鹹魚有何分別? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.58.156.43 > -------------------------------------------------------------------------- < 作者: misssun (sun) 看板: Visual_Basic 標題: Re: [問題] 請問VB與VBscript 時間: Sun Mar 20 18:18:49 2005 原來是存取資料庫用的,我以為可以會跟VBscript一樣, 在程式一開始就用ADO物件來呼叫資料庫就好..... 所以我剛才把驚嘆號都給除掉了...>///< 我把!補回去之後,出現的錯誤訊息是: Microsoft VBScript 編譯階段錯誤 錯誤 '800a0401' 必須是陳述式的結尾 Rc = rst1!R ---------^ 麻煩您再教教我~~ 謝謝~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 下面是程式碼: 原始程式連結資料庫的似乎是這一段 wSQL1 = "select * from CRFM1997" Set db = OpenDatabase(App.Path + "\rfmdb.mdb") Set rs1 = db.OpenRecordset(wSQL1) Set rst1 = db.OpenRecordset(wSQL1) 我把他改寫成下面這樣,不知是否也有錯誤?! Set conn = Server.CreateObject("ADODB.Connection") DBPath = Server.MapPath("rfmdb.mdb") conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath Set rs = Server.CreateObject("ADODB.Recordset") wSQL1 ="select * from CRFM1997" rs.Open wSQL1, conn, 3,3 Set rs1 = db.OpenRecordset(wSQL1) Set rst1 = db.OpenRecordset(wSQL1) 有"!"的程式是這一段 rst1.MoveFirst Rc = rst1!R Fc = rst1!F Mc = rst1!M Ra = rst1!R Fa = rst1!F Ma = rst1!M rst1.MoveNext For i = 2 To 10282 If Rc < rst1!R Then Rc = rst1!R If Fc < rst1!F Then Fc = rst1!F If Mc < rst1!M Then Mc = rst1!M If Ra > rst1!R Then Ra = rst1!R If Fa > rst1!F Then Fa = rst1!F If Ma > rst1!M Then Ma = rst1!M rst1.MoveNextNext Next Rb = (Ra + Rc) / 2 Fb = (Fa + Fc) / 2 Mb = (Ma + Mc) / 2 rs1.MoveFirst For i = 1 To 10282 If rst1!R<= Ra Then R(i, 1) = 1 R(i, 2) = 0 R(i, 3) = 0 .......以下都是IF THEN...... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.171.154.109 > -------------------------------------------------------------------------- < 作者: fumizuki (小獅) 看板: Visual_Basic 標題: Re: [問題] 請問VB與VBscript 時間: Sun Mar 20 18:27:18 2005 ※ 引述《misssun (sun)》之銘言: : 原來是存取資料庫用的,我以為可以會跟VBscript一樣, : 在程式一開始就用ADO物件來呼叫資料庫就好..... : 所以我剛才把驚嘆號都給除掉了...>///< : 我把!補回去之後,出現的錯誤訊息是: : Microsoft VBScript 編譯階段錯誤 錯誤 '800a0401' : 必須是陳述式的結尾 : Rc = rst1!R 把 rst1!R 改成 rst1("R") 以此類推 : ---------^ : 麻煩您再教教我~~ 謝謝~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ : 下面是程式碼: : 原始程式連結資料庫的似乎是這一段 : wSQL1 = "select * from CRFM1997" : Set db = OpenDatabase(App.Path + "\rfmdb.mdb") : Set rs1 = db.OpenRecordset(wSQL1) : Set rst1 = db.OpenRecordset(wSQL1) : 我把他改寫成下面這樣,不知是否也有錯誤?! 有錯的話把錯誤的敘述貼上來 : Set conn = Server.CreateObject("ADODB.Connection") : DBPath = Server.MapPath("rfmdb.mdb") : conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath : Set rs = Server.CreateObject("ADODB.Recordset") : wSQL1 ="select * from CRFM1997" : rs.Open wSQL1, conn, 3,3 : Set rs1 = db.OpenRecordset(wSQL1) 重複開啟資料表? : Set rst1 = db.OpenRecordset(wSQL1) : 有"!"的程式是這一段 : rst1.MoveFirst : Rc = rst1!R rst1("R") : Fc = rst1!F : Mc = rst1!M : Ra = rst1!R : Fa = rst1!F : Ma = rst1!M : rst1.MoveNext : For i = 2 To 10282 : If Rc < rst1!R Then Rc = rst1!R : If Fc < rst1!F Then Fc = rst1!F : If Mc < rst1!M Then Mc = rst1!M : If Ra > rst1!R Then Ra = rst1!R : If Fa > rst1!F Then Fa = rst1!F : If Ma > rst1!M Then Ma = rst1!M : rst1.MoveNextNext 多一個Next : Next 固定10282筆資料? : Rb = (Ra + Rc) / 2 : Fb = (Fa + Fc) / 2 : Mb = (Ma + Mc) / 2 : rs1.MoveFirst : For i = 1 To 10282 : If rst1!R<= Ra Then : R(i, 1) = 1 : R(i, 2) = 0 : R(i, 3) = 0 : .......以下都是IF THEN...... -- 人若無星爺,跟條鹹魚有何分別? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.58.156.43 > -------------------------------------------------------------------------- < 作者: misssun (sun) 看板: Visual_Basic 標題: Re: [問題] 請問VB與VBscript 時間: Sun Mar 20 18:48:00 2005 ※ 引述《fumizuki (小獅)》之銘言: : : 原始程式連結資料庫的似乎是這一段 : : wSQL1 = "select * from CRFM1997" : : Set db = OpenDatabase(App.Path + "\rfmdb.mdb") : : Set rs1 = db.OpenRecordset(wSQL1) : : Set rst1 = db.OpenRecordset(wSQL1) : : 我把他改寫成下面這樣,不知是否也有錯誤?! : 有錯的話把錯誤的敘述貼上來 : : Set conn = Server.CreateObject("ADODB.Connection") : : DBPath = Server.MapPath("rfmdb.mdb") : : conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath : : Set rs = Server.CreateObject("ADODB.Recordset") : : wSQL1 ="select * from CRFM1997" : : rs.Open wSQL1, conn, 3,3 : : Set rs1 = db.OpenRecordset(wSQL1) : 重複開啟資料表? 因為原始程式就是這樣寫的,所以我就把他保留起來,是沒有出現錯誤訊息啦... : : Set rst1 = db.OpenRecordset(wSQL1) : : 有"!"的程式是這一段 : : rst1.MoveFirst : : Rc = rst1!R : rst1("R") : : Fc = rst1!F : : Mc = rst1!M : : Ra = rst1!R : : Fa = rst1!F : : Ma = rst1!M : : rst1.MoveNext : : For i = 2 To 10282 : : If Rc < rst1!R Then Rc = rst1!R : : If Fc < rst1!F Then Fc = rst1!F : : If Mc < rst1!M Then Mc = rst1!M : : If Ra > rst1!R Then Ra = rst1!R : : If Fa > rst1!F Then Fa = rst1!F : : If Ma > rst1!M Then Ma = rst1!M : : rst1.MoveNextNext : 多一個Next : : Next : 固定10282筆資料? 嗯! 因為我的資料永遠只會有10282筆 : : Rb = (Ra + Rc) / 2 : : Fb = (Fa + Fc) / 2 : : Mb = (Ma + Mc) / 2 : : rs1.MoveFirst : : For i = 1 To 10282 ============>這裡!! 這次出現的錯誤訊息是 Microsoft VBScript 編譯階段錯誤 錯誤 '800a0410' 'For' 迴圈的計數變數不正確 For i = 1 To 10282 ------^ 難道是原本的程式就是寫錯的?? 因為這邊我都沒有動到~~ : : If rst1!R<= Ra Then : : R(i, 1) = 1 : : R(i, 2) = 0 : : R(i, 3) = 0 : : .......以下都是IF THEN...... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.171.154.109
fumizuki:以這程式碼看來,看不出for 有錯誤@@" 210.58.156.43 03/20
> -------------------------------------------------------------------------- < 作者: misssun (sun) 看板: Visual_Basic 標題: Re: [問題] 請問VB與VBscript 時間: Sun Mar 20 19:47:13 2005 還是我的資料庫有錯呢?! 照理說應該是沒有錯誤.... 麻煩您再幫我看看程式部分是否已沒有問題了呢?! 謝謝~~~ 我整段po出來,麻煩您了~~~~~~~ 感激不盡!! '宣告 Dim db Dim rs1 Dim rst1 Dim rs2 Dim rst2 Dim rs3 Dim rst3 Dim rs4 Dim rs5 Dim rs6 Dim R(10283, 3), F(10283, 3), M(10283, 3) Dim Litemset_1R(3), Litemset_1F(3), Litemset_1M(3) '宣告存放學生id的動態陣例 ReDim sArray1(10281),sArray2(10281),sArray3(10281),sArray4(10281),sArray5(10281),sArray6(10281),sArray7(10281),sArray8(10281),sArray9(10281) ReDim sArray10(10281),sArray11(10281),sArray12(10281),sArray13(10281),sArray14(10281),sArray15(10281),sArray16(10281),sArray17(10281),sArray18(10281),sArray19(10281) ReDim sArray20(10281),sArray21(10281),sArray22(10281),sArray23(10281),sArray24(10281),sArray25(10281),sArray26(10281),sArray27(10281) Private Sub Command1_Click() afa1 = Val(Text1) Set conn = Server.CreateObject("ADODB.Connection") DBPath = Server.MapPath("rfmdb.mdb") conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath Set rs = Server.CreateObject("ADODB.Recordset") wSQL1 ="select * from CRFM1997" rs.Open wSQL1, conn, 3,3 'wSQL1 = "select * from CRFM1997" Set db = OpenDatabase(App.Path + "\rfmdb.mdb") Set rs1 = db.OpenRecordset(wSQL1) Set rst1 = db.OpenRecordset(wSQL1) '1997年RFM顧客分群 '找出RFM的最大與最小值與模糊歸屬函數參數值 rst1.MoveFirst Rc = rst1("R") Fc = rst1("F") Mc = rst1("M") Ra = rst1("R") Fa = rst1("F") Ma = rst1("M") rst1.MoveNext For i = 2 To 10282 If Rc < rst1("R") Then Rc = rst1("R") If Fc < rst1("F") Then Fc = rst1("F") If Mc < rst1("M") Then Mc = rst1("M") If Ra > rst1("R") Then Ra = rst1("R") If Fa > rst1("F") Then Fa = rst1("F") If Ma > V Then Ma = rst1("M") rst1.MoveNext Rb = (Ra + Rc) / 2 Fb = (Fa + Fc) / 2 Mb = (Ma + Mc) / 2 rs1.MoveFirst For i = 1 To 10282 'Select Case rs1R '計算每位顧客R的歸屬度值 'If a < 0 Then 'Case rs1R <= Ra If rst1("R")<= Ra Then R(i, 1) = 1 R(i, 2) = 0 R(i, 3) = 0 'ElseIf a >= 1 And a <=50 Then ==>VB script寫法 'Case Ra To Rb ==>VB寫法 ElseIf rst1("R") >= Ra And rst1("R") <=Rb Then R(i, 1) = (Rb - rs1R) / (Rb - Ra) R(i, 2) = (rst1("R") - Ra) / (Rb - Ra) R(i, 3) = 0 'ElseIf a >=51 And a<=99 Then 'Case Rb To Rc ElseIf rst1("R") >= Rb And rst1("R") <=Rc Then R(i, 1) = 0 R(i, 2) = (Rc - rst1("R")) / (Rc - Rb) R(i, 3) = (rst1("R") - Rb) / (Rc - Rb) 'Case rs1R >= Rc ElseIf rst1("R") >= Rc Then R(i, 1) = 0 R(i, 2) = 0 R(i, 3) = 1 End If 'End Select 'Select Case rs1F '計算每位顧客F的歸屬度值 'Case rs1F <= Fa If rst1("F") <= Fa Then F(i, 1) = 1 F(i, 2) = 0 F(i, 3) = 0 'Case Fa To Fb ElseIf rst1("F") >= Fa And rst1("F") <=Fb Then F(i, 1) = (Fb - rst1("F")) / (Fb - Fa) F(i, 2) = (rst1("F") - Fa) / (Fb - Fa) F(i, 3) = 0 'Case Fb To Fc ElseIf rst1("F") >= Fb And rst1("F") <=Fc Then F(i, 1) = 0 F(i, 2) = (Fc - rst1("F")) / (Fc - Fb) F(i, 3) = (rst1("F") - Fb) / (Fc - Fb) 'Case rs1F >= Fc ElseIf rst1("F") >= Fc Then F(i, 1) = 0 F(i, 2) = 0 F(i, 3) = 1 End If 'End Select 'Select Case rs1M '計算每位顧客R的歸屬度值 'Case rs1M <= Ma If rst1("M") <= Ma Then M(i, 1) = 1 M(i, 2) = 0 M(i, 3) = 0 'Case Ma To Mb ElseIf rst1("M") >= Ma And rst1("M") <=Mb Then M(i, 1) = (Mb - rst1("M")) / (Mb - Ma) M(i, 2) = (rst1("M") - Ma) / (Mb - Ma) M(i, 3) = 0 'Case Mb To Mc ElseIf rst1("M") >= Mb And rst1("M") <=Mc Then M(i, 1) = 0 M(i, 2) = (Mc - rst1("M")) / (Mc - Mb) M(i, 3) = (rst1("M") - Mb) / (Mc - Mb) 'Case rs1M >= Mc ElseIf rst1("M") >= Mc Then M(i, 1) = 0 M(i, 2) = 0 M(i, 3) = 1 End If 'End Select '找出顧客的R/F/M For p = 1 To 3 If R(i, p) > 0 Then Litemset_1R(p) = 1 Else Litemset_1R(p) = 0 Next For q = 1 To 3 If F(i, q) > 0 Then Litemset_1F(q) = 1 Else Litemset_1F(q) = 0 Next For j = 1 To 3 If M(i, j) > 0 Then Litemset_1M(j) = 1 Else Litemset_1M(j) = 0 Next '顧客分群(共27群) If Litemset_1R(1) = 1 And Litemset_1F(3) = 1 And Litemset_1M(3) = 1 Then CLUW = R(i, 1) * F(i, 3) * M(i, 3) If Litemset_1R(1) = 1 And Litemset_1F(3) = 1 And Litemset_1M(3) = 1 And CLUW >= afa1 Then Adodc1.Recordset.AddNew Adodc1.Recordset("CID") = sArray1(i) Adodc1.Recordset("CLU") = "1" Adodc1.Recordset("CTYPE") = "忠誠的老顧客(高消費非理性型)" Adodc1.Recordset("CLUW") = CLUW Adodc1.Recordset.Update response.write"<FONT Color=#97be1c>" & "代碼" & sArray1(i) & "</p>" & "</font> " response.Write "此群集為 " & "忠誠的老顧客(高消費非理性型)" & "</p>" End If .....中間省略 If Litemset_1R(3) = 1 And Litemset_1F(1) = 1 And Litemset_1M(1) = 1 Then CLUW = R(i, 3) * F(i, 1) * M(i, 1) If Litemset_1R(3) = 1 And Litemset_1F(1) = 1 And Litemset_1M(1) = 1 And CLUW >= afa1 Then Adodc1.Recordset("CID") = sArray27(i) Adodc1.Recordset("CLU") = "27" Adodc1.Recordset("CTYPE") = "離開有很久的低忠誠顧客" Adodc1.Recordset("CLUW") = CLUW Adodc1.Recordset.Update response.write"<FONT Color=#97be1c>" & "代碼" & sArray27(i) & "</p>" & "</font> " response.Write "此群集為 " & "離開有很久的低忠誠顧客" & "</p>" End If rs1.MoveNext Next End Sub -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.171.154.109 > -------------------------------------------------------------------------- < 作者: fumizuki (小獅) 看板: Visual_Basic 標題: Re: [問題] 請問VB與VBscript 時間: Sun Mar 20 20:13:12 2005 ※ 引述《misssun (sun)》之銘言: : rst1.MoveNext : For i = 2 To 10282 : If Rc < rst1("R") Then Rc = rst1("R") : If Fc < rst1("F") Then Fc = rst1("F") : If Mc < rst1("M") Then Mc = rst1("M") : If Ra > rst1("R") Then Ra = rst1("R") : If Fa > rst1("F") Then Fa = rst1("F") : If Ma > V Then Ma = rst1("M") : rst1.MoveNext Next : Rb = (Ra + Rc) / 2 : Fb = (Fa + Fc) / 2 : Mb = (Ma + Mc) / 2 : rs1.MoveFirst -- 人若無星爺,跟條鹹魚有何分別? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.58.156.43 > -------------------------------------------------------------------------- < 作者: misssun (sun) 看板: Visual_Basic 標題: Re: [問題] 請問VB與VBscript 時間: Sun Mar 20 20:38:32 2005 哈! 我剛剛也發現了!! 真是白痴... 不過..... 為何我想要response.Write出來的東西 仍舊一片空白....是因為裡面本來就是空的嗎?? 沒有任何錯誤訊息了.... 就是一面白...... WHY.... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.171.154.109 ※ 編輯: misssun 來自: 218.171.154.109 (03/20 20:46)
fumizuki:看你response前的if條件是否一定成立 210.58.156.43 03/20
> -------------------------------------------------------------------------- < 作者: fumizuki (小獅) 看板: Visual_Basic 標題: Re: [問題] 請問VB與VBscript 時間: Sun Mar 20 20:54:18 2005 ※ 引述《misssun (sun)》之銘言: : 哈! 我剛剛也發現了!! 真是白痴... : 不過..... : 為何我想要response.Write出來的東西 : 仍舊一片空白....是因為裡面本來就是空的嗎?? : 沒有任何錯誤訊息了.... 就是一面白...... WHY.... 看你 ie 有沒有打開 每次出現指令碼錯誤皆顯示通知 response前的if條件一定成立嗎? 空白的話,就加幾行 response 輸出變數內容或任意內容偵錯, 看看有沒有執行,條件有沒有成立 -- 人若無星爺,跟條鹹魚有何分別? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.58.156.43 > -------------------------------------------------------------------------- < 作者: misssun (sun) 看板: Visual_Basic 標題: Re: [問題] 請問VB與VBscript 時間: Sun Mar 20 21:23:08 2005 ※ 引述《fumizuki (小獅)》之銘言: : ※ 引述《misssun (sun)》之銘言: : : 哈! 我剛剛也發現了!! 真是白痴... : : 不過..... : : 為何我想要response.Write出來的東西 : : 仍舊一片空白....是因為裡面本來就是空的嗎?? : : 沒有任何錯誤訊息了.... 就是一面白...... WHY.... : 看你 ie 有沒有打開 每次出現指令碼錯誤皆顯示通知 : response前的if條件一定成立嗎? : 空白的話,就加幾行 response 輸出變數內容或任意內容偵錯, : 看看有沒有執行,條件有沒有成立 嗯! 謝謝您花這麼多時間看我的程式, 雖然我還找不出來哪邊有問題, 但您已解決我許多疑問,再次謝謝您!!!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.171.154.109 > -------------------------------------------------------------------------- < 作者: misssun (sun) 看板: Visual_Basic 標題: Re: [問題] 請問VB與VBscript 時間: Sun Mar 20 22:01:22 2005 ※ 引述《misssun (sun)》之銘言: : '宣告 : Dim db : Dim rs1 : Dim rst1 : Dim rs2 : Dim rst2 : Dim rs3 : Dim rst3 : Dim rs4 : Dim rs5 : Dim rs6 : Dim R(10283, 3), F(10283, 3), M(10283, 3) : Dim Litemset_1R(3), Litemset_1F(3), Litemset_1M(3) : '宣告存放學生id的動態陣例 : ReDim sArray1(10281),sArray2(10281),sArray3(10281),sArray4(10281),sArray5(10281),sArray6(10281),sArray7(10281),sArray8(10281),sArray9(10281) : ReDim sArray10(10281),sArray11(10281),sArray12(10281),sArray13(10281),sArray14(10281),sArray15(10281),sArray16(10281),sArray17(10281),sArray18(10281),sArray19(10281) : ReDim sArray20(10281),sArray21(10281),sArray22(10281),sArray23(10281),sArray24(10281),sArray25(10281),sArray26(10281),sArray27(10281) : Private Sub Command1_Click() 我後來發現是這行有問題,這行以下的程式通通都沒有跑, 所以網頁上會一面白,是我語法出了錯嗎? 麻煩您再撥空指導我一下,謝謝!!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.171.154.109 > -------------------------------------------------------------------------- < 作者: fumizuki (小獅) 看板: Visual_Basic 標題: Re: [問題] 請問VB與VBscript 時間: Mon Mar 21 06:49:27 2005 ※ 引述《misssun (sun)》之銘言: : : Private Sub Command1_Click() : 我後來發現是這行有問題,這行以下的程式通通都沒有跑, : 所以網頁上會一面白,是我語法出了錯嗎? : 麻煩您再撥空指導我一下,謝謝!!! 不是語法錯誤,是物件錯誤 是在 vb 中一個名為 Comannd1 的物件(是個按鈕) 給你一個範例 <body> <script language="vbscript"> Sub xd() Msgbox "xd" End Sub </script> <input type=submit value="確定" onclick="xd()"> </body> -- 人若無星爺,跟條鹹魚有何分別? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.58.156.43 > -------------------------------------------------------------------------- < 作者: misssun (sun) 看板: Visual_Basic 標題: Re: [問題] 請問VB與VBscript 時間: Mon Mar 21 10:55:46 2005 謝謝! 我改過之後 又出現物件的問題 wSQL1 = "select * from CRFM1997" Set db = OpenDatabase(App.Path + "\rfmdb.mdb") =====>出現錯誤訊息處 Set rs1 = db.OpenRecordset(wSQL1) Set rst1 = db.OpenRecordset(wSQL1) 錯誤訊息是"Microsoft VBScript 執行階段錯誤 錯誤 '800a01a8' 此處需要物件: '' " 這不是連上資料庫的語法嗎? 還是我誤會了?! Set conn = Server.CreateObject("ADODB.Connection") DBPath = Server.MapPath("rfmdb.mdb") conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath Set rs = Server.CreateObject("ADODB.Recordset") wSQL1 ="select * from CRFM1997" rs.Open wSQL1, conn, 3,3 這邊是我連資料庫的語法,但我不明白OpenRecordset是什麼,所以當初就保留了 這段程式碼沒修改.....也是會出現"此處需要物件"的錯誤訊息... ※ 引述《fumizuki (小獅)》之銘言: : ※ 引述《misssun (sun)》之銘言: : : 我後來發現是這行有問題,這行以下的程式通通都沒有跑, : : 所以網頁上會一面白,是我語法出了錯嗎? : : 麻煩您再撥空指導我一下,謝謝!!! : 不是語法錯誤,是物件錯誤 : 是在 vb 中一個名為 Comannd1 的物件(是個按鈕) : 給你一個範例 : <body> : <script language="vbscript"> : Sub xd() : Msgbox "xd" : End Sub : </script> : <input type=submit value="確定" onclick="xd()"> : </body> -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.171.148.72 > -------------------------------------------------------------------------- < 作者: fumizuki (小獅) 看板: Visual_Basic 標題: Re: [問題] 請問VB與VBscript 時間: Mon Mar 21 11:19:15 2005 ※ 引述《misssun (sun)》之銘言: : 謝謝! 我改過之後 : 又出現物件的問題 : wSQL1 = "select * from CRFM1997" : Set db = OpenDatabase(App.Path + "\rfmdb.mdb") =====>出現錯誤訊息處 : Set rs1 = db.OpenRecordset(wSQL1) : Set rst1 = db.OpenRecordset(wSQL1) : 錯誤訊息是"Microsoft VBScript 執行階段錯誤 錯誤 '800a01a8' : 此處需要物件: '' " : 這不是連上資料庫的語法嗎? 還是我誤會了?! : Set conn = Server.CreateObject("ADODB.Connection") : DBPath = Server.MapPath("rfmdb.mdb") : conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath : Set rs = Server.CreateObject("ADODB.Recordset") : wSQL1 ="select * from CRFM1997" : rs.Open wSQL1, conn, 3,3 : 這邊是我連資料庫的語法,但我不明白OpenRecordset是什麼,所以當初就保留了 : 這段程式碼沒修改.....也是會出現"此處需要物件"的錯誤訊息... 邏輯怪怪的 為什麼同一個資料表要開三次?(rs1、rst1、rs) 而且 OpenDatabase 和 OpenRecordset 是自訂函式? 我沒看到完整的程式碼,不知道你的目的是什麼,很難給你一個標準答案。 我目前認為啦,一個rs就夠了,其他的都是多餘的, 正確的開啟資料庫方法是 createobject 那一段 -- 人若無星爺,跟條鹹魚有何分別? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.222.155.162 > -------------------------------------------------------------------------- < 作者: misssun (sun) 看板: Visual_Basic 標題: Re: [問題] 請問VB與VBscript 時間: Mon Mar 21 11:37:34 2005 可是我將 Set rs1 = db.OpenRecordset(wSQL1) Set rst1 = db.OpenRecordset(wSQL1)這兩行刪除之後, 變成rst1.MoveFirst這行出相同的錯誤訊息.... 下面是rs1.MoveFirst 這行之前的所有程式碼..... (在我完全沒有更動他之前) Dim db As Database Dim rs1 As Recordset Dim rst1 As Recordset Dim rs2 As Recordset Dim rst2 As Recordset Dim rs3 As Recordset Dim rst3 As Recordset Dim rs4 As Recordset Dim rs5 As Recordset Dim rs6 As Recordset Dim R(10283, 3), F(10283, 3), M(10283, 3) Dim Litemset_1R(3), Litemset_1F(3), Litemset_1M(3) '宣告 Private Sub Command1_Click() afa1 = Val(Text1) =======>另外,我還想請教一下VAL的作用是...? 這行也會出現錯誤訊息,"VAL型態不符合" wSQL1 = "select * from CRFM1997" Set db = OpenDatabase(App.Path + "\rfmdb.mdb") Set rs1 = db.OpenRecordset(wSQL1) Set rst1 = db.OpenRecordset(wSQL1) '1997年RFM顧客分群 '找出RFM的最大與最小值與模糊歸屬函數參數值 rst1.MoveFirst ========>出現錯誤訊息處! Rc = rst1!R Fc = rst1!F Mc = rst1!M Ra = rst1!R Fa = rst1!F Ma = rst1!M rst1.MoveNext For i = 2 To 10282 If Rc < rst1!R Then Rc = rst1!R If Fc < rst1!F Then Fc = rst1!F If Mc < rst1!M Then Mc = rst1!M If Ra > rst1!R Then Ra = rst1!R If Fa > rst1!F Then Fa = rst1!F If Ma > rst1!M Then Ma = rst1!M rst1.MoveNext Next Rb = (Ra + Rc) / 2 Fb = (Fa + Fc) / 2 Mb = (Ma + Mc) / 2 rs1.MoveFirst 我還想請問一下 Adodc1.Recordset 是什麼物件? 謝謝~~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.171.148.72 ※ 編輯: misssun 來自: 218.171.148.72 (03/21 11:38) > -------------------------------------------------------------------------- < 作者: fumizuki (小獅) 看板: Visual_Basic 標題: Re: [問題] 請問VB與VBscript 時間: Mon Mar 21 12:07:04 2005 ※ 引述《misssun (sun)》之銘言: : Dim db As Database : Dim rs1 As Recordset : Dim rst1 As Recordset : Dim rs2 As Recordset : Dim rst2 As Recordset : Dim rs3 As Recordset : Dim rst3 As Recordset : Dim rs4 As Recordset : Dim rs5 As Recordset : Dim rs6 As Recordset : Dim R(10283, 3), F(10283, 3), M(10283, 3) : Dim Litemset_1R(3), Litemset_1F(3), Litemset_1M(3) : '宣告 : Private Sub Command1_Click() : afa1 = Val(Text1) =======>另外,我還想請教一下VAL的作用是...? : 這行也會出現錯誤訊息,"VAL型態不符合" Text1是個文字方塊,必須輸入一個數字。 Val()是將字串型態(String)的資料轉成數值型態(Double) Text1 用 <input name=Text1 type=text> 替換 : wSQL1 = "select * from CRFM1997" : Set db = OpenDatabase(App.Path + "\rfmdb.mdb") : Set rs1 = db.OpenRecordset(wSQL1) : Set rst1 = db.OpenRecordset(wSQL1) : '1997年RFM顧客分群 : '找出RFM的最大與最小值與模糊歸屬函數參數值 : rst1.MoveFirst ========>出現錯誤訊息處! 訊息為何? 問題你OpenRecordset那段沒有改成正確的啊 : Rc = rst1!R : Fc = rst1!F : Mc = rst1!M : Ra = rst1!R : Fa = rst1!F : Ma = rst1!M : rst1.MoveNext : For i = 2 To 10282 : If Rc < rst1!R Then Rc = rst1!R : If Fc < rst1!F Then Fc = rst1!F : If Mc < rst1!M Then Mc = rst1!M : If Ra > rst1!R Then Ra = rst1!R : If Fa > rst1!F Then Fa = rst1!F : If Ma > rst1!M Then Ma = rst1!M : rst1.MoveNext : Next : Rb = (Ra + Rc) / 2 : Fb = (Fa + Fc) / 2 : Mb = (Ma + Mc) / 2 : rs1.MoveFirst : 我還想請問一下 Adodc1.Recordset 是什麼物件? 謝謝~~ 資料庫存取物件的一種,用在 vb 表單上,配合 Data 物件使用 adodc.recordset一樣替換成 adodb.recordset 物件... set rs = createobject("adodb.recordset") 那段啊... -- 人若無星爺,跟條鹹魚有何分別? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.222.155.162 > -------------------------------------------------------------------------- < 作者: misssun (sun) 看板: Visual_Basic 標題: Re: [問題] 請問VB與VBscript 時間: Mon Mar 21 12:29:33 2005 ※ 引述《fumizuki (小獅)》之銘言: : : Set db = OpenDatabase(App.Path + "\rfmdb.mdb") : : Set rs1 = db.OpenRecordset(wSQL1) : : Set rst1 = db.OpenRecordset(wSQL1) : : '1997年RFM顧客分群 : : '找出RFM的最大與最小值與模糊歸屬函數參數值 : : rst1.MoveFirst ========>出現錯誤訊息處! : 訊息為何? : 問題你OpenRecordset那段沒有改成正確的啊 您不是說他們是多餘的? 所以我以為是可以把他們刪掉的意思... 我現在明白了! 這邊改完之後,出現的錯誤訊息是"發生例外。" rs1.MoveFirst For i = 1 To 10282 If rst1("R")<= Ra Then ===>就是這行! R(i, 1) = 1 R(i, 2) = 0 R(i, 3) = 0 ElseIf rst1("R") >= Ra And rst1("R") <=Rb Then R(i, 1) = (Rb - rst1("R")) / (Rb - Ra) R(i, 2) = (rst1("R") - Ra) / (Rb - Ra) R(i, 3) = 0 發生例外,是指rst1("R") > Ra嗎?? 如果是這樣,應該跑下一行就好啦~~ 為什麼還會有例外發生呢? 不好意思~ 麻煩您教教我~ 謝謝~~~ : : Rc = rst1!R : : Fc = rst1!F : : Mc = rst1!M : : Ra = rst1!R : : Fa = rst1!F : : Ma = rst1!M : : rst1.MoveNext : : For i = 2 To 10282 : : If Rc < rst1!R Then Rc = rst1!R : : If Fc < rst1!F Then Fc = rst1!F : : If Mc < rst1!M Then Mc = rst1!M : : If Ra > rst1!R Then Ra = rst1!R : : If Fa > rst1!F Then Fa = rst1!F : : If Ma > rst1!M Then Ma = rst1!M : : rst1.MoveNext : : Next : : Rb = (Ra + Rc) / 2 : : Fb = (Fa + Fc) / 2 : : Mb = (Ma + Mc) / 2 : : rs1.MoveFirst : : 我還想請問一下 Adodc1.Recordset 是什麼物件? 謝謝~~ : 資料庫存取物件的一種,用在 vb 表單上,配合 Data 物件使用 : adodc.recordset一樣替換成 adodb.recordset 物件... : set rs = createobject("adodb.recordset") : 那段啊... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.171.148.72 ※ 編輯: misssun 來自: 218.171.148.72 (03/21 13:34)
fumizuki:我不知道為何會例外呢 61.222.155.162 03/21
fumizuki:「發生例外」這個錯誤訊息很不明確 61.222.155.162 03/21
fumizuki:有很多種原因 61.222.155.162 03/21
> -------------------------------------------------------------------------- < 作者: fumizuki (小獅) 看板: Visual_Basic 標題: Re: [問題] 請問VB與VBscript 時間: Mon Mar 21 12:25:35 2005 在1517篇有講過了,那個語法在script上也通用 建立一個資料庫連線的物件 Set conn = Server.CreateObject("ADODB.Connection") ^^^^^^^ 可以省略不用 取得資料庫檔案 "rfmdb.mdb" 的絕對路徑 DBPath = Server.MapPath("rfmdb.mdb") ^^^^^^^^^^^^^^^ ASP 內建的物件,VBScript 沒有這個東西 在網路上做資料庫存取,一定要使用ASP或PHP 等語言 如果在本機做資料庫存取的話,只須寫 DBPath = "C:\???????\rfmdb.mdb" 就可以了。 開啟資料庫 conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath 建立資料表物件 Set rs = Server.CreateObject("ADODB.Recordset") ^^^^^^^一樣可以省略不用..VBScript 必須省略(應該是吧?) SQL 查詢語言的語法,選擇 CRFM1997 中的所有欄位資料。 wSQL1 ="select * from CRFM1997" 開啟資料表,第一個參數是查詢語法,第二個參數是連線物件。 rs.Open wSQL1, conn, 3,3 -- 人若無星爺,跟條鹹魚有何分別? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.222.155.162 > -------------------------------------------------------------------------- < 作者: misssun (sun) 看板: Visual_Basic 標題: Re: [問題] 請問VB與VBscript 時間: Mon Mar 21 12:35:31 2005 ※ 引述《fumizuki (小獅)》之銘言: : 在1517篇有講過了,那個語法在script上也通用 : 建立一個資料庫連線的物件 : Set conn = Server.CreateObject("ADODB.Connection") : ^^^^^^^ 可以省略不用 : 取得資料庫檔案 "rfmdb.mdb" 的絕對路徑 : DBPath = Server.MapPath("rfmdb.mdb") : ^^^^^^^^^^^^^^^ ASP 內建的物件,VBScript 沒有這個東西 : 在網路上做資料庫存取,一定要使用ASP或PHP 等語言 : 如果在本機做資料庫存取的話,只須寫 : DBPath = "C:\???????\rfmdb.mdb" : 就可以了。 嗯!了解了! 不過我是要在網路上作資料存取的~~ : 開啟資料庫 : conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath : 建立資料表物件 : Set rs = Server.CreateObject("ADODB.Recordset") : ^^^^^^^一樣可以省略不用..VBScript 必須省略(應該是吧?) 嗯...應該是可以不用省略,我有另外一支可以跑的程式, 裡頭呼叫資料庫的時候,沒有把SERVER省略掉,我是沒試過把他省略還可不可以跑就是了.. : SQL 查詢語言的語法,選擇 CRFM1997 中的所有欄位資料。 : wSQL1 ="select * from CRFM1997" : 開啟資料表,第一個參數是查詢語法,第二個參數是連線物件。 : rs.Open wSQL1, conn, 3,3 那我想再請問一下,為什麼都是3,3呢 ?? 這邊其實我疑惑很久了~~ 謝謝您的詳細說明!! 獲益良多!!! 謝謝!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.171.148.72
fumizuki:詳細的內容不記得了 61.222.155.162 03/21
fumizuki:我都是用 rs.open sql, conn, 1, 3, 1 的 61.222.155.162 03/21
fumizuki:其中一個參數是唯讀存取或獨佔存取或共享 61.222.155.162 03/21
fumizuki:我要查一下資料,才知道詳細的使用方法 61.222.155.162 03/21
fumizuki:那你是用ASP寫的? 61.222.155.162 03/21
misssun:嗯 是的 是ASP 218.171.148.72 03/21
fumizuki:http://vb.infoserv.com.tw/ vb研究小站 61.222.155.162 03/21
fumizuki:之裡沒有ASP專門版啊@@...不過有Web_Design版 61.222.155.162 03/21
misssun:可是這部份已涉及演算法,普通的網站好像幫不了我 218.171.148.72 03/21
misssun:而且我也沒有ASP的問題,演算法這東西還真是不知 218.171.148.72 03/21
misssun:能向誰問....總不能叫學校老師幫我DEBUG /_\ 218.171.148.72 03/21
misssun:跟你請教一下囉~ 218.171.148.72 03/21
misssun:其實現在沒什麼時間管那個3,3是什麼意思,只是正 218.171.148.72 03/21
misssun:好在這邊提到了,就順便跟您請教一下囉! 218.171.148.72 03/21