แสดงกระทู้

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 - pizza_p

หน้า: 1 ... 4 5 6 [7] 8
109
Private Sub login_Click()
Dim fpass As String
Dim flevel As String

fpass = DlookUp("[Password]","UserLogin","[UserName]='" & Me.UserBox & "'")

   If fpass = Me.PassBox Then
      flevel = DlookUp("[Level]","UserLogin","[UserName]='" & Me.UserBox & "'")
      SetUserLevel flevel
      DoCmd.OpenForm "Main Form", acNormal
   Else
      MsgBox "ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง", vbCritical, "พบข้อผิดพลาด"
      Me.Undo
      Me.UserBox.SetFocus

   End If

End Sub

110
โทษทีไม่ได้ทดสอบ
Static UserLevel as String ให้เปลียนเป็น Dim UserLevel as String

111
สร้าง Module ขึ้นมา ตั้งชืออะไรก็ได้แล้วแต่ชอบ ใส่ code ประมาณนี้ลงไป เพื่อเก็บค่า Level ไว้ใช้ในภายหลัง

Static UserLevel As String

Public Sub SetUserLevel(Level As String)
    UserLevel = Level
End Sub

Public Function GetUserLevel() As String
    GetUserLevel = UserLevel
End Function
--------------------------------------
ที่ปุ่ม login บนฟอร์ม FormLogin ให้เพิ่มคำสั่งลงไป
Private Sub login_Click()
Dim fpass As String
Dim flevel As String

fpass = DlookUp("[Password]","UserLogin","[UserName]='" & Me.UserBox & "'")

   If fpass = Me.PassBox Then
      flevel = DlookUp("[Level]","UserLogin","[UserName]='" & Me.UserBox & "'")
      SetUserLevel flevel
      DoCmd.OpenForm "Main Form", acNormal
   End If
End Sub
--------------------------------------
ใน Main Form ถ้าจะให้แสดงปุ่มใด ไม่แสดงปุ่มใด ให้ไปใส่คำสั่งไว้ที่ Open event เช่น
Private Sub Form_Open(Cancel As Integer)
Dim flevel as String

flevel = GetUserLevel()

   Select Case flevel
   Case "2"
      Me.การตลาด.Enabled = False
   Case "4"
      Me.Manager.Enabled = False
   End Select

End Sub

ฟอร์มอื่นๆ ก็เช่นกัน ก่อนเปิดฟอร์มก็ให้เช็คค่า User level จากฟังก์ชั่น GetUserLevel() ได้เลย แล้วจะเปิดปิดปุ่มหรือคอนโทรลใดๆก็ได้ตามชอบ

112
แก้จาก DoCmd.Requery เป็น Me.POVender.Requery แต่จริงๆ ไม่ค่อยแนะนำแบบนี้ใน click event เพราะมันจะทำการ Requery ทุกครั้งที่คลิกที่ combobox ซึ่งการ Requery มันใช้เวลาและทรัพยากรยิ่งถ้าข้อมูลมันเยอะมันจะมีอาการหน่วงให้เห็น

ผมแนะนำให้ทำที่ปุ่ม OpenForm ที่เปิดฟอร์มการเพิ่ม supplier เช่น

Private Sub OpenFormSupplier_Click()

DoCmd.OpenForm "SupplierForm", acNormal, , , , acDialog
Me.POVender.Requery

End Sub

การ OpenForm แบบ acDialog โปรแกรม Access จะรอจนกว่าเราทำงานเกี่ยวกับฟอร์มนั้นจนเสร็จสิ้นก่อน แล้วถึงจะรันคำสั่งบรรทัดถัดไปครับ ทำให้เวลาเราใส่ข้อมูลเสร็จปิดฟอร์ม Supplier แล้ว มันก็จะทำคำสั่งถัดไปคือ Me.POVender.Requery

113
ปุ่มคำสั่งมันอยู่บนฟอร์ม คำสั่งที่ใช้พิมพ์คงเป็นการสั่งพิมพ์ปกติบนฟอร์ม ถ้าจะพิมพ์ report โดยปุ่มอยู่บนฟอร์มให้ใช้

DoCmd.OpenReport "ชื่อ Report", acViewNormal

114
ห้อง MS Access / > แทรกแบบฟอร์ม PDF ใน Report
« เมื่อ: 23 ม.ค. 61 , 20:07:05 »
Report properties มันจะมี Picture Property อยู่ไว้จัดการพวกภาพพื้นหลังได้ครับ แต่รองรับรูปภาพนะครับ ไม่ได้รองรับ pdf


115
ใส่ WHERE Condition ลงในคำสั่งพิมพ์รายงาน เพื่อกำหนดเงื่อนไขในการกรองข้อมูลของรายงานที่จะพิมพ์

DoCmd.OpenReport stDocName, acNormal, , "[PO Number] = '" & Me.[PO Number] & "'"

116
ห้อง MS Access / > คำสั่ง Update ทำงานช้า
« เมื่อ: 20 ม.ค. 61 , 23:19:45 »
มันไม่เกี่ยวว่า Query สร้างจาก design หรือจาก code builder ครับ เพราะมันรันแบบ SQL เหมือนกัน ลองแก้ error จากการใช้ Refresh ให้ได้ก่อนครับว่าเขียนผิดถูกอย่างไร

ปล.บางทีการออกแบบตาราง ฟอร์ม หรือ subform ไม่ถูกต้องก็อาจจะเป็นปัญหาได้ครับ

117
ห้อง MS Access / > คำสั่ง Update ทำงานช้า
« เมื่อ: 20 ม.ค. 61 , 16:51:55 »
ปกติเวลาจะบังคับให้ form แสดงค่าปัจจุบันจากในตารางให้ใช้ method Refresh ครับ เช่น Me.Refresh หรือ Me.ชื่อsubform.Form.Refresh ครับ ให้เอาไปใส่หลังจากคำสั่ง Update ดูครับ

118
ให้ตรวจสอบดังนี้
1. ตาราง PODescription มีฟิลด์ชื่อ Discount% หรือไม่ เป็นฟิดล์ชนิดใด (Text, Number) กรณีที่มีสัญลักษณ์ประหลาดในชื่อฟิลด์แนะนำให้ใส่วงเล็บใหญ่คร่อมไว้ เช่น PODescription.[Discount%]
2. ลำดับการใช้เครื่องหมายคำพูด  '  และ  "  ให้สังเกตุลำดับการใช้ดีๆนะครับอาจจะมีการใส่สลับกันได้ หรือกรณีที่ Discount% เป็นฟิลด์แบบ Text จะต้องใช้ PODescription.[Discount%] = '" & Me.discount & "' WHERE ...

119
ห้อง MS Access / > คำสั่ง Update ทำงานช้า
« เมื่อ: 20 ม.ค. 61 , 14:58:57 »
ต้องดูว่า query ด้วยคำสั่งอะไร จำนวนข้อมูลที่ query มากแค่ไหน และการแสดงค่าที่ update ใน textbox ใช้วิธีไหน

120
ต้องเป็นชื่อของ subform control นะครับ ไม่ใช่ชื่อของตาราง

แต่ถ้าเป็นชื่อของ subform control แล้ว ลองเปลี่ยนเป็นแบบนี้ครับ

Me.ชื่อsubform.Form.Refresh

121
ก็แก้เป็นแบบนี้แทนครับ

DoCmd.RunSQL "UPDATE PODetails SET PODetails.Discount = " & Me.Discount & " WHERE PODetails.[PO Number] = '" & Me.[PO Number] & "';"

122
ที่ช่อง Discount ของ Main Form กำหนด AfterUpdate event ประมาณนี้

Private Sub Discount_AfterUpdate()

DoCmd.SetWarnings False
DoCmd.RunSQL "UPDATE PODetails SET PODetails.Discount = [Quantity] * [Unit Price] * " & Me.Discount / 100 & " WHERE PODetails.[PO Number] = '" & Me.[PO Number] & "';"
DoCmd.SetWarnings True

Me.ชื่อSubForm.Refresh

End Sub

123
เนื่องจาก Query QR_Reprint มีการกำหนด criteria ที่อิงกับค่าบนฟอร์ม 3 ตัว CB1, Tx1 และ Tx2 แล้วตอนเราเรียกใช้คำสั่ง CurrentDb.Execute เพื่อให้รัน Query มันจะไม่แทนค่าของ CB1, Tx1 และ Tx2 ที่ได้จากฟอรฺ์มครับ มันจะรันไปทื่อๆตรงๆตาม SQL เลย ทำให้มันแจ้ง error ว่า expect 3 parameter ครับ

ให้เปลี่ยนการจากใช้ CurrentDb.Execute เป็น DoCmd.RunSQL แทนครับ

124
รบกวนนิดครับ พอดีเครื่องที่ใช้งานมีแต่ Access 2003 ให้ save file เป็น mdb แล้วส่งมาอีกทีครับ

125
Me.Tx5 เป็น Textbox ที่ตั้ง format ไว้เป็น DateTime ด้วยใช่ไหมครับ ถ้าใช่ ลองแปลงเป็นตัวเลขแบบนี้ครับ (ผมไม่ค่อยชอบการใช้ + ใน Access เพราะผลลัพธ์ที่ได้ไม่แน่นอนถ้าเป็น text + number ผมแนะนำให้ใช้ & แทน + ครับ

CurrentDb.Execute "insert into TB_Reprint(ITEM_NUMBER, PART_NUMBER, BOX_NUM, Barcode, PART_NAME, DT, Remark) Select ITEM_NUMBER, PART_NUMBER, BOX_NUM, Barcode, PART_NAME, " & CDbl(Me.Tx5) & ", '" & CStr(Me.Tx6) & "' From QR_Reprint ", dbFailOnError

126
จริงๆ SQL ก็ได้มาจากช่องต่างๆในการสร้างแบบสอบถาม (Query) นั่นแหละครับ มันแปลงไปมาได้ การที่จะอธิบายการสร้างแบบสอบถามที่เป็นช่องๆมันต้องใช้รูปเยอะครับ คุณลอง copy SQL ไปใส่ในมุมมอง SQL ของการสร้างแบบสอบถามดูครับ แล้วเปลี่ยนเป็นมุมมอง Design ก็จะเห็นเป็นช่องข้อมูลต่างๆเองครับ แล้วลองไปประยุกต์ดูครับ

หน้า: 1 ... 4 5 6 [7] 8