คำสั่ง print report ที่ต่างภาษากัน ทำอย่างไรค่ะ
กระทู้เก่าบอร์ด อ.Yeadram

 18,756   68
URL.หัวข้อ / URL
คำสั่ง print report ที่ต่างภาษากัน ทำอย่างไรค่ะ

รบกวนท่านอาจารย์และท่านผู้รู้หน่อยค่ะ พอดีมีลูกค้า 2 ประเภท คือ ใช้ บิลภาษาไทย กับภาษา อังกฤษ ค่ะ เวลา ปริ้น รีพอท จึงต้อง สั่งปริ้น ตามแบบของลูกค้า ลองใช้ คำสั่ง dlookup ไป ก็ยังไม่สามารถทำได้ ค่ะ รบกวนท่านผู้รู้ช่วยแก้ได้ไหมค่ะ

function ที่หนูพยายามเขียน ประมาณนี้ค่ะ แค่ทำยังไงๆ โปรแกรม ก็ ปริ้นแต่รีพอท ภาษาไทย

Function PrintInvoice(OrderID As Long) As Boolean
Dim Result
Result = DLookup("[Language]", "Customers", "Language")
     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

รบกวนหน่อยนะค่ะ

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

1 @R13038
Result = DLookup("[Language]", "Customers", "Language") ส่วนสีแดงนี้ต้องเป็นเงื่อนไขที่บอกว่าเราจะดึงลูกค้ารายไหนจากเทเบิล Customers ดังนั้นมันน่าจะเป็นนิพจน์ในลักษณะ "[ชื่อฟิลด์รหัสลูกค้า] = 'รหัสลูกค้า' " มากกว่าครับ

2 @R13041
ขอบพระคุณมากค่ะ คุณสันติสุข
3 @R13043
คุณ สันติสุขค่ะ แล้วถ้าเราตั้ง เป็น CustomerID แล้ว เราจะให้ ชี้ไปที่ เรา ระบุไว้ว่า ลูกค้าคนนี้ ใช้ TH ทำอย่างไรค่ะ เพราะ ถ้าเราระบุเป็นID แล้ว ตรงคำว่า ว่า if result = มันก็ต้องเป็น ID ใช่ไหมค่ะ ???? ช่วยหน่อยนะค่ะ ขอบคุณมากค่ะ
4 @R13044
Result = DLookup("[Language]", "Customers", "CustomerID = '" & รหัสลูกค้า & "' ")

ถ้า รหัสลูกค้า มาจากหน้าจอ ก็แทนด้วย Me.ชื่อเท็กซ์บ็อกซ์ ครับ

และถ้าค่าจากฟิลด์ Language มีค่าเป็น "TH" หรือ "EN" หรืออื่นๆอยู่แล้ว ตรง statement If Result = "TH" Then ก็ไม่ต้องเปลี่ยนแปลงอะไรครับ อย่างเดิมถูกต้องแล้ว

ปล. ช่วยเว้นวรรคให้อ่านง่ายๆหน่อยนะครับ ของคุณมีช่องว่างในประโยคที่สามารถอ่านออกเสียงต่อเนื่องกันไป มีเยอะเกินไปจนอ่านเข้าใจได้ยากมากครับ และ คะ/ค่ะ ใช้ให้ถูกด้วยนะครับ อย่าล่อ "ค่ะ" แต่อย่างเดียว
5 @R13053
ขอบคุณคะ

อีกคำถามนึงนะคะ ถ้าต้องการให้ในกล่องที่วงกลมไว้ค้นหาข้อมูลจาก2ฟิลด์ได้หรือเปล่าคะ เช่น ค้นหาจากชื่อบริษัทและค้าหาจากสถาณที่ส่งเพราะจำนวนลูกค้าค่อนข้างเยอะคะบางบริษัทใช้ชื่อจดทะเบียนกับชื่อที่ส่งต่างกันและบางครั้งจำชื่อบริษัทที่เขาจดทะเบียนไม่ได้จำได้แต่ที่จัดส่งคะเลยอยากจะค้าหาให้ได้ทั้งสองอย่างในกล่องเดียวกัน เพราะ เมื่อเราคลิกตรงช่องนั้นแล้วข้อมูลที่จัดส่งข้อมูลterm of payment ก็จะขึ้นมาโดยอัตโนมัติ

รบกวนอีกครั้งนะคะ และขออภัยถ้าพิมพ์ประโยคที่เข้าใจยากคะ ขออภัยจริงๆคะ

6 @R13058
ผมอ่านแล้วไม่ค่อยแน่ใจคำถามนะครับ "กล่องที่วงกลมไว้ค้นหาข้อมูลจาก2ฟิลด์"
กล่องนั้นเราเรียกว่า combo box คุณต้องการจะให้มีทั้งชื่อบริษัทที่จดทะเบียนและชื่อสถานที่ส่งแสดงอยู่ใน combo box ใช่หรือไม่ เช่น ถ้าในเทเบิล Customer มีฟิลด์ รหัสลูกค้า (ID), ชื่อจดทะเบียน (NM), สถานที่ส่ง (DS), ...

ตัวอย่างข้อมูล
-------------------
SC01, แสงเจริญ (บริษัท), บางนา กม.4 --- คุณจำชื่อบ.ได้
YMC01, ยามาชิ (บริษัท), โรจนะA --- คุณจำสถานที่ส่งได้
WN01, วินัย (คุณ), เซ็นทรัลแจ้งฯ --- คุณจำสถานที่ส่งได้

ถ้าใช่หล่ะก็ คุณต้องสร้าง SQL Statement ที่ดึงทั้งชื่อบ.และสถานที่จัดส่งออกมา แล้วกำหนดลงใน RowSource property ของ combo box นั้น คำสั่ง SQL ก็คือ

select ID, NM from Customer union all select ID, DS from Customer order by NM

และกำหนด property เหล่านี้ด้วย โดยให้ Column Count เป็น 2, Bound Column เป็น 1, Column Width เป็น 0, Limit to List เป็น Yes, Auto Expand เป็น Yes

หวังว่าที่ผมเข้าใจ คงใช่ที่คุณต้องการนะครับ

ปล.... คะ/ค่ะ ผิดอยู่ดี คราวนี้เล่น "คะ" หมดเลย
   คะ ออกเสียงสูง เช่น ใช่ไหมคะ (อ่าน ใช่-ไหม-ข๊ะ) ส่วน ค่ะ ออกเสียงต่ำ เข่น ใช่แล้วค่ะ (อ่าน ใช่-แล้ว-ข่ะ) ดังนั้น

ขอบคุณคะ (ขอบ-คุณ-ข๊ะ) ... อีกคำถามนึง ... ค่อนข้างเยอะคะ (ค่อน-ข้าง-เยอะ-ข๊ะ) ... ที่จัดส่งคะ (ที่-จัด-ส่ง-ข๊ะ) ... เข้าใจยากคะ ขออภัยจริงๆคะ (เข้า-ใจ-ยาก-ข๊ะ ขอ-อภัย-จริง-จริง-ข๊ะ)

แก้ไขด้วยนะครับ
7 @R13091
ขอบพระคุณค่ะ คุณสันติสุข
8 @R13098
หนูขอรบกวนถามต่อได้หรือเปล่าค่ะเพราะข้อมูลของคุณมีประโยชน์กับหนูมากคะ
ตอนนี้หนูเอาขึ้นมา3แถวได้แล้วแบบในรูปแต่เวลาพิมkeywordมันยังขึ้นเป็นชื่อของบริษัทคือแถวแรกค่ะเช่น หนูพิมพ์ บริษัท ทิพย์ธานี ตามในรูปก็จะขึ้นข้อมูลแต่พอหนูพิมพ์ สยามธานี หรือ ID 31 ข้อมูลก็จะไม่ขึ้นหนูอยากทราบว่ามีวิธีทำให้กล่องค้นหานี้ค้นหาkeywordได้ทุกแถวหรือเปล่าค่ะ

ขอบคุณค่ะ
9 @R13099
ขออีก2 ข้อนะค่ะ เรื่องนี้คือเกี่ยวกับการรันตัวเลขค่ะ ที่หนูวงกลมไว้คือส่วนที่เรียกว่าเป็นinvoiceของบริษัทซึ่งจะต้องรันตัวเลขไปเรื่อยๆโดยไม่ซ้ำกันเหมือนprimary keyแต่ในกรณีนี้บางครั้งทางบริษัทจะมีการเปิดข้ามเลขไปก่อนคะเพราะมี2ออฟฟิศ ตัวอย่างเช่น ออฟฟิศ 2 บอกให้เปิดinvoiceเลขที่ 15 แต่ทางoffice 1(ซึ่งเป็นheadofficeที่เปิดinvoiceได้แค่ที่เดียว)เพิ่งจะเปิดinvoiceถึงเลข 12 แต่ต้องเปิดให้office 2 เป็นเลข 15 ก่อนเลยมาพิมตรงinvoiceID เป็น15 แล้วเปิด ข้ามเลข 13,14 ไป หลังจากนั้นพอถึงเวลาที่ทางoffice 1 ต้องเปิด เลข 13,14 ก็สามารถย้อนกลับมาทำ invoice 13 , 14 ได้ พอครบถึง 15ซึ่งเปิดไปก่อนหน้าแล้วเลขก็จะรันต่อไปโดยอัตโนมัติเหมือนเดิม แบบนี้เราต้องตั้งค่า invoiceID เป็นยังไงค่ะ เพื่อให้ช่องนั้นรันเลขขึ้นไปเรื่อยๆแต่ก็แก้ไขได้ด้วย
10 @R13100
ที่ผมตอบไปในคำตอบ R13058 ก็เพื่อให้มันสามารถค้นได้ทั้ง ชื่อบ. และชื่อจัดส่งแล้วนี่ครับ ทำไมยังไม่ได้อีก เช็คดีๆว่าทำอะไรขาดไปหรือเปล่า

ข้อ 2 หมายถึงว่าคุณกำลังจะออกแบบระบบให้ผู้ใช้สามารถป้อนเลข Invoice ได้เองและรันเลขต่อจากเลขมากที่สุดโดยอัตโนมัติก็ได้ด้วยใช่ไหม ถ้าใช่ ก็ต้องไปใส่โค้ดไว้ใน Form_BeforeUpdate event procedure

Me.[ชื่อฟิลด์ Invoice No. บนฟอร์ม] = DMax("[ชื่อฟิลด์ Invoice No. บนเทเบิล]", "[ชื่อเทเบิลที่เก็บ Invoice]")

คะ/ค่ะ ก็ยังผิดอยู่ดี
11 @R13107
เอ๊า ตกหล่นไป แก้

Me.[ชื่อฟิลด์ Invoice No. บนฟอร์ม] = DMax("[ชื่อฟิลด์ Invoice No. บนเทเบิล]", "[ชื่อเทเบิลที่เก็บ Invoice]")

เป็น

Me.[ชื่อฟิลด์ Invoice No. บนฟอร์ม] = DMax("[ชื่อฟิลด์ Invoice No. บนเทเบิล]", "[ชื่อเทเบิลที่เก็บ Invoice]") + 1

แต่แน่นอนว่า Invoice No ต้องเป็นข้อมูลประเภท Integer ไม่ก็ long นะครับ ถ้าเป็นประเภทที่เป็น text ก็จะต้องมีการ convert และ format มันสักหน่อย ลองดูคำถามเก่าๆนะครับ ค้นหาด้วยคำว่า DMax มีถามกันเยอะแล้วเกี่ยวกับการรันเลขโดยอัตโนมัติ
12 @R13163
ช่วยหนูได้เยอะมากจริงๆ ขอบพระคุณมากๆเลยคะ :)
13 @R13165
ขอบพระคุณมากๆเลยคะ (ขอบพระคุณมากๆเลยข๊ะ)

คราวหน้า คะ/ค่ะ ผิดอีก ผมไม่ตอบแล้วนะครับ
14 @R13172
ขอโทษค่ะ ที่ใช้คำพูดผิดค่ะ
คุณสันติสุขคะหนูทำตามที่บอกแล้ว และ ก็สามารถพิมInvoiceNumberเองได้แต่พอเวลาสั่งcreateInvoiceไปโปรแกรมขึ้นหน้าPreviewแล้วพอนูกดปิดpreviceเลขInvoice ดันRunต่อไปทั้งๆที่เปิดหน้าเดิมอยู่ค่ะ ตามรูปนะค่ะจาก23พอปิดpreviewดันrunต่อไปเป็น 24 แก้ไขตรงส่วนไหนรบกวนด้วยนะค่ะ

ขอโทษจริงๆที่ใช้คำผิดๆถูกๆค่ะ

...
15 @R13173
ข้างบนภาพผิดนะคะ

ขอโทษค่ะ ที่ใช้คำพูดผิดค่ะ
คุณสันติสุขคะหนูทำตามที่บอกแล้ว และ ก็สามารถพิมInvoiceNumberเองได้แต่พอเวลาสั่งcreateInvoiceไปโปรแกรมขึ้นหน้าPreviewแล้วพอนูกดปิดpreviceเลขInvoice ดันRunต่อไปทั้งๆที่เปิดหน้าเดิมอยู่ค่ะ ตามรูปนะค่ะจาก23พอปิดpreviewดันrunต่อไปเป็น 24 แก้ไขตรงส่วนไหนรบกวนด้วยนะค่ะ

ขอโทษจริงๆที่ใช้คำผิดๆถูกๆค่ะ



16 @R13175
รบกวนเรื่องภาษาอีกทีนะคะ
มันขึ้นแบบในรูปและบางทีPreview Printเป็นภาษาไทยบ้างภาษาอังกฤษบ้างไม่ตรงตามที่กำหนดไว้เลยค่ะ พอหนูมาแก้Codeมันก็errorสรุปโปรแกรมที่สั่งพิมพ์Invoiceสองภาษาของหนูก็ยังไม่สำเร็จ :( ไม่ทราบว่า Code หนู ผิดตรงไหนอีกหรือเปล่าคะ


ข้างบนหนูใช้ผิดอีกแล้ว ประโยคนี้ต้องเป็น "ตามรูปนะค่ะจาก23พอปิดpreviewดันrunต่อไปเป็น 24 แก้ไขตรงส่วนไหนรบกวนด้วยนะคะ" ขอโทษค่ะ

17 @R13176
ผิดอีกแล้ว 555

ต้องเป็น "ตามรูปนะคะจาก23พอปิดpreviewดันrunต่อไปเป็น 24 แก้ไขตรงส่วนไหนรบกวนด้วยนะคะ" ขอโทษรอบที่1000ค่ะ :(

ปล.หนูกลัวคุณไม่ตอบ เพราะหนูยังมีคำถามอีกเยอะเลย ;( ตอนนี้พยายามทำด้วยตัวเองก่อนถ้าไม่ได้จริงๆหนูจะมาถามเรื่อยๆนะคะ
18 @R13177
ที่ต้องย้ำ คะ/ค่ะ เพราะว่าผมไม่รู้ว่าเกิดอะไรขึ้น กับคุณผู้หญิงยุคปัจจุบันนี้ที่ผันวรรณยุกต์ผิดกันหมด ไม่ว่าจบดอกเตอร์หรือจบ ป.4 เหมือนกันหมด ทั้งที่มีเพียง 2 คำและต้องใช้กันตลอดเวลาอยู่แล้ว แต่ก็ยังผิด ไปไหนๆก็เจอแต่อย่างนี้ ก็ถ้าแค่ คะ/ค่ะ 2คำยังผิด แล้วโปรแกรมคอมพิวเตอร์ที่ต้องจำหลักการมีเป็นร้อยๆจะทำกันยังไง !?! แล้วถ้าจะกรุณา ถ้าเจอเพื่อนๆหรือใครๆ ที่เขียนผิดแล้วพอสอนได้ ก็ช่วยกระทุ้งให้ทีว่าเขียนให้ถูกด้วย ผมไม่ใช่ครูวิชาภาษาไทย และผมเองก็ไม่ค่อยรู้เรื่อง syntax ต่างๆของภาษาไทย แต่ภาษาที่เขียน/อ่านอยู่ทุกเมื่อเชื่อวัน ก็อย่าให้ใช้ผิด ใช้ผิดจนชิน ชินจนกลายเป็นว่าที่ผิดก็กลายเป็นถูกไปเสีย

โอเคครับ คะ/ค่ะ ถูกแล้ว ผมจะตอบต่อไป

1. โค้ดที่ใส่เพื่อสร้างเลข Invoice ของคุณ คืออะไร และไว้ที่ event อะไร ไว้ที่ form หรือ report เหมือนของผมไหม (คิดว่าไม่น่าจะเหมือน) ช่วยแสดงให้ดูด้วยครับ

2. ฟังก์ชั่น PrintInvoice ใส่เอาไว้ในโมดูลของฟอร์มหรือไม่ ดูเหมือนว่าคุณจะไปใส่ไว้ที่ Module object แทน เพราะว่า Me เป็น object ที่หมายถึงฟอร์มหรือรายงานที่เป็นเจ้าของของโค้ดที่กำลังทำงานและกำลังอ้าง Me อยู่   แต่ใน Module object มันไม่ใช่เป็น Form/Report object ดังนั้นมันจึงบอกว่าไม่รู้จัก Me   ดังนั้นต้องเอาฟังก์ชั่น PrintInvoice ใส่เข้าไปในโมดูลของฟอร์มครับ หรือไม่ก็ต้องเพิ่มอากิวเมนท์ที่ส่งค่าของ CustomerID เข้ามายังฟังก์ชั่นนี้แทน

ปล.โมดูลของฟอร์ม/รายงาน ไม่ใช่ Module object นะครับ อย่าสับสน

3. VBA ไม่เหมือนภาษา C ที่ sub procedure ก็คือ function ที่ไม่มีการคืนค่ากลับมา เท่าที่ดูจาก PrintInvoice แล้ว มันไม่มีการคืนค่าใดๆกลับมาเป็นค่าของฟังก์ชั่น ดังนั้นเพื่อไม่ให้สับสน ก็ควรเปลี่ยนเป็น

Private Sub PrintInvoice (OrderID as Long)
...
...
...
End Sub

แต่กรณีที่อยู่ใน Module object เฉพาะกรณีนี้อย่ามีคำ Private นำหน้าครับ
19 @R13178
จะนำไปแก้ไขนะคะ ถ้าได้เรื่องยังไงจะมารบกวนต่อนะคะ พอดีวันนี้หนูมีออกไปทำงานข้างนอกตอนเย็นจะกลับมาทำต่อค่ะ ขอบพระคุณค่ะ
20 @R13249
ตอนนี้หนูทำเรื่องเลขInvoiceได้แล้วค่ะ เหลือแต่เรื่องภาษาและอีก1อย่างคือหนูอยากได้Codeแบบว่าUserต้องใส่รหัสก่อนเข้าถึงตัวFormที่ใช้Addสินค้าอะค่ะ

ตัวอย่างนะคะ คือ บริษัทหนูจะขายของที่เป็นสินค้าแบบเดียวกันแต่ราคาต่างกันเพราะของที่ขายจะขึ้นอยู่กับแบบของลูกค้าซึ่งทำให้ราคาไม่เท่ากันและการลงราคาจะต้องเป็นBossเท่านั้นที่สามารถเปลี่ยนหรือแก้ไขราคาได้หนูเลยอยากทำเป็นแบบว่าก่อนที่จะเข้าไปเพิ่มสินค้าหรือใส่ราคาในFormของProductต้องถามPassword ก่อน หรือจะทำเป็นแบบ Privileges คือตั้งให้ User ใส่Password ตั้งแต่Log in แล้วเข้าฟอร์มนั้นได้คนเดียว คุณสันติสุข รบกวนแนะนำหนูด้วยนะคะ

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