แสดงกระทู้

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

หน้า: [1] 2
1
โค๊ด: [Select]
Private Sub Form_Current()
If Me.NewRecord Then
Me.cbo_Asset.RowSource = " SELECT * FROM Tb_Assets WHERE Asset_Status = YES "
Else
Me.cbo_Asset.RowSource = " SELECT * FROM Tb_Assets WHERE Asset_ID = " & CStr(Me.Asset_ID) & " OR Asset_Status = YES "
End If
End Sub

เนี่ยครับคือก่อนหน้านี้ผมกำหนด Status ของ Asset ให้เป็นแค่ YES , NO หรือ True , False แต่ว่ายังไม่ตรงกับความต้องการของ User เลยอยากจะให้มันเป็น 1 2 3 4 5 อะไรทำนองเนี้ยครับ แบบอยากทราบวิธีเขียน Multiple Condition ของ SELECT statement อ่ะครับว่าเขียนอย่างไร

2
ผมอยากทราบว่าการระบุ criteria ของ combo box สามารถระบุได้มากกว่า 1 เงื่อนไขมั้ยครับ
สาเหตุที่ต้องทำแบบนี้เพราะว่า ผมจะทำฟอร์มการยืมของครับ โดยที่การยืมมีทั้งยืมภายในและภายนอก ถ้าภายในก็จะมี 3 แห่ง ภายนอก 1 แห่ง
เช่น เชียงใหม่ ขอนแก่น ระยอง แล้ว ก็ ลูกค้ายืมครับผมให้เป็น Asset_Status ผมต้องการให้ combo box แสดงเฉพาะStatusที่อยู่กับ CNX KKC RYG แต่ถ้าเป็นของที่ลูกค้ายืมจะไม่แสดงครับเพื่อที่จะระบุสถานะของว่าอยู่ที่ไหนหากเป็นการยืมภายในเพื่อง่ายต่อการเช็คสต็อค โดยหลังจากบันทึกอยากให้ค่า status ตัวของที่ให้ยืมเปลี่ยนไปตามที่ระบุในฟอร์มอ่ะครับ อย่าง ตอนแรกของอยู่ cnx หลังจากเลือก asset จาก combo box เสรจแล้วก็ให้เลือกว่ายืมภายในไปที่ไหนอะไรแบบนี้อ่ะครับ

3
ขอบคุณอาจารย์สันติสุขมากๆครับผม

4
ผมอยากได้แค่ให้มันเป็น TSD-1908001 พอเปลี่ยนเดือนใหม่ก็รันเป็น 001 ใหม่พอเปลี่ยนปีก็เป็น TSD-2001001 อะไรทำนองนี้เองครับแต่ผมไม่ค่อยเข้าใจฟังก์ชั่น Dcount เท่าไหร่เลยงงๆครับแหะๆ

5
ผมนำไฟล์อ.OddyWriter จากกระทู้ > อยากได้ตัวอย่าง access การทำ running number แบบ ปี เดือน รันเลข 3 ตำแหน่ง มาแก้ให้เป็น yymm-00000 เป็นที่เรียบร้อย ลองไปเปลี่ยนตัวแปรเพื่อใช้ใน Qeury ของท่านดูครับ

โค๊ด: [Select]
Private Sub Data_AfterUpdate()
    txtRunningNum = Format([txtDate], "yymm") & "-" & Right("00000" & DCount("[RunningNum]", "[tblRunningNumber]", "Left([RunningNum],4) = Format([txtDate],'yymm')") + 1, 5)
End Sub

ปล.รูปที่นำไปฝากตามเว็บเมื่อจะนำมาโพสกระทู้เว็บบอร์ดให้ใช้หรือ Copy BBCode มาครับ
ขอโทษนะครับผมใช้โค้ดตามด้านผมแต่เปลี่ยนฟิลกับตารางให้เป็นของผมแล้วผมใช้เป็นฟอร์แมต yymm000 แต่มันไม่ยอมเพิ่มเลขข้างหลังเลยครับไม่ทราบว่ามันเกิดจากอะไรหรอครับ

6
ไม่ทราบโค้ดนี้เขียนใน event ไหนของฟอร์ม ปกติผมก็จะเขียนใน Form_BeforeUpdate event พอได้เลขก็เอากลับไปเช็คในเทเบิลทันทีเลยว่า มีเรคอร์ดของเลขนั้นอยู่ในเทเบิลแล้วหรือเปล่า ถ้ามีก็จะหาเลขถัดไปใหม่อีกครั้งแล้วก็เช็คเทเบิลอีกที วนอย่างนี้ไปเรื่อยๆจนครบกี่ครั้งตามที่เรากำหนด จึงแจ้งข้อความว่าซ้ำ ให้ผู้ใช้ลองทำใหม่อีกทีเท่านั้นเองครับ โอกาสที่จะต้องเตือนผู้ใช้ให้ทำอีกครั้ง ก็เป็นไปได้ แต่น่าจะน้อยมากๆครับ

ผมเขียนไว้ที่ After Update ครับผมสงสัยคงต้องไปเขียนใน before update แทนแต่ตอนนี้เกิดปัญหาครับเนื่องจาก code autorun หมายเลขมันไม่ยอมบวกให้ครับแต่จะเริ่มนับ 1 ใหม่เมื่อขึ้นเดือนใหม่ครับอยากรบกวนอาจารย์ช่วยติโค้ดหน่อยได้มั้ยครับ

โค๊ด: [Select]
txt_LoanNo = "TSD" & Format([txt_LoanDate], "yymm") & Right("000" & DCount("[Loan_No]", "[Tb_Loan]", "Left([Loan_No],4) = Format([txt_LoanDate],'yymm')") + 1, 3)ตอนแรกยังบวกอยู่เลยครับแต่อยู่ดีๆก็ไม่บวกเพิ่มไปเฉยๆซะอย่างนั้นเลย

7
เขียนโค้ดเอาเองครับ พอจะมีทางแก้จุดบอดตรงนี้มั้ยครับ

8
สอบถามอาจารย์ครับ ตอนนี้เกิดปัญหาเวลาที่มี User เข้าฟอร์ม Loan พร้อมกันแล้วกดปุ่มใส่ Loan_No แบบที่ผมเซ็นให้เป็น auto run เพิ่มไปเรื่อยๆ ปัญหาที่พบคือถ้าหากเข้าฟอร์มการ Loan พร้อมกันแล้วกดปุ่มนี้มันจะขึ้นเป็น Loan_No เดียวกันเลยครับไม่ทราบว่าสามารถทำให้มันไม่ซ้ำกันได้มั้ยครับ

9
ได้แล้วครับอาจารย์ ผมทำการเพิ่ม Field Loan_No เข้าไปในตารางการคืนแล้วก็ดึงลงมาเป็น textbox ใน ฟอร์มการคืน หลังจากนั้นก็ลองไปเขียน query ตามที่อาจารย์บอกครับ ขอบคุณมากๆเลยครับผม

10
ผมแนะนำว่าควรมีการบันทึกในใบคืนของ ว่าเป็นการคืนมาจากการยืมเลขที่อะไรด้วย (สมมุติชื่อฟิลด์คือ Loan_no) ถ้าเพิ่มได้ คิวรี่นี้ก็เปลี่ยนเงื่อนไขที่ WHERE เป็น (Asset ถูกยืมไปแล้ว) และ (ไม่พบใบคืนที่มีเลขที่ยืมอันเดียวกันนี้ปรากฏอยู่)

WHERE ((Tb_Assets.Asset_Status=False)
     AND NOT EXISTS (SELECT Tb_Return.Loan_No FROM Tb_Return WHERE Tb_Return.Loan_No = Tb_Loan.Loan_No);



หรือไม่ต้องเช็คสถานะของ Asset เลยก็ได้ เป็น

WHERE NOT EXISTS (SELECT Tb_Return.Loan_No FROM Tb_Return WHERE Tb_Return.Loan_No = Tb_Loan.Loan_No);

เพราะตามตรรกะของระบบแล้ว แน่นอนว่าของที่มีใบยืม แต่ไม่มีเลขที่ใบยืมอยู่ในใบคืนใดๆเลย ก็คือของที่ Asset_Status เป็น False นั่นเอง แต่มัน **อาจจะ** ทำให้การค้นหาช้าลงเมื่อมีข้อมูลการยืม/คืนอยู่เป็นจำนวนมาก (ที่บอกว่า อาจจะ เพราะถ้าอยากทราบจริงๆ ต้องขุดลึกลงไปว่าตัวจัดการคิวรี่ (Query Optimizer) มันฉลาดหรือทื่อๆแค่ไหนกับคำสั่งคิวรี่นั้นๆ)

แล้วเราจะต้องสร้าง Relationship  loan_No ของทั้งสองตารางมั้ยครับหรือว่าผมทำ lookup wizard ไปเลยในฟอร์มของการคืน

11
รบกวนอาจารย์สันติสุขอีกรอบครับ คือผมได้ทำการสร้างคิวรี่ เพื่อ tracking Loaned Asset Status ครับ โดยเขียน sql ประมาณนี้ครับ
โค๊ด: [Select]
SELECT Tb_Assets.[Serial No], Tb_Loan.Loan_No, Tb_Employees.Employee_Name, Tb_Loan.Machine_Description, Tb_Loan.Machine_Serial_No, Tb_Loan.[Expired Date], IIf([Expired Date]<Date(),"EXPIRED",IIf([Expired Date]>Date(),"PENDING")) AS Status, Tb_Loan.Loan_Date
FROM Tb_Employees INNER JOIN (Tb_Assets INNER JOIN Tb_Loan ON Tb_Assets.Asset_ID = Tb_Loan.Asset_ID) ON Tb_Employees.Employee_ID = Tb_Loan.Employee_ID
WHERE (((Tb_Assets.Asset_Status)=False));

แต่ปัญหาคือหลังจากที่ผม return asset ตัวนั้นไปแล้วและมีคนมายืมไปอีกรอบ มันจะขึ้นใน query tracking ด้วยครับ เช่น Asset_A ถูกยืมใน loan_No ที่ ABC00001 และได้ทำการคืนแล้วทำให้ status มันเป็น True แต่ Asset_A ถูกยืมอีกรอบนึงใน loan_No ที่ ABC00005 ทีนี้มันขึ้นทั้งสองอันเลยครับคือทั้ง ABC00001 กับ ABC00005 คือผมอยากให้มันขึ้นเฉพาะ หมายเลขล่าสุดที่ยืมไปอ่ะครับไม่ทราบว่าจะต้องเขียนอย่างไรดีครับผมนึกไม่ออกจริงๆ

12
เข้าใจเลยครับขอบคุณมากๆครับผม

13
คือผมได้ทำการ Split Database แล้วโดยลองให้ User รัน ACCDE โดยใช้ Runtime ปรากฎว่าไม่สามารถรันได้ครับ อยากทราบวิธีแก้ปัญหาว่า ถ้าผมจำเป็นต้องเปลี่ยนเวอร์ชั่นที่เครื่องเป็น Office 2016 64bit แต่ตัว database นั้นถูกสร้างโดย 2010 32bit สามารถ transfer data ได้ไหม หรือต้องทำใหม่ทั้งหมดเลยครับ

ปล.ถ้าหากให้เครื่อง User ใช้เป็น runtime 32bit ได้ไหมครับแต่ว่าทุกเครื่องเป็น office 2016 64bit หมดเลยยกเว้นเครื่องที่ผมใช้

14
ขอบคุณอาจารย์สันติสุขมากๆครับผม

15
รบกวนถามอีกเรื่องครับอาจารย์สันติสุข
ผมอยากให้ 1 Record จาก Query เป็น 1 Page ของ report
แบบ 1 Record ก็จะมี Report Header , Page Header ด้วยครับ
แล้วผมอยากให้แบบหลังจากกรอกฟอร์มนั้นเสร็จกดปริ้นเฉพาะแค่ Loan No นั้นๆอย่างเดียวได้มั้ยครับ รบกวนด้วยครับผม

16
ขอบคุณอาจารย์สันติสุขมากๆครับ

17
อยากทราบว่าหากนำ Database ที่สร้างไว้ไปใส่ใน Server หลักแล้ว share ให้กับ user แล้วรูปจะยังปรากฏขึ้นในฟอร์มอยู่หรือไม่ครับ
ถ้าหากไม่ต้องทำอย่างไรแทน

18
ได้แล้วครับขอบคุณอาจารย์สันติสุขมากๆเลยครับ

หน้า: [1] 2