If Me.Bookmark = RS.Bookmark Then เกิด Type Mismat
กระทู้เก่าบอร์ด อ.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 อยู่ครับ

2 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R05473
ผมก็ error ครับ
สงสัยมันไม่ได้มีไว้ให้เปรียบเทียบกันมั้งครับ
ผมก็ไม่ค่อยรู้จักมันดีนักสำหรับ 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
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 มาเมื่อบ่ายนี้แหล่ะครับ

ยังไงก็ขอบคุณมากครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.4267s