กระทู้เก่าบอร์ด อ.Yeadram
1,642 2
URL.หัวข้อ /
URL
If Me.Bookmark = RS.Bookmark Then เกิด Type Mismat
คือผมเจอโค้ดที่เกิด compile error บอกว่า Type Mismatch ที่ ตำแหน่งของเครื่องหมาย "เท่ากับ" ที่บรรทัดที่ 3 ใน ตย. ข้างล่างนี้ ผมเลยอยากขอให้ช่วยทดสอบให้ผมด้วยว่าถ้านำโค้ดนี้ไปใส่ลงในฟอร์ม ที่ event ไหนก็ได้ มันจะเกิด error เหมือนของผมหรือไม่
Dim RS As DAO.Recordset
Set RS = Me.RecordsetClone
If Me.Bookmark = RS.Bookmark Then
End If
โค้ดนี้ไม่ใช่โค้ดที่สมบูรณ์แต่ตัดมาให้เหลือน้อยที่สุดที่ยังทำให้เกิด error อยู่ครับ
Dim RS As DAO.Recordset
Set RS = Me.RecordsetClone
If Me.Bookmark = RS.Bookmark Then
End If
โค้ดนี้ไม่ใช่โค้ดที่สมบูรณ์แต่ตัดมาให้เหลือน้อยที่สุดที่ยังทำให้เกิด error อยู่ครับ
2 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R05474
ใช่แล้วครับ ต้องใช้ StrComp( ) เพื่อเปรียบเทียบ ใช้งานมาตั้งนาน ก็เพิ่งทราบเหมือนกัน คือเคยแต่กำหนดให้ค่านึงเท่ากับอีกค่านึง มันก็กำหนดได้ ไหงพอเอามาเปรียบเทียบ กลับทำไม่ได้ ก็ลองเข้าไปที่ Object Browser ใน VB Editor นั่นแหล่ะครับ ลองดูว่าประเภทข้อมูลที่มันคืนมาจาก Bookmark property เป็นอะไร ผลคือ
1) DAO.Recordset.Bookmark คืนเป็น Byte( ) --- Array ของ Byte
2) ADODB.Recordset.Bookmark คืนเป็น Variant( )
3) Access.Form.Bookmark คืนเป็น Variant( )
มันเลยกลายเป็นว่า ถ้าทำการเปรียบเทียบระหว่าง 2) กับ 3) จะสามารถทำได้ แต่ถ้า 1) กับ 3) จะทำไม่ได้ครับ
ปล. อันที่ลิงค์มาก็คืออันที่ผมไปถามที่ UtterAccess มาเมื่อบ่ายนี้แหล่ะครับ
ยังไงก็ขอบคุณมากครับ
1) DAO.Recordset.Bookmark คืนเป็น Byte( ) --- Array ของ Byte
2) ADODB.Recordset.Bookmark คืนเป็น Variant( )
3) Access.Form.Bookmark คืนเป็น Variant( )
มันเลยกลายเป็นว่า ถ้าทำการเปรียบเทียบระหว่าง 2) กับ 3) จะสามารถทำได้ แต่ถ้า 1) กับ 3) จะทำไม่ได้ครับ
ปล. อันที่ลิงค์มาก็คืออันที่ผมไปถามที่ UtterAccess มาเมื่อบ่ายนี้แหล่ะครับ
ยังไงก็ขอบคุณมากครับ
Time: 0.4267s
สงสัยมันไม่ได้มีไว้ให้เปรียบเทียบกันมั้งครับ
ผมก็ไม่ค่อยรู้จักมันดีนักสำหรับ property ตัวนี้
กับ method findfirst ยิ่งงง
วันนี้เห็นคำถามก็สนใจอย่างยิ่งครับ เลยลองตั้งหน้าตั้งตาค้นดู พอจะอนุมาน (โดยไม่มีข้อมูลใดๆ ยืนยัน) ได้ว่า
me.bookmark =
13 อักขระนี้ คือ "คำสั่งให้กระทำ" มันไม่สามารถไปอยู่หน้า then ได้ มันทำได้แค่อยู่หลัง then
แต่ดูจากลักษณะโค้ดของ อาจารย์แล้ว คิดว่า อาจารย์ ต้องการใช้มันในลักษณะ "เพื่อเปรียบเทียบ" ไม่ได้ใช้ในลักษณะ "ให้กระทำ"
ผมจึงลองค้นๆ ต่อไปว่า จะมีวิธีใด เปรียบเทียบค่า bookmark ได้บ้าง ก็ไปเจอจากตรงนี้มาครับ
http://www.utteraccess.com/forum/compare-MeBookmark-RSB-t1942480.html
ได้ความสั้นๆ ว่า ถ้าต้องการเปรียบเทียบ ต้องใช้ฟังก์ชั่น strComp เข้ามาช่วยครับ
ผมทดสอบแล้ว หาย error แล้วครับ
ไม่รู้ตรงตามความต้องการหรือเปล่านะครับ
โค้ดที่ใช้ทดสอบครับ
Private Sub Form_Open(Cancel As Integer)
Dim RS As DAO.Recordset
Set RS = Me.RecordsetClone
Dim RsS As DAO.Recordset
Set RsS = Me.RecordsetClone
RS.FindFirst "SumDay = 2"
RsS.FindFirst "SumDay = 3"
Me.Bookmark = RsS.Bookmark
If StrComp(Me.Bookmark, RS.Bookmark, 0) = 0 Then
MsgBox "ไม่เท่ากัน"
Else
MsgBox "เท่ากัน"
End If
End Sub