แสดงกระทู้

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Niky@cm5

หน้า: [1]
1
ไม่ได้ช่วยอะไรครับ ใช้คำค้น combobox report ในช่องค้นหานี้พอได้แนวไหมครับ
--ผมก็เขียนโค้ดไม่เป็นใช้วิธีแบบบ้านๆสำหรับผมก็ เพิ่มฟิลด์คำไปในตารงว่าติกเป็นแบบ y/n ถ้าโดนเลือกช่วยเอาไปออกคิวรี่ ทำปุ่มดูรายงานทั้งสองแบบ แบบ 1 คือครบทุกรายการ แบบที่สองก็เอาที่ทำเครื่องหมายไปออกรายงาน--
โพสต์นี้ได้รับคำขอบคุณจาก: Niky@cm5

2
เราอ้างถึงฐานข้อมูลตัวปัจจุบันที่โค้ดกำลังทำงานด้วย DBEngine.Workspaces(0).Databases(0) (ปัจจุบันอ้างด้วย CurrentDB แทน) ซึ่งเทเบิลที่อยู่ในนี้เป็น Linked Table ดังนั้นเมื่อสั่งเปิดด้วย OpenRecordset ระบบจะเปิดเป็น dbOpenDynaset   จะไม่สามารถเปิดเป็นเทเบิลโดยตรงแม้จะบังคับด้วยค่าคงที่ DB_OPEN_TABLE ก็ตาม (เป็นค่าคงที่รุ่นเก่าแล้ว ปัจจุบันเปลี่ยนไปใช้ dbOpenTable แทน) แต่เมื่อเอาโค้ดไปทำงานใน Back-End Database ซึ่งเทเบิลเป็นเทเบิลจริง ไม่ใช่ Linked Table โค้ดจึงทำงานได้  และเพราะ .Seek method ใช้ไม่ได้กับ Dynaset Recordset  คิดว่านี่คือจุดที่ทำให้เกิด error นี้  ต้องใช้ .FindFirst method แทน

ยังไงก็ตามเนื่องจาก Recordset ก็เปิดมาเพื่ออัพเดตเท่านั้น เราสามารถสั่งอัพเดตแล้วเช็คจำนวนเรคอร์ดที่อัพเดตได้ ถ้าเป็นศูนย์ก็แปลว่ารหัสตำแหน่งนั้นไม่มี  ไม่ต้องทำ .Seek หรือ .FindFirst ก่อน  โค้ดก็จะเป็น

Private Sub cmdsave_Click()
On Error GoTo Err_Command139_Click
If IsNull(Me!POSIT_DT) Then
   MsgBox "**** กรุณาบันทึกข้อมูลวันที่ ****"
   Exit Sub
End If
DoCmd.SetWarnings False

Dim db As DAO.Database
Dim ttran As DAO.Recordset

Set db = CurrentDB
Set ttran = db.OpenRecordset("tranpolice")

db.execute "update person set id_posit = NULL where ชื่อฟิลด์primarykey = " & cstr(mid)
' แต่ถ้าฟิลด์primarykeyมี data type เป็น text ก็ต้องเปลี่ยนเป็น
' db.execute "update person set id_posit = NULL where ชื่อฟิลด์primarykey = '" & mid & "' "
if db.RecordsAffected = 0 then
   MsgBox "ไม่มีข้อมูลรหัสตำแหน่ง " & mid_posit & " ในตาราง Person"
   Exit Sub
End If
' หมายเหตุ  โค้ดข้างบนนี่ถูกหรือเปล่า เพราะค้นหา primarykey ด้วยตัวแปร mid แต่ถ้าไม่เจอกลับแจ้งข้อความด้วยตัวแปร mid_posit ?

db.execute "update postid set id = 0 where ชื่อฟิลด์primarykey = " & cstr(mid_posit)
' หรือถ้าเหมือนกรณีอธิบายข้างบน ก็ต้องเปลี่ยนเป็น
' db.execute "update postid set id = 0 where ชื่อฟิลด์primarykey = '" & mid_posit & "' "
if db.RecordsAffected = 0 then
   MsgBox "ไม่มีข้อมูลรหัสตำแหน่ง " & mid_posit & " ในตารางเลขตำแหน่ง"
   Exit Sub
End If


' ข้างล่างนี้จนจบ โค้ดไม่ต้องมีเปลี่ยนอะไรครับ
ttran.AddNew
ttran("id") = mid
ttran("id_posit") = mid_posit
...
...
...
โพสต์นี้ได้รับคำขอบคุณจาก: Niky@cm5

3
เขาปิดตรง อนุญาตให้เพิ่ม  = ไม่ใช่ครับ
พอ combobox ว่างก็จะไม่แสดง ข้อมูล
ลองเช็คการตั้งค่าของ Subform แบบในรูปดูนะครับ



และดูตรงการตั้งค่าการเชื่อมโยงข้อมูล เขาใช้การเชื่อม รหัสประจำตัวประชาชน จาก textbox ชื่อ search_text ซึ่งเขาได้ซ่อนเอาไว้ในฟอร์ม
โดยเขาได้กำหนดให้ Event ของคอมโบบ๊อกที่ชื่อ by_oname เป็น  Me![search_text] = Me![by_oname].Column(1)
ทำให้ textbox search_text จะได้เลขรหัสบัตรประจำตัวประชาชน แล้วนำมาเชื่อมกับ Field ID_POSIT เพื่อให้ข้อมูล subform แสดงเนื้อหาตาม combobox ที่เราใช้

โพสต์นี้ได้รับคำขอบคุณจาก: Niky@cm5

4
น่าจะเป็นการสร้างกรอบ สีเทาไว้พื้นหลังเฉยๆ ครับ แล้วซ่อน subform ไว้ จะให้แสดงเมื่อคอมโบบ๊อก อัพเดท


ไม่แน่ใจแบบนี้ไหมนะครับ
จากตัวอย่างถ้า combobox ว่างจะแสดงเป็นสีเทา

โพสต์นี้ได้รับคำขอบคุณจาก: Niky@cm5

5
event on main form open
 set subform visible false
event on combox after update
 set subform visible true

โพสต์นี้ได้รับคำขอบคุณจาก: Niky@cm5

หน้า: [1]