การวิเคราะห์ getrows และการใช้ getstring ของอ็อบเจ็กต์ชุดเร็กคอร์ดใน asp เพื่อนที่ต้องการสามารถอ้างอิงถึง เมธอด GetRows
คัดลอกหลายระเบียนของวัตถุ Recordset ลงในอาร์เรย์
ไวยากรณ์
คัดลอกรหัสรหัสดังต่อไปนี้:
array = recordset.GetRows( แถว, เริ่ม, ฟิลด์)
ส่งกลับค่า
ส่งกลับอาร์เรย์สองมิติ
พารามิเตอร์
แถว (ไม่บังคับ) นิพจน์แบบยาวที่ระบุจำนวนระเบียนที่จะดึงข้อมูล ค่าเริ่มต้นคือ adGetRowsRest (-1)
เริ่มทางเลือก แบบสตริงหรือแบบยาว คำนวณบุ๊กมาร์กของเรกคอร์ดเมื่อเริ่มต้นการดำเนินการ GetRows สามารถใช้ค่า BookmarkEnum ต่อไปนี้ได้
คำอธิบายคงที่
AdBookmarkCurrent เริ่มต้นด้วยบันทึกปัจจุบัน
AdBookmarkFirst เริ่มต้นด้วยบันทึกแรก
AdBookmarkLast เริ่มจากบันทึกล่าสุด
ฟิลด์เป็นตัวเลือก ประเภทตัวแปร ซึ่งแสดงถึงชื่อฟิลด์เดียว ตำแหน่งตามลำดับ อาร์เรย์ของชื่อฟิลด์ หรือหมายเลขตำแหน่งตามลำดับ ADO ส่งคืนข้อมูลจากฟิลด์เหล่านี้เท่านั้น
แสดงให้เห็น
ใช้เมธอดGetRowsเพื่อคัดลอกระเบียนจาก Recordset ลงในอาร์เรย์สองมิติ ตัวห้อยตัวแรกระบุฟิลด์ และตัวที่สองระบุหมายเลขบันทึก ตัวแปรอาร์เรย์จะปรับขนาดที่ถูกต้องโดยอัตโนมัติเมื่อเมธอด GetRows ส่งคืนข้อมูล
หากคุณไม่ได้ระบุค่าสำหรับพารามิเตอร์ Rows วิธีการ GetRows จะดึงข้อมูลระเบียนทั้งหมดในวัตถุ Recordset โดยอัตโนมัติ หากมีการร้องขอระเบียนมากกว่าที่มีอยู่ GetRows จะส่งกลับเฉพาะจำนวนระเบียนที่มีอยู่เท่านั้น
ถ้าวัตถุชุดระเบียนสนับสนุนบุ๊กมาร์ก คุณสามารถระบุระเบียนที่เมธอด GetRows จะเริ่มดึงข้อมูลโดยการส่งค่าของคุณสมบัติบุ๊กมาร์กของระเบียน
หากต้องการจำกัดฟิลด์ที่ส่งคืนโดยการเรียก GetRows คุณสามารถส่งชื่อ/หมายเลขฟิลด์เดียวหรืออาร์เรย์ของชื่อ/หมายเลขฟิลด์ในพารามิเตอร์ Fields ได้
หลังจากที่เรียก GetRows ระเบียนที่ยังไม่ได้อ่านถัดไปจะกลายเป็นระเบียนปัจจุบัน หรือหากไม่มีระเบียนอีกต่อไป คุณสมบัติ EOF จะถูกตั้งค่าเป็น True
วิธีการ GetString
ในการสืบค้นฐานข้อมูลเพื่อแสดงตาราง เรามักจะใช้ Do While()...Loop หรือ For...Next loop เพื่อแสดงตาราง ดังนั้นเมื่อเราต้องการสืบค้นข้อมูลจำนวนมาก มันก็จะช้าลงอย่างหลีกเลี่ยงไม่ได้ ในขณะนี้ เราสามารถใช้เมธอด GetString() ที่ได้รับจากวัตถุชุดระเบียน (ต้องอัปเกรด ADO เป็น 2.0)
ไวยากรณ์
คัดลอกรหัสรหัสดังต่อไปนี้:
Str=objRecordset.GetString(รูปแบบ,n,coldel,rowdel,nullexpr)
คำอธิบายพารามิเตอร์:
objRecordset: วัตถุชุดระเบียนที่เปิด;
รูปแบบ: ไม่จำเป็น โดยทั่วไปจะใช้ค่าเริ่มต้น (ค่าเริ่มต้นคือ 2)
n: ทางเลือกคือจำนวนเรคคอร์ดที่จะแสดง ค่าเริ่มต้นคือการแสดงทั้งหมด
coldel: ตัวเลือก ตัวคั่นคอลัมน์
rowdel: เป็นทางเลือก ตัวคั่นแถว
nullexpr: เป็นทางเลือก พารามิเตอร์นี้ใช้เพื่อกรอกข้อมูลในช่องว่าง!
ด้วยเมธอด GetString เราสามารถใช้ Response.Write ได้เพียงอันเดียวเพื่อแสดงเอาต์พุตทั้งหมด ซึ่งเหมือนกับ DO... LOOP loop ที่สามารถระบุได้ว่า Recordset เป็น EOF หรือไม่
เมื่อใช้วิธีการนี้ คุณจะสามารถส่งออกสตริงเป็นลูปได้โดยอัตโนมัติ โดยไม่ต้องผ่าน while หรือ for loop ตราบใดที่อ็อบเจ็กต์ RS ถูกสร้างขึ้นและดำเนินการที่เกี่ยวข้อง ไม่ว่าจะส่งคืนหนึ่งเรกคอร์ดขึ้นไป หรือแม้แต่ว่างเปล่าก็ตาม บันทึก getstring ทำงานตามปกติ
ในการสร้างตาราง HTML จากผลลัพธ์ของชุดระเบียน เราจำเป็นต้องสนใจพารามิเตอร์ 3 ใน 5 ของ GetString เท่านั้น: coldel (โค้ด HTML ที่แยกคอลัมน์ของชุดระเบียน), rowdel (โค้ด HTML ที่แยกแถวของ ชุดระเบียน) และ nullexpr (โค้ด HTML ที่ควรสร้างขึ้นเมื่อระเบียนปัจจุบันว่างเปล่า)
คัดลอกรหัสรหัสดังต่อไปนี้:
<เส้นขอบตาราง=1>
<TR><TD>
<% = การตอบสนองเขียน rs.GetString( , , </TD><TD>, </TD></TR><TR>, ) %>
</ตาราง>
ผลลัพธ์ HTML เขียนดังนี้:
คัดลอกรหัสรหัสดังต่อไปนี้:
<เส้นขอบตาราง=1>
<TR>
<TD>แถว1 ค่า field1</TD>
<TD>ค่า row1, field2</TD>
</TR>
<TR>
<TD>แถว2 ค่า field1</TD>
<TD>ค่า row2, field2</TD>
</TR>
</ตาราง>
มี BUG ที่นี่ มาดูการสร้างเมนูแบบเลื่อนลงกัน:
คัดลอกรหัสรหัสดังต่อไปนี้:
-
ตั้งค่า RS = conn.Execute (เลือกค่า, ข้อความจาก selectOptionsTable หรือตามข้อความ)
optSuffix = </OPTION> & vbNewLine
valPrefix = <ค่าตัวเลือก='
valSuffix = '>
opts = RS.GetString( , , valSuffix, optSuffix & valPrefix, --error-- )
' บรรทัดถัดไปคือกุญแจสำคัญ!
opts = ซ้าย (opts, Len(opts)-Len(valPrefix) )
Response.Write <เลือก ...> & vbNewLine
การตอบสนองเขียน valPrefix & ตัวเลือก
การตอบสนองเขียน </Select>
-
หากคุณต้องการสร้างตารางที่ถูกต้องและแก้ไขจุดบกพร่อง เพียงทำดังนี้:
คัดลอกรหัสรหัสดังต่อไปนี้:
-
ตั้งค่า RS = conn.Execute (เลือก * จากตาราง)
tdSuffix = </TD> & vbNewLine & <TD>
trPrefix = <TR> & vbNewLine & <TD>
trSuffix = </TD> & vbNewLine & </TR> & vbNewLine & <TR> & vbNewLine
opts = RS.GetString( , , tdSuffix, trSuffix & trPrefix, --error-- )
' บรรทัดถัดไปคือกุญแจสำคัญ!
opts = ซ้าย (opts, Len(opts)-Len(trPrefix) )
Response.Write <TABLE Border=1 CellPadding=5> & vbNewLine
การตอบสนองเขียน trPrefix & ตัวเลือก
การตอบกลับเขียน </TABLE> & vbNewLine
-
เรามาแนะนำแนวทางที่แตกต่างไปจากเดิมอย่างสิ้นเชิง:
คัดลอกรหัสรหัสดังต่อไปนี้:
-
SQL = เลือก '<OPTION Value=''',value,'''>',text,'</OPTION>' จากตารางหรือตามข้อความ
ตั้งค่า RS = conn.Execute(SQL)
Response.Write <เลือก> & vbNewLine & RS.GetString(,,,vbNewLine) & </Select>
-
คุณเคยใช้มันหรือไม่? - -
คุณเห็นสิ่งนั้นไหม? ผลลัพธ์สามารถส่งคืนได้โดยตรงจากแบบสอบถาม
ก้าวไปอีกขั้นหนึ่ง คุณสามารถทำได้:
คัดลอกรหัสรหัสดังต่อไปนี้:
-
SQL = เลือก '<OPTION Value=''' & value & '''>' & text & '</OPTION>' จากตารางหรือตามข้อความ
ตั้งค่า RS = conn.Execute(SQL)
Response.Write <เลือก> & vbNewLine & RS.GetString(,,,vbNewLine) & </Select>
-
นี่คือตัวอย่างที่สมบูรณ์:
เอาต์พุตสคริปต์:
711855 วันพุธที่ 23/3/2548 1:33:37 น.
711856 วันพุธที่ 23/23/2548 1:23:00 น.
711857 วันพุธที่ 23 3/23/2548 1:26:34 น.
711858 วันพุธที่ 23/3/2548 1:33:53 น.
711859 วันพุธที่ 23/23/2548 1:30:36 น.
รหัส ASP ที่สมบูรณ์มีดังนี้:
คัดลอกรหัสรหัสดังต่อไปนี้:
-
' ค่าคงที่ที่เลือกจาก adovbs.inc:
ค่าคงที่ adClipString = 2
' ประกาศตัวแปรของเรา... ฝึกฝนให้ดีเสมอ!
Dim cnnGetString ' การเชื่อมต่อ ADO
Dim rstGetString ' ชุดระเบียน ADO
Dim strDBPath ' พาธไปยังไฟล์ Access DB (*.mdb) ของเรา
Dim strDBData ' สตริงที่เราดัมพ์ข้อมูลทั้งหมดลงไป
Dim strDBDataTable ' สตริงที่เราดัมพ์ข้อมูลทั้งหมดลงไป
' เฉพาะครั้งนี้เราสร้างตาราง
' MapPath ไปยังเส้นทางฟิสิคัลของไฟล์ mdb ของเรา
strDBPath = Server.MapPath(db_scratch.mdb)
'สร้างการเชื่อมต่อโดยใช้ OLE DB
ตั้งค่า cnnGetString = Server.CreateObject(ADODB.Connection)
' บรรทัดนี้ใช้สำหรับฐานข้อมูลตัวอย่าง Access:
'ผู้ให้บริการ cnnGetString.Open=Microsoft.Jet.OLEDB.4.0;แหล่งข้อมูล= & strDBPath & ;
' จริงๆ แล้วเราใช้ SQL Server ดังนั้นเราจึงใช้บรรทัดนี้แทน
' แสดงความคิดเห็นในบรรทัดนี้และยกเลิกการใส่ข้อคิดเห็นการเข้าถึงที่อยู่ด้านบน
' เล่นกับสคริปต์บนเซิร์ฟเวอร์ของคุณเอง
ผู้ให้บริการ cnnGetString.Open=SQLOLEDB;แหล่งข้อมูล=10.2.1.214;
& แค็ตตาล็อกเริ่มต้น=ตัวอย่าง;รหัสผู้ใช้=ตัวอย่าง;รหัสผ่าน=รหัสผ่าน;
& หมดเวลาการเชื่อมต่อ = 15; ไลบรารีเครือข่าย = dbmssocn;
' ดำเนินการค้นหาอย่างง่ายโดยใช้วัตถุการเชื่อมต่อ
' เก็บชุดระเบียนผลลัพธ์ไว้ในตัวแปรของเรา
ตั้งค่า rstGetString = cnnGetString.Execute (เลือก * จากเริ่มต้น)
' นี่คือจุดที่น่าสนใจ... ปกติแล้วเราจะทำ
' วนซ้ำจนกระทั่งเราวิ่งเข้าไปในบันทึกสุดท้าย
' ในชุดระเบียน คราวนี้เราจะได้ข้อมูลทั้งหมด
' ล้มลงแล้วทิ้งมันลงในเชือกเพื่อให้เราทำได้
' ตัดการเชื่อมต่อจากฐานข้อมูลโดยเร็วที่สุด
strDBData = rstGetString.GetString()
' เนื่องจากฉันทำสิ่งนี้สองครั้งเพื่อเป็นตัวอย่าง... ฉันจึงเปลี่ยนตำแหน่ง
' ที่จุดเริ่มต้นของ RS ก่อนการโทรครั้งที่สอง
rstGetString.MoveFirst
' คราวนี้ฉันขอทุกอย่างกลับมาในรูปแบบตาราง HTML:
strDBDataTable = rstGetString.GetString(adClipString, -1, _
&</td><td>, </td></tr> & vbCrLf & <tr><td>, )
' เนื่องจากความปรารถนาที่ไม่รู้จักพอของฉันสำหรับ HTML ที่เรียบร้อย ฉันจึงเป็นเช่นนั้น
' ตัดทอนสตริงถัดไป คุณจะเห็นว่า GetString มีเท่านั้น
' พารามิเตอร์สำหรับสิ่งที่อยู่ระหว่างแถวและไม่แยก
' หนึ่งสำหรับสิ่งที่จะวางหลังแถวสุดท้ายเพราะว่า
' วิธีสร้างตาราง HTML ทำให้เรามีสิ่งพิเศษเพิ่มเติม
' <tr><td> หลังจากบันทึกล่าสุด GetString จะวาง
' ตัวคั่นทั้งหมดต่อท้ายเนื่องจากไม่มีอะไรเลย
' อย่างอื่นที่จะวางไว้ตรงนั้นและในหลาย ๆ สถานการณ์มันก็ใช้ได้ดี
' ด้วย HTML มันค่อนข้างแปลกนิดหน่อยสำหรับนักพัฒนาส่วนใหญ่
'ปิดแถวแล้วไปต่อแต่ก็พาตัวเองไปไม่ได้'
ออกจากแถวพิเศษ... โดยเฉพาะอย่างยิ่งเนื่องจากมันจะมี
' จำนวนเซลล์ที่แตกต่างกันจากเซลล์อื่นๆ ทั้งหมด
' ฉันจะว่าอย่างไรได้... สิ่งเหล่านี้ทำให้ฉันรำคาญ ;)
strDBDataTable = ซ้าย(strDBDataTable, Len(strDBDataTable) - Len(<tr><td>))
' หมายเหตุบางประการเกี่ยวกับ .GetString:
' วิธีการนี้ใช้อาร์กิวเมนต์ทางเลือกมากถึง 5 อาร์กิวเมนต์:
' 1. StringFormat - รูปแบบที่จะส่งคืนไฟล์
' ข้อความชุดระเบียนเท่านั้น
' ค่าที่ถูกต้อง
' 2. NumRows - จำนวนแถวที่จะส่งคืน
' ถึง -1 ระบุทุกแถว
' 3. ColumnDelimiter - ข้อความที่จะวางระหว่างคอลัมน์
'ค่าเริ่มต้นเป็นอักขระแท็บ
' 4. RowDelimiter - ข้อความที่จะวางระหว่างแถว
'ค่าเริ่มต้นคือการส่งคืนรถ
' 5. NullExpr - นิพจน์ที่จะใช้หากค่า NULL เป็น
' ส่งคืนค่าเริ่มต้นเป็นสตริงว่าง
' ปิดชุดบันทึกและการเชื่อมต่อของเราแล้วกำจัดวัตถุ
' สังเกตว่าฉันสามารถทำเช่นนี้ก่อนที่เราจะกังวลด้วยซ้ำ
' กำลังแสดงข้อมูลใด ๆ !
rstGetString.ปิด
ตั้งค่า rstGetString = ไม่มีเลย
cnnGetString.ปิด
ตั้งค่า cnnGetString = ไม่มีเลย
' แสดงตารางข้อมูลที่ฉันไม่จำเป็นต้องทำ
' การจัดรูปแบบใด ๆ นับตั้งแต่การโทร GetString ทำทุกอย่างเกือบทุกอย่าง
' สำหรับเราในแง่ของการสร้างข้อความตาราง
Response.Write <เส้นขอบตาราง=1> & vbCrLf
การตอบสนองเขียน <tr><td>
การตอบสนองเขียน strDBDataTable
การตอบกลับเขียน </table> & vbCrLf
' โปรดทราบ: นี่คือรูปแบบเอาต์พุตที่คุณได้รับหากคุณสามารถ GetString ได้
' โดยไม่มีพารามิเตอร์ใดๆ:
Response.Write vbCrLf & <p>นี่คือเวอร์ชันที่ไม่ได้ฟอร์แมต:</p> & vbCrLf
การตอบสนองเขียน <pre> & vbCrLf
Response.Write strDBDataResponse.Write </pre> & vbCrLf
'นั่นสินะทุกคน!
-