Sub Form
กระทู้เก่าบอร์ด อ.Yeadram

 2,277   3
URL.หัวข้อ / URL
Sub Form

ผมใช้ Shaped Recordset (ADO) แสดงผลใน Main or Sub Form แต่เกิดปัญหาตรง Sub Formที่แสดงต่าออกมาเพียง Record เดียว ความเป็นจริงมีค่ามากกว่า ดูได้จาก RecordCount งงมากเลย
Private Sub Form_Load()
strConn = "Data Provider=Microsoft.Jet.OLEDB.4.0;"
strConn = strConn & "Data Source = " & _
               "C:\PrisonDB_New.mdb"

Set Connc = New ADODB.Connection
With Connc
        .ConnectionString = strConn
        .Provider = "MSDataShape"
        .Open
End With

shpCmd = "SHAPE {SELECT* from tblConvict} " & _
               "APPEND ({SELECT ConId, Index, LawId from tblAccuse} " & _
               "RELATE ConId TO ConId) AS chapConAcc "
   Set rsC = New ADODB.Recordset
    rsC.Open shpCmd, Connc, adOpenKeyset, adLockPessimistic

ShowData
    
End Sub


Private Sub ShowData()
'   ---------- Main Form Convict Data -------------
    On Error Resume Next
    txtConId = Trim(rsC!ConId)
    txtCId.Value = Trim(rsC!CId)
    gstrCId = rsC!ConId
    txtgstrCid.Value = gstrCId
    cbPrefix.Value = Trim(rsC!PrefixId)
    txtFName.Value = Trim(rsC!FName)
    txtLName.Value = Trim(rsC!LName)
    txtBDate.Value = Format(Trim(rsC!BDate), "Long Date")
    txtOld.Value = "ÍÒÂØ   " & ((Year(Now()) + 543) - (Year([txtBDate]) + 543)) & "   " & "»Õ"
    
    PicPath.Value = rsC!PicPath
        If PicPath.Value = "" Or IsNull(PicPath.Value) Then
            Pict.Picture = ""
        Else
            Pict.Picture = PicPath.Value
        End If
    txtFName.SetFocus
    lblPosition.Caption = "àäÍÃì´ : " & rsC.AbsolutePosition & " / " & rsC.RecordCount
   
'   -------- SubForm --------------------
rsCA = rsC("chapConAcc")
CountAcc = rsCA.RecordCount
'rrstClone = rsCA.Bookmark
rsCA.MoveLast
Forms!frmConvict!frm_sAccuseUnbound.Form.Text74 = CountAcc
Do Until rsCA.EOF
        Forms!frmConvict!frm_sAccuseUnbound.Form.txtIndex = rsCA!Index
        Forms!frmConvict!frm_sAccuseUnbound.Form.txtConId = rsCA!ConId
        Forms!frmConvict!frm_sAccuseUnbound.Form.cbLaw = rsCA!LawId
        Forms!frmConvict!frm_sAccuseUnbound.Form.cbInstance = rsCA!InstanceId
rsCA.MoveNext
a = a + 1
Loop

End Sub

ช่วยผมหน่อยครับติดปัญหาตรง Sub Form มานานแล้ว จริง ๆ แล้วมีถึง 3 Sub Form แสดงใน Main BD นี้ผมจะนำไปใช้ที่ทำงาน เรือนจำ น่ะครับ พอดีจะพัฒนาใหม่ ศึกษา Code ตัวเก่าจะเป็นลักษณะ Bound Form มี Code นิดหน่อย

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

1 @R04722
ฟอร์มใน Access ไม่ว่าจะเป็น Main Form หรือ Sub Form ก็ตาม ถ้าไม่ได้เป็น Bound Form (ฟอร์มที่ผูกเข้ากับ recordset โดยตรง) ก็จะไม่สามารถแสดงแบบหลายๆบรรทัดได้ครับ ดังนั้นไม่ว่าจะ .MoveNext ไปกี่หน มันก็แสดงลง txtIndex, txtConId, cbLaw และ cbInstance ที่เดิมครับ

วิธีแก้ก็ต้องทำกลับให้เป็น Bound Form เหมือนเดิมอยู่ดีแหล่ะครับ
2 @R04727
อย่างงั้นหรือครับ หลงผิดอยู่ตั้งนาน เสียเวลามาเลย ขอบคุณมากน่ะครับ แล้วถ้าแสดงค่าใน Control ต่าง ๆ เช่น พวก ListBox สามารถทำได้ใช่ไหมครับ ช่วยชี้ช่องทางสว่าง ขอCode เป็นแนวทางหน่อยครับ
3 @R04728
ถ้าให้ง่าย ก็เขียน SQL SELECT statement ลงใน RowSource property ของลิสท์บ็อกซ์ จะกำหนดตอนฟอร์มอยู่ในโหมด Design View ก็ได้ หรือจะกำหนดในช่วง runtime ด้วยคำสั่ง Me.ชื่อลิสท์บ็อกซ์.RowSource = "SELECT ... FROM ... WHERE ... " ก็ได้

หรือทำให้ยาก ก็วนลูปแล้วยัดค่าลงในแต่ละบรรทัดของลิสท์บ็อกซ์เอาเอง ตย. เช่น

With rsCA
Do Until .EOF
   Me.ชื่อลิสท์บ็อกซ์.AddItem !Index & ";" & !ConId & ";" & !LawId & ";" & !InstanceId
   .MoveNext
Loop
End With

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