กระทู้เก่าบอร์ด อ.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 นิดหน่อย
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
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 มันเหมาะแก่การเลือกแสดงข้อมูลแบบธรรมดาๆเท่านั้น
หรือทำให้ยาก ก็วนลูปแล้วยัดค่าลงในแต่ละบรรทัดของลิสท์บ็อกซ์เอาเอง ตย. เช่น
With rsCA
Do Until .EOF
Me.ชื่อลิสท์บ็อกซ์.AddItem !Index & ";" & !ConId & ";" & !LawId & ";" & !InstanceId
.MoveNext
Loop
End With
หมายเหตุ ลิสบ็อกซ์ทำเรื่องการ Format รูปแบบและตัวอักษรในลิสท์ไม่ได้นะครับ อย่าหวังว่ามันจะทำอะไรได้มากเท่ากับ Sub Form มันเหมาะแก่การเลือกแสดงข้อมูลแบบธรรมดาๆเท่านั้น
Time: 0.5387s
วิธีแก้ก็ต้องทำกลับให้เป็น Bound Form เหมือนเดิมอยู่ดีแหล่ะครับ