กระทู้เก่าบอร์ด อ.Yeadram
68,146 91
URL.หัวข้อ /
URL
ถึงท่านอาจารย์ สันติสุข ค่ะ
คำถามต่อเนื่องนะคะอาจารย์ พอดีที่หนูหายไปหนูแอบไปรับปริญญามาค่ะ
ข้อที่ 1 เรื่องการค้นหาข้อมูลจากกล่องComboค่ะ
หนูได้นำCodeที่อาจารย์ให้ไปวางตามนี้ค่ะ
Option Compare Database
Option Explicit
Sub SetDefaultShippingAddress()
If IsNull(Me![Customer ID]) Then
ClearShippingAddress
Else
Dim rsw As New RecordsetWrapper
If rsw.OpenRecordset("Customers Extended", "[ID] = " & Me.Customer_ID) Then
Me.[InvoiceNO] = DMax("[InvoiceNumber]", "[Orders]") + 1
With rsw.Recordset
Me![Ship Name] = ![Contact Name]
Me![Ship Address] = ![Address]
End With
End If
End If
End Sub
Private Sub cmdDeleteOrder_Click()
If IsNull(Me![Order ID]) Then
Beep
ElseIf Me![Status ID] = Shipped_CustomerOrder Or Me![Status ID] = Closed_CustomerOrder Then
MsgBoxOKOnly CannotCancelShippedOrder
ElseIf MsgBoxYesNo(CancelOrderConfirmPrompt) Then
If CustomerOrders.Delete(Me![Order ID]) Then
MsgBoxOKOnly CancelOrderSuccess
eh.TryToCloseObject
Else
MsgBoxOKOnly CancelOrderFailure
End If
End If
End Sub
Private Sub cmdClearAddress_Click()
ClearShippingAddress
End Sub
Private Sub ClearShippingAddress()
Me![Ship Name] = Null
Me![Ship Address] = Null
Me![Ship City] = Null
Me![Ship State/Province] = Null
Me![Ship ZIP/Postal Code] = Null
Me![Ship Country/Region] = Null
End Sub
Private Sub cmdCompleteOrder_Click()
If Me![Status ID] <> Shipped_CustomerOrder Then
MsgBoxOKOnly OrderMustBeShippedToClose
ElseIf ValidateOrder(Closed_CustomerOrder) Then
Me![Status ID] = Closed_CustomerOrder
eh.TryToSaveRecord
MsgBoxOKOnly OrderMarkedClosed
SetFormState
End If
End Sub
Private Sub cmdCreateInvoice_Click()
Dim OrderID As Long
Dim InvoiceID As Long
OrderID = Nz(Me![Order ID], 0)
' Gracefully exit if invoice already created
If CustomerOrders.IsInvoiced(OrderID) Then
If MsgBoxYesNo(OrderAlreadyInvoiced) Then
CustomerOrders.PrintInvoice Me.Customer_ID, OrderID
End If
ElseIf ValidateOrder(Invoiced_CustomerOrder) Then
' Create Invoice Record
If CustomerOrders.CreateInvoice(OrderID, 0, InvoiceID) Then
' Mark all Order Items Invoiced
' Need to change Inventory Status to SOLD from HOLD
Dim rsw As New RecordsetWrapper
With rsw.GetRecordsetClone(Me.sbfOrderDetails.Form.Recordset)
While Not .EOF
If Not IsNull(![Inventory ID]) And ![Status ID] = OnHold_OrderItemStatus Then
rsw.Edit
![Status ID] = Invoiced_OrderItemStatus
rsw.Update
Inventory.HoldToSold ![Inventory ID]
End If
rsw.MoveNext
Wend
End With
' Print the Invoice
CustomerOrders.PrintInvoice Me.Customer_ID, OrderID
SetFormState
End If
End If
End Sub
Private Sub cmdShipOrder_Click()
If Not CustomerOrders.IsInvoiced(Nz(Me![Order ID], 0)) Then
MsgBoxOKOnly CannotShipNotInvoiced
ElseIf Not ValidateShipping() Then
MsgBoxOKOnly ShippingNotComplete
Else
Me![Status ID] = Shipped_CustomerOrder
If IsNull(Me![Shipped Date]) Then
Me![Shipped Date] = Date
End If
eh.TryToSaveRecord
SetFormState
End If
End Sub
Private Sub Customer_ID_AfterUpdate()
Me.sbfOrderDetails.Form.[Product ID].RowSource = "SELECT Inventory.[Product ID], Inventory.[Product Code], Inventory.[Qty Available] from Inventory where [Product Code] like '*" & Customer_ID & "*'"
SetFormState False
If Not IsNull(Me![Customer ID]) Then
SetDefaultShippingAddress
End If
End Sub
Private Sub Customer_ID_Current()
If Not Me.NewRecord Then
Me.sbfOrderDetails.Form.[Product ID].RowSource = "SELECT Inventory.[Product ID], Inventory.[Product Code], Inventory.[Qty Available] from Inventory where [Product Code] like '*" & Customer_ID & "*'"
End If
End Sub
Private Sub Customer_ID_KeyUp(KeyCode As Integer, Shift As Integer)
Me.Customer_ID.RowSource = "SELECT [ID], [Company], [Address For Ship], [ID] FROM [Customers Extended]where [Company], [Address For Ship], [ID] like '*" & Me.Customer_ID.Text & "*' order by [Company], [Address For Ship]"
Me.Customer_ID.Dropdown
End Sub
Private Sub Form_Current()
SetFormState
End Sub
Private Sub Form_Load()
SetFormState
End Sub
Function GetDefaultSalesPersonID() As Long
GetDefaultSalesPersonID = GetCurrentUserID()
End Function
Function ValidateShipping() As Boolean
If Nz(Me![Shipping Fee]) = "" Then Exit Function
ValidateShipping = True
End Function
Function ValidatePaymentInfo() As Boolean
If IsNull(Me![Payment Type]) Then Exit Function
If IsNull(Me![Paid Date]) Then Exit Function
ValidatePaymentInfo = True
End Function
Sub SetFormState(Optional fChangeFocus As Boolean = True)
If fChangeFocus Then Me.Customer_ID.SetFocus
Dim Status As CustomerOrderStatusEnum
Status = Nz(Me![Status ID], New_CustomerOrder)
TabCtlOrderData.Enabled = Not IsNull(Me![Customer ID])
Me.cmdCreateInvoice.Enabled = (Status = New_CustomerOrder)
Me.cmdShipOrder.Enabled = (Status = New_CustomerOrder) Or (Status = Invoiced_CustomerOrder)
Me.cmdDeleteOrder.Enabled = (Status = New_CustomerOrder) Or (Status = Invoiced_CustomerOrder)
Me.cmdCompleteOrder.Enabled = (Status <> Closed_CustomerOrder)
Me.[Order Details_Page].Enabled = (Status = New_CustomerOrder)
Me.[Shipping Information_Page].Enabled = (Status = New_CustomerOrder)
Me.[Payment Information_Page].Enabled = (Status <> Closed_CustomerOrder)
Me.Customer_ID.Locked = (Status <> New_CustomerOrder)
Me.Employee_ID.Locked = (Status <> New_CustomerOrder)
Me.sbfOrderDetails.Locked = (Status <> New_CustomerOrder)
End Sub
Function ValidateOrder(Validation_OrderStatus As CustomerOrderStatusEnum) As Boolean
If IsNull(Me![Customer ID]) Then
MsgBoxOKOnly MustSpecifyCustomer
ElseIf IsNull(Me![Employee ID]) Then
MsgBoxOKOnly MustSpecifySalesPerson
ElseIf Not ValidateShipping() Then
MsgBoxOKOnly ShippingNotComplete
Else
If Validation_OrderStatus = Closed_CustomerOrder Then
If Not ValidatePaymentInfo() Then
MsgBoxOKOnly PaymentInfoNotComplete
Exit Function
End If
End If
Dim rsw As New RecordsetWrapper
With rsw.GetRecordsetClone(Me.sbfOrderDetails.Form.Recordset)
' Check that we have at least one specified line items
If .RecordCount = 0 Then
MsgBoxOKOnly OrderDoesNotContainLineItems
Else
' Check all that all line items have allocated inventory
Dim LineItemCount As Integer
Dim Status As OrderItemStatusEnum
LineItemCount = 0
While Not .EOF
LineItemCount = LineItemCount + 1
Status = Nz(![Status ID], None_OrderItemStatus)
If Status <> OnHold_OrderItemStatus And Status <> Invoiced_OrderItemStatus Then
MsgBoxOKOnly MustBeAllocatedBeforeInvoicing
Exit Function
End If
rsw.MoveNext
Wend
ValidateOrder = True
End If
End With
End If
End Function
ผลที่ได้คือเวลาพิมหาแล้วขึ้นกล่องว่าเปล่าค่ะ
ข้อที่ 1 เรื่องการค้นหาข้อมูลจากกล่องComboค่ะ
หนูได้นำCodeที่อาจารย์ให้ไปวางตามนี้ค่ะ
Option Compare Database
Option Explicit
Sub SetDefaultShippingAddress()
If IsNull(Me![Customer ID]) Then
ClearShippingAddress
Else
Dim rsw As New RecordsetWrapper
If rsw.OpenRecordset("Customers Extended", "[ID] = " & Me.Customer_ID) Then
Me.[InvoiceNO] = DMax("[InvoiceNumber]", "[Orders]") + 1
With rsw.Recordset
Me![Ship Name] = ![Contact Name]
Me![Ship Address] = ![Address]
End With
End If
End If
End Sub
Private Sub cmdDeleteOrder_Click()
If IsNull(Me![Order ID]) Then
Beep
ElseIf Me![Status ID] = Shipped_CustomerOrder Or Me![Status ID] = Closed_CustomerOrder Then
MsgBoxOKOnly CannotCancelShippedOrder
ElseIf MsgBoxYesNo(CancelOrderConfirmPrompt) Then
If CustomerOrders.Delete(Me![Order ID]) Then
MsgBoxOKOnly CancelOrderSuccess
eh.TryToCloseObject
Else
MsgBoxOKOnly CancelOrderFailure
End If
End If
End Sub
Private Sub cmdClearAddress_Click()
ClearShippingAddress
End Sub
Private Sub ClearShippingAddress()
Me![Ship Name] = Null
Me![Ship Address] = Null
Me![Ship City] = Null
Me![Ship State/Province] = Null
Me![Ship ZIP/Postal Code] = Null
Me![Ship Country/Region] = Null
End Sub
Private Sub cmdCompleteOrder_Click()
If Me![Status ID] <> Shipped_CustomerOrder Then
MsgBoxOKOnly OrderMustBeShippedToClose
ElseIf ValidateOrder(Closed_CustomerOrder) Then
Me![Status ID] = Closed_CustomerOrder
eh.TryToSaveRecord
MsgBoxOKOnly OrderMarkedClosed
SetFormState
End If
End Sub
Private Sub cmdCreateInvoice_Click()
Dim OrderID As Long
Dim InvoiceID As Long
OrderID = Nz(Me![Order ID], 0)
' Gracefully exit if invoice already created
If CustomerOrders.IsInvoiced(OrderID) Then
If MsgBoxYesNo(OrderAlreadyInvoiced) Then
CustomerOrders.PrintInvoice Me.Customer_ID, OrderID
End If
ElseIf ValidateOrder(Invoiced_CustomerOrder) Then
' Create Invoice Record
If CustomerOrders.CreateInvoice(OrderID, 0, InvoiceID) Then
' Mark all Order Items Invoiced
' Need to change Inventory Status to SOLD from HOLD
Dim rsw As New RecordsetWrapper
With rsw.GetRecordsetClone(Me.sbfOrderDetails.Form.Recordset)
While Not .EOF
If Not IsNull(![Inventory ID]) And ![Status ID] = OnHold_OrderItemStatus Then
rsw.Edit
![Status ID] = Invoiced_OrderItemStatus
rsw.Update
Inventory.HoldToSold ![Inventory ID]
End If
rsw.MoveNext
Wend
End With
' Print the Invoice
CustomerOrders.PrintInvoice Me.Customer_ID, OrderID
SetFormState
End If
End If
End Sub
Private Sub cmdShipOrder_Click()
If Not CustomerOrders.IsInvoiced(Nz(Me![Order ID], 0)) Then
MsgBoxOKOnly CannotShipNotInvoiced
ElseIf Not ValidateShipping() Then
MsgBoxOKOnly ShippingNotComplete
Else
Me![Status ID] = Shipped_CustomerOrder
If IsNull(Me![Shipped Date]) Then
Me![Shipped Date] = Date
End If
eh.TryToSaveRecord
SetFormState
End If
End Sub
Private Sub Customer_ID_AfterUpdate()
Me.sbfOrderDetails.Form.[Product ID].RowSource = "SELECT Inventory.[Product ID], Inventory.[Product Code], Inventory.[Qty Available] from Inventory where [Product Code] like '*" & Customer_ID & "*'"
SetFormState False
If Not IsNull(Me![Customer ID]) Then
SetDefaultShippingAddress
End If
End Sub
Private Sub Customer_ID_Current()
If Not Me.NewRecord Then
Me.sbfOrderDetails.Form.[Product ID].RowSource = "SELECT Inventory.[Product ID], Inventory.[Product Code], Inventory.[Qty Available] from Inventory where [Product Code] like '*" & Customer_ID & "*'"
End If
End Sub
Private Sub Customer_ID_KeyUp(KeyCode As Integer, Shift As Integer)
Me.Customer_ID.RowSource = "SELECT [ID], [Company], [Address For Ship], [ID] FROM [Customers Extended]where [Company], [Address For Ship], [ID] like '*" & Me.Customer_ID.Text & "*' order by [Company], [Address For Ship]"
Me.Customer_ID.Dropdown
End Sub
Private Sub Form_Current()
SetFormState
End Sub
Private Sub Form_Load()
SetFormState
End Sub
Function GetDefaultSalesPersonID() As Long
GetDefaultSalesPersonID = GetCurrentUserID()
End Function
Function ValidateShipping() As Boolean
If Nz(Me![Shipping Fee]) = "" Then Exit Function
ValidateShipping = True
End Function
Function ValidatePaymentInfo() As Boolean
If IsNull(Me![Payment Type]) Then Exit Function
If IsNull(Me![Paid Date]) Then Exit Function
ValidatePaymentInfo = True
End Function
Sub SetFormState(Optional fChangeFocus As Boolean = True)
If fChangeFocus Then Me.Customer_ID.SetFocus
Dim Status As CustomerOrderStatusEnum
Status = Nz(Me![Status ID], New_CustomerOrder)
TabCtlOrderData.Enabled = Not IsNull(Me![Customer ID])
Me.cmdCreateInvoice.Enabled = (Status = New_CustomerOrder)
Me.cmdShipOrder.Enabled = (Status = New_CustomerOrder) Or (Status = Invoiced_CustomerOrder)
Me.cmdDeleteOrder.Enabled = (Status = New_CustomerOrder) Or (Status = Invoiced_CustomerOrder)
Me.cmdCompleteOrder.Enabled = (Status <> Closed_CustomerOrder)
Me.[Order Details_Page].Enabled = (Status = New_CustomerOrder)
Me.[Shipping Information_Page].Enabled = (Status = New_CustomerOrder)
Me.[Payment Information_Page].Enabled = (Status <> Closed_CustomerOrder)
Me.Customer_ID.Locked = (Status <> New_CustomerOrder)
Me.Employee_ID.Locked = (Status <> New_CustomerOrder)
Me.sbfOrderDetails.Locked = (Status <> New_CustomerOrder)
End Sub
Function ValidateOrder(Validation_OrderStatus As CustomerOrderStatusEnum) As Boolean
If IsNull(Me![Customer ID]) Then
MsgBoxOKOnly MustSpecifyCustomer
ElseIf IsNull(Me![Employee ID]) Then
MsgBoxOKOnly MustSpecifySalesPerson
ElseIf Not ValidateShipping() Then
MsgBoxOKOnly ShippingNotComplete
Else
If Validation_OrderStatus = Closed_CustomerOrder Then
If Not ValidatePaymentInfo() Then
MsgBoxOKOnly PaymentInfoNotComplete
Exit Function
End If
End If
Dim rsw As New RecordsetWrapper
With rsw.GetRecordsetClone(Me.sbfOrderDetails.Form.Recordset)
' Check that we have at least one specified line items
If .RecordCount = 0 Then
MsgBoxOKOnly OrderDoesNotContainLineItems
Else
' Check all that all line items have allocated inventory
Dim LineItemCount As Integer
Dim Status As OrderItemStatusEnum
LineItemCount = 0
While Not .EOF
LineItemCount = LineItemCount + 1
Status = Nz(![Status ID], None_OrderItemStatus)
If Status <> OnHold_OrderItemStatus And Status <> Invoiced_OrderItemStatus Then
MsgBoxOKOnly MustBeAllocatedBeforeInvoicing
Exit Function
End If
rsw.MoveNext
Wend
ValidateOrder = True
End If
End With
End If
End Function
ผลที่ได้คือเวลาพิมหาแล้วขึ้นกล่องว่าเปล่าค่ะ
91 Reply in this Topic. Dispaly 5 pages and you are on page number 1
2 @R13741
ภาพเล็กมาก รบกวนอาจารย์เปิดจากlinkนะคะ
3 @R13742
Private Sub Customer_ID_KeyUp(KeyCode As Integer, Shift As Integer)
Me.Customer_ID.RowSource = "SELECT [ID], [Company], [Address For Ship], [ID] FROM [Customers Extended]where [Company], [Address For Ship], [ID] like '*" & Me.Customer_ID.Text & "*' order by [Company], [Address For Ship]"
Me.Customer_ID.Dropdown
End Sub
ถ้าเราจะค้นจาก ID เท่านั้น ส่วนที่เป็นสีแดงจะไม่มีนะครับ มันผิด syntax และหน้าคำว่า "where" ต้องมีช่องว่างคั่นนะครับ ก็จะเป็น
FROM [Customers Extended] where
แต่ถ้าต้องการค้นจากทั้ง 3 ฟิลด์ ก็ต้องเขียนเป็น
... where ([Company] like '*" & Me.Customer_ID.Text & "*') or ([Address For Ship] like '*" & Me.Customer_ID.Text & "*') or ([ID] like '*" & Me.Customer_ID.Text & "*' order by ...
ปล. ช่วงนี้ บางทีอาจตอบช้าหน่อยนะครับ
Me.Customer_ID.RowSource = "SELECT [ID], [Company], [Address For Ship], [ID] FROM [Customers Extended]where [Company], [Address For Ship], [ID] like '*" & Me.Customer_ID.Text & "*' order by [Company], [Address For Ship]"
Me.Customer_ID.Dropdown
End Sub
ถ้าเราจะค้นจาก ID เท่านั้น ส่วนที่เป็นสีแดงจะไม่มีนะครับ มันผิด syntax และหน้าคำว่า "where" ต้องมีช่องว่างคั่นนะครับ ก็จะเป็น
FROM [Customers Extended] where
แต่ถ้าต้องการค้นจากทั้ง 3 ฟิลด์ ก็ต้องเขียนเป็น
... where ([Company] like '*" & Me.Customer_ID.Text & "*') or ([Address For Ship] like '*" & Me.Customer_ID.Text & "*') or ([ID] like '*" & Me.Customer_ID.Text & "*' order by ...
ปล. ช่วงนี้ บางทีอาจตอบช้าหน่อยนะครับ
4 @R13743
แก้ไขเป็น
... where ([Company] like '*" & Me.Customer_ID.Text & "*') or ([Address For Ship] like '*" & Me.Customer_ID.Text & "*') or ([ID] like '*" & Me.Customer_ID.Text & "*') order by ...
... where ([Company] like '*" & Me.Customer_ID.Text & "*') or ([Address For Ship] like '*" & Me.Customer_ID.Text & "*') or ([ID] like '*" & Me.Customer_ID.Text & "*') order by ...
5 @R13744
แล้วเรื่องเลือกพิมพ์เป็นภาษาไทย/อังกฤษ ถ้ายังทำไม่ได้ เอาโค้ดของ
Function PrintInvoice( .....
มาให้ดูหน่อยครับ
Function PrintInvoice( .....
มาให้ดูหน่อยครับ
6 @R13747
รายงานผลค่ะ ค้นหาได้แล้วค่ะอาจารย์ ขอบพระคุณค่ะ
เรื่องภาษาเริ่มกันใหม่อีกรอบนะคะ
หนูสร้างฟิลด์ชื่อว่าLanguageไว้ที่ตารางcustomerนะคะกำหนดเป็น2ค่าคือ TH,ENG และ เขียนfunction print invoice ไว้ที่moduls customerorder
Function PrintInvoice(Customer_ID As String, OrderID As Long) As Boolean
Dim Result
Result = dlookup("[Language]", "Customers", "[Customer ID]='" & Customer_ID & "'")
If Result = "TH" Then
DoCmd.OpenReport "InvoiceTH", acViewPreview, , "[Order ID]=" & OrderID, acDialog
Else
DoCmd.OpenReport "InvoiceEN", acViewPreview, , "[Order ID]=" & OrderID, acDialog
End If
End Function
ทำยังไงๆก็ออกมาเป็นreportภาษาไทยค่ะ แล้วหนูก็เอาคำว่าcustomer_ID ไปใส่ไว้ที่ form orderdetail แล้วนะคะ
Private Sub cmdCreateInvoice_Click()
Dim OrderID As Long
Dim InvoiceID As Long
OrderID = Nz(Me![Order ID], 0)
' Gracefully exit if invoice already created
If CustomerOrders.IsInvoiced(OrderID) Then
If MsgBoxYesNo(OrderAlreadyInvoiced) Then
CustomerOrders.PrintInvoice Me.Customer_ID, OrderID
End If
ElseIf ValidateOrder(Invoiced_CustomerOrder) Then
' Create Invoice Record
If CustomerOrders.CreateInvoice(OrderID, 0, InvoiceID) Then
' Mark all Order Items Invoiced
' Need to change Inventory Status to SOLD from HOLD
Dim rsw As New RecordsetWrapper
With rsw.GetRecordsetClone(Me.sbfOrderDetails.Form.Recordset)
While Not .EOF
If Not IsNull(![Inventory ID]) And ![Status ID] = OnHold_OrderItemStatus Then
rsw.Edit
![Status ID] = Invoiced_OrderItemStatus
rsw.Update
Inventory.HoldToSold ![Inventory ID]
End If
rsw.MoveNext
Wend
End With
' Print the Invoice
CustomerOrders.PrintInvoice Me.Customer_ID, OrderID
SetFormState
End If
End If
End Sub
รบกวนท่านอาจารย์พิจารณาค่ะ
เรื่องภาษาเริ่มกันใหม่อีกรอบนะคะ
หนูสร้างฟิลด์ชื่อว่าLanguageไว้ที่ตารางcustomerนะคะกำหนดเป็น2ค่าคือ TH,ENG และ เขียนfunction print invoice ไว้ที่moduls customerorder
Function PrintInvoice(Customer_ID As String, OrderID As Long) As Boolean
Dim Result
Result = dlookup("[Language]", "Customers", "[Customer ID]='" & Customer_ID & "'")
If Result = "TH" Then
DoCmd.OpenReport "InvoiceTH", acViewPreview, , "[Order ID]=" & OrderID, acDialog
Else
DoCmd.OpenReport "InvoiceEN", acViewPreview, , "[Order ID]=" & OrderID, acDialog
End If
End Function
ทำยังไงๆก็ออกมาเป็นreportภาษาไทยค่ะ แล้วหนูก็เอาคำว่าcustomer_ID ไปใส่ไว้ที่ form orderdetail แล้วนะคะ
Private Sub cmdCreateInvoice_Click()
Dim OrderID As Long
Dim InvoiceID As Long
OrderID = Nz(Me![Order ID], 0)
' Gracefully exit if invoice already created
If CustomerOrders.IsInvoiced(OrderID) Then
If MsgBoxYesNo(OrderAlreadyInvoiced) Then
CustomerOrders.PrintInvoice Me.Customer_ID, OrderID
End If
ElseIf ValidateOrder(Invoiced_CustomerOrder) Then
' Create Invoice Record
If CustomerOrders.CreateInvoice(OrderID, 0, InvoiceID) Then
' Mark all Order Items Invoiced
' Need to change Inventory Status to SOLD from HOLD
Dim rsw As New RecordsetWrapper
With rsw.GetRecordsetClone(Me.sbfOrderDetails.Form.Recordset)
While Not .EOF
If Not IsNull(![Inventory ID]) And ![Status ID] = OnHold_OrderItemStatus Then
rsw.Edit
![Status ID] = Invoiced_OrderItemStatus
rsw.Update
Inventory.HoldToSold ![Inventory ID]
End If
rsw.MoveNext
Wend
End With
' Print the Invoice
CustomerOrders.PrintInvoice Me.Customer_ID, OrderID
SetFormState
End If
End If
End Sub
รบกวนท่านอาจารย์พิจารณาค่ะ
7 @R13748
อีก 2 เรื่องสุดท้ายและท้ายสุดจริงๆสำหรับงานนี้ค่ะ
1.หนูเอาไฟล์ไปลงในคอมอีกเครื่องซึ่งเครื่องนั้นเป็นaccess v.ภาษาอังกฤษค่ะ ทำให้ยอดเงินที่เป็นภาษาไทยกลายเป็นภาษาต่างดาวซึ่งหนูเคยแก้ไขโดยเปลี่ยนfontภาษาตรง tools>>>>option>>editor format ให้เป็นformatไทยแล้วแก้ได้แต่ครั้งนี้ ตรงส่วนcodeภาษาต่างดาวกลายเป็นภาษาไทยแล้ว แต่ว่าหน้าreportยังคงออกมาเป็นภาษาต่างดาวอีก อาจารย์มีวิธีแก้ไหมคะ ครั้งแรกทำได้แต่ครั้งนี้แก้แล้วทำไมยังเป็นอยู่ไม่แน่ใจว่าสาเหตุเกิดจากตรงไหนอะค่ะ
2.หนูอยากให้เวลาคลิกที่
ปุ่มพวกนี้แล้วถามรหัสก่อนคลิกเข้าไปได้ต้องทำอย่างไรบ้างคะอาจารย์อ้างอิงรหัสจากtableที่หนูสร้างขึ้นมาคือtable password
ขอบพระคุณมากๆนะคะ ท่านอาจารย์
1.หนูเอาไฟล์ไปลงในคอมอีกเครื่องซึ่งเครื่องนั้นเป็นaccess v.ภาษาอังกฤษค่ะ ทำให้ยอดเงินที่เป็นภาษาไทยกลายเป็นภาษาต่างดาวซึ่งหนูเคยแก้ไขโดยเปลี่ยนfontภาษาตรง tools>>>>option>>editor format ให้เป็นformatไทยแล้วแก้ได้แต่ครั้งนี้ ตรงส่วนcodeภาษาต่างดาวกลายเป็นภาษาไทยแล้ว แต่ว่าหน้าreportยังคงออกมาเป็นภาษาต่างดาวอีก อาจารย์มีวิธีแก้ไหมคะ ครั้งแรกทำได้แต่ครั้งนี้แก้แล้วทำไมยังเป็นอยู่ไม่แน่ใจว่าสาเหตุเกิดจากตรงไหนอะค่ะ
2.หนูอยากให้เวลาคลิกที่
ปุ่มพวกนี้แล้วถามรหัสก่อนคลิกเข้าไปได้ต้องทำอย่างไรบ้างคะอาจารย์อ้างอิงรหัสจากtableที่หนูสร้างขึ้นมาคือtable password
ขอบพระคุณมากๆนะคะ ท่านอาจารย์
8 @R13749
เรื่องรายงานดูแล้วก็ไม่น่าจะมีอะไรผิด คุณลองใส่คำสั่งเพื่อให้โชว์ค่าของ Result ออกมาหน่อย โค้ดจะเป็น
Result = dlookup("[Language]", "Customers", "[Customer ID]='" & Customer_ID & "'")
Msgbox "Result = " & Result
If Result = "TH" Then
แล้วลองสั่งพิมพ์ลูกค้าที่จะให้พิมพ์เป็นภาษาอังกฤษดูครับ ว่า Msbox จะแสดงคำว่าอะไรออกมา
------------------------------------
พูดถึงใน VB Editor ก่อนนะครับ ... แม้ตัวอักษรที่ปรากฏใน VB Editor จะอ่านไม่ออกเพราะใช้ font ผิด แต่เนื่องจากเราเอาไฟล์ที่เดิมโค้ดของมันเขียนด้วย font ภาษาไทย ดังนั้นรหัสของภาษาไทยจะยังติดไปกับโค้ดนั้นด้วย
อันนี้พูดถึงตัว Report ... ผมจึงคิดว่า ยอดเงินที่พิมพ์ออกมาผิดนั้นอาจเกิดจากไม่มี font ที่เราใช้บนหน้า Report หรือไม่ คุณลองทดสอบดูโดยการสร้าง Report ใหม่ แล้ววางเท็กซ์บ็อกซ์ลงไป กำหนดให้เป็น font เดียวกันกับที่ใช้พิมพ์ยอดเงิน ดูว่าเลือก font นั้นได้หรือไม่ และ font นั้นชื่อว่าอะไรครับ
------------------------------------
ที่ OnClick event procedure ให้เขียนโค้ดลักษณะเดียวกันกับการหาค่าของฟิลด์ [Language] เพื่อเลือกพิมพ์รายงานครับ
If InputBox("ป้อนรหัสผ่าน") <> DLookup("ฟิลด์รหัสผ่าน", "เทเบิลรหัสผ่าน", "เงื่อนไข'") Then
' รหัสผ่านไม่ถูกต้อง จะทำอะไรก็ว่าไป
End If
Result = dlookup("[Language]", "Customers", "[Customer ID]='" & Customer_ID & "'")
Msgbox "Result = " & Result
If Result = "TH" Then
แล้วลองสั่งพิมพ์ลูกค้าที่จะให้พิมพ์เป็นภาษาอังกฤษดูครับ ว่า Msbox จะแสดงคำว่าอะไรออกมา
------------------------------------
พูดถึงใน VB Editor ก่อนนะครับ ... แม้ตัวอักษรที่ปรากฏใน VB Editor จะอ่านไม่ออกเพราะใช้ font ผิด แต่เนื่องจากเราเอาไฟล์ที่เดิมโค้ดของมันเขียนด้วย font ภาษาไทย ดังนั้นรหัสของภาษาไทยจะยังติดไปกับโค้ดนั้นด้วย
อันนี้พูดถึงตัว Report ... ผมจึงคิดว่า ยอดเงินที่พิมพ์ออกมาผิดนั้นอาจเกิดจากไม่มี font ที่เราใช้บนหน้า Report หรือไม่ คุณลองทดสอบดูโดยการสร้าง Report ใหม่ แล้ววางเท็กซ์บ็อกซ์ลงไป กำหนดให้เป็น font เดียวกันกับที่ใช้พิมพ์ยอดเงิน ดูว่าเลือก font นั้นได้หรือไม่ และ font นั้นชื่อว่าอะไรครับ
------------------------------------
ที่ OnClick event procedure ให้เขียนโค้ดลักษณะเดียวกันกับการหาค่าของฟิลด์ [Language] เพื่อเลือกพิมพ์รายงานครับ
If InputBox("ป้อนรหัสผ่าน") <> DLookup("ฟิลด์รหัสผ่าน", "เทเบิลรหัสผ่าน", "เงื่อนไข'") Then
' รหัสผ่านไม่ถูกต้อง จะทำอะไรก็ว่าไป
End If
9 @R13750
รับทราบค่ะ กำลังนำไปแก้ไขค่ะ
10 @R13752
สั่งปริ้นลูกค้าที่เป็นภาษาอังกฤษแล้วค่ะ แต่msgboxขึ้นมาบอกว่า result = TH ค่ะ :(
11 @R13754
ก็แปลว่าลูกค้ารายนั้น คุณกำหนดเป็น TH
เช็คดีๆครับว่าใส่อะไรในเทเบิลผิดหรือเปล่า โค้ดไม่น่าผิดอะไรแล้ว น่าจะเส้นผมบังภูเขานะ
เช็คดีๆครับว่าใส่อะไรในเทเบิลผิดหรือเปล่า โค้ดไม่น่าผิดอะไรแล้ว น่าจะเส้นผมบังภูเขานะ
12 @R13755
อาจารย์คะcode bathtext หนูยังคงเป็นภาษาต่างดาวด้วยค่ะ :(
13 @R13756
14 @R13757
ทำได้แล้วค่ะขอบพระคุณมากค่ะอาจารย์
เรื่องReportภาษาหนูเปลี่ยนค่าเป็นENแทบจะทั้งหมดแต่resultก็ยังคง=TH อยู่ดีไม่ทราบว่าไปจดจำค่ามาจากส่วนไหนหรือเปล่าอะค่ะ เพราะตารางLanguageหนูให้รับค่ามาจากform new customer เกี่ยวไหมค่ะ? เวลาเพิ่มลูกค้าใหม่หนูให้ลงว่าลูกค้าคนนี้ใช้ภาษาอะไรอะค่ะ แล้วค่านั้นค่อยส่งไปที่ตารางLanguage
แต่ว่าหนูลองสร้างตารางใหม่มาแล้วเพิ่มค่าลงไปเอง ก็ไม่ได้อยู่ดีค่ะ กลายเป็นว่าผลที่ออกมาคือ Result = ว่างเปล่า งงสุดๆค่ะอาจารย์ ระหว่างนี้หนูจะพยายามหาวิธีต่อไป ขอบพระคุณค่ะ
เรื่องReportภาษาหนูเปลี่ยนค่าเป็นENแทบจะทั้งหมดแต่resultก็ยังคง=TH อยู่ดีไม่ทราบว่าไปจดจำค่ามาจากส่วนไหนหรือเปล่าอะค่ะ เพราะตารางLanguageหนูให้รับค่ามาจากform new customer เกี่ยวไหมค่ะ? เวลาเพิ่มลูกค้าใหม่หนูให้ลงว่าลูกค้าคนนี้ใช้ภาษาอะไรอะค่ะ แล้วค่านั้นค่อยส่งไปที่ตารางLanguage
แต่ว่าหนูลองสร้างตารางใหม่มาแล้วเพิ่มค่าลงไปเอง ก็ไม่ได้อยู่ดีค่ะ กลายเป็นว่าผลที่ออกมาคือ Result = ว่างเปล่า งงสุดๆค่ะอาจารย์ ระหว่างนี้หนูจะพยายามหาวิธีต่อไป ขอบพระคุณค่ะ
15 @R13758
Updateค่ะ อาจารย์คะหนูลองเปลี่ยนเป็น EN หมดเลย Result = EN แล้วค่ะ แต่พอหนูเปลี่ยน ลูกค้า1คนเป็น TH ตรงresult ก็ดันกลายเป็น EN ถ้าอย่างงี้เกี่ยวกับปริมาณของEN ที่มากกว่าเลยหาEN เจอหรือเปล่าค่ะ
16 @R13759
หนูค้นพบว่าคำสั่งที่ค้นหาอะค่ะจารย์ จะ result ออกมา เท่ากับลูกค้าคนแรก!!! ถ้าคนแรกหนูใส่ EN result ก็จะ = EN ตลอด แต่ถ้าใส่ TH result ก็จะ = TH ตลอด
17 @R13760
ถ้าเทเบิล Customers ลิงค์มาจากฐานข้อมูลอื่นอีกทีนึง แน่ใจหรือไม่ว่ามาจากฐานข้อมูลที่ถูกต้อง
แน่ใจนะว่าฟิลด์ [Language] อยู่ในเทเบิล Customers ไม่ใช่เทเบิล [Customers Extended]
ฟิลด์ Customer_ID ในเทเบิล Customers มี data type เป็นอะไร (Text, AutoNumber, Integer, Long)
ใน VB Editor ให้คุณกด Ctrl-G เพื่อเปิด Immediate Window แล้วป้อนคำสั่ง
? Dlookup("ฟิลด์ชื่อลูกค้า หรือฟิลด์อื่นๆที่ไม่ใช่ฟิลด์ [Language]", "Customers", "[Customer ID] = '30'") มันควรให้คำตอบเป็นของ รร.มณเฑียร ใช่หรือไม่
แน่ใจนะว่าฟิลด์ [Language] อยู่ในเทเบิล Customers ไม่ใช่เทเบิล [Customers Extended]
ฟิลด์ Customer_ID ในเทเบิล Customers มี data type เป็นอะไร (Text, AutoNumber, Integer, Long)
ใน VB Editor ให้คุณกด Ctrl-G เพื่อเปิด Immediate Window แล้วป้อนคำสั่ง
? Dlookup("ฟิลด์ชื่อลูกค้า หรือฟิลด์อื่นๆที่ไม่ใช่ฟิลด์ [Language]", "Customers", "[Customer ID] = '30'") มันควรให้คำตอบเป็นของ รร.มณเฑียร ใช่หรือไม่
18 @R13761
หนูเปลี่ยน code เป็น
Function PrintInvoice(Customer_ID As String, OrderID As Long) As Boolean
Dim Result
Result = dlookup("[First Name]", "Customers", "[Customer ID]='" & Customer_ID & "'")
MsgBox "Result = " & Result
If Result = "TH" Then
DoCmd.OpenReport "InvoiceTH", acViewPreview, , "[Order ID]=" & OrderID, acDialog
Else
DoCmd.OpenReport "InvoiceEN", acViewPreview, , "[Order ID]=" & OrderID, acDialog
End If
End Function
เลือกชื่อลูกค้าคนนึง ผลออกมาเป็นอีกคนนึง ผลออกมาก็คือชื่อลูกค้าคนแรกเท่านั้นอะค่ะ
Function PrintInvoice(Customer_ID As String, OrderID As Long) As Boolean
Dim Result
Result = dlookup("[First Name]", "Customers", "[Customer ID]='" & Customer_ID & "'")
MsgBox "Result = " & Result
If Result = "TH" Then
DoCmd.OpenReport "InvoiceTH", acViewPreview, , "[Order ID]=" & OrderID, acDialog
Else
DoCmd.OpenReport "InvoiceEN", acViewPreview, , "[Order ID]=" & OrderID, acDialog
End If
End Function
เลือกชื่อลูกค้าคนนึง ผลออกมาเป็นอีกคนนึง ผลออกมาก็คือชื่อลูกค้าคนแรกเท่านั้นอะค่ะ
19 @R13762
หนูกด Ctrl-G แล้วป้อนคำสั่ง
Dlookup("ฟิลด์ชื่อลูกค้า หรือฟิลด์อื่นๆที่ไม่ใช่ฟิลด์ [Language]", "Customers", "[Customer ID] = '30'") มันออกมาเป็นตามรูปค่ะ
Dlookup("ฟิลด์ชื่อลูกค้า หรือฟิลด์อื่นๆที่ไม่ใช่ฟิลด์ [Language]", "Customers", "[Customer ID] = '30'") มันออกมาเป็นตามรูปค่ะ
20 @R13763
ต้องมีเครื่องหมายคำถามด้วยครับ
? Dlookup(...
? Dlookup(...
Time: 0.3348s
และถ้าเราไม่พิมพ์อะไรในช่องกล่องก็จะขึ้นแบบนี้ค่ะ
รบกวนอาจารย์ช่วยแนะนำหน่อยค่ะ พอหนูกดค้นหาไปก็ว่างเปล่าเลยค่ะ
ขอบพระคุณค่ะ