แสดงกระทู้

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

หน้า: 1 2 [3] 4 5 6 ... 9
37
ช่วยบริจาค 1 ปี 1042 บาทครับ
วันที่ 12 นี้โอนให้นะ ขอเลข บัญชีไว้เลยครับ
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

38
อ้างถึง
เลยใช้คำสั่ง
ให้ไป Setfocus ที่ปุ่ม แล้ว Sendkey {Enter} มันใช้ได้ดีเลยครับ ติดที่มันสั่ง
 Numlock

ใช้ Event  Enter ของปุ่มช่วยก็ได้ครับเช่น
สมมุติปุ่มชื่อ ShowMap
Private Sub ShowMap_Enter()
คำสั่งแสดงแผนที หรือคำสั่งที่ต้องการ
End Sub

ที่ปุ่มที่ต้องการกดก็สั่ง

Private Sub Command1_Click()
Call ShowMap_Enter
End Sub

ถ้าจะทำเงื่อนไขต่อไปเลยแบบไม่ต้องกดปุ่มอื่นๆ ก็ใช้
Call ShowMap_Enter
ได้เลยซึ่งเป็นการประยุกต์ใช้คำสั่งแทนการกด Enter เองได้เลย แบบนี้ทำให้ SendKey ไม่ต้องใช้อีก และไม่ต้องสั่ง setfocus ด้วย
หรือถ้าท่านสั่ง Setfocus ปุ่มShowMap      Event Enter ก็จะทำงานทันทีเช่นกันคับ โดยไม่ต้อง Call อีก
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

39
เพิ่มเติมต่อจากอาจารย์อีกหน่อยนะครับ

สมมุติตารางชื่อ Table1
Field ชื่อ  CusID,CusName,DocNumber,DocAddDate
Textbox ชื่อ txtFindCusID / txtFindCusName /  txtFindDocNum / txtFindDocAddDate
Form ในการค้นหา ชื่อ frmSearchCustomer
โค๊ด: [Select]
Private Sub Command40_Click()
Dim StrFilter1, StrFilter2, StrFilter3, StrFilter4 As String
Dim GroupFilter As String

'กำหนดเงื่อนไขให้กับตัวแปรว่าถ้ามีข้อมูลจะนำ Where Clause นี้มาต่อประโยคใน Sql
If Not IsNull(Me.txtFindCusID) Then
StrFilter1 = "(((Table1.CusID)=[forms]![frmSearchCustomer]![txtFindCusID])"
End If
If Not IsNull(Me.txtFindCusName) Then
StrFilter2 = "(((Table1.CusName)=[forms]![frmSearchCustomer]![txtFindCusName])"
End If
If Not IsNull(Me.txtFindDocNum) Then
StrFilter3 = "(((Table1.DocNumber)=[forms]![frmSearchCustomer]![txtFindDocNum])"
End If
If Not IsNull(Me.txtFindDocAddDate) Then
StrFilter4 = "(((Table1.DocAddDate)=[forms]![frmSearchCustomer]![txtFindDocAddDate])"
End If

'นำเงื่อนไขที่ได้จากด้านบน มาต่อประโยคกัน
GroupFilter = IIf(StrFilter1 = "", "", StrFilter1) & IIf(StrFilter2 = "", "", StrFilter2) & IIf(StrFilter3 = "", "", StrFilter3) & IIf(StrFilter4 = "", "", StrFilter4)

'ใช้ Replace เพื่อใช้ And ต่อเงื่อนไขใน Where Clause
GroupFilter = Replace(GroupFilter, ")(((", ") and ((")

'นำประโยคที่ได้มากำหนด RecordSource
If IsNull(Me.txtFindCusID) And IsNull(Me.txtFindCusName) And IsNull(Me.txtFindDocAddDate) And IsNull(Me.txtFindDocNum) Then
Me.RecordSource = "Select * from table1;"
Else
Me.RecordSource = "Select * from table1 where " & GroupFilter & ");"
End If
End Sub

ข้อดีคือ  สามารถเลือกค้นหาข้อมูลได้ทุก textbox ที่อยากค้นและ เราใช้การสร้าง RecordSource แค่อันเดียว เพราะ Sql ที่ได้มาจากการสร้างเงื่อนไขค้นหาด้านบนไว้หมดแล้ว
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

40
ผมมีตัวอย่างการทำงานแบบที่คุณบอกไว้ โดยใช้ปุ่ม Run แทน Event Enter ของ เครื่อง Barcode นะครับ

แบบที่ 1
1.ระบุรหัส Barcode แล้วกด Run ข้อมูลจะสร้าง รหัส Barcode แบบเดียวกันจำนวน 5 แถว สวนรายละเอียด ของ Combobox คุณไปกำหนดเอาเองนะครับ
2.ข้อมูลที่ได้ในฟอร์มจะจัดเก็บไว้ในตารางชั่วคราว ชื่อ LNBTemp
3.เมื่อต้องการบันทึก ผมสร้างปุ่มบันทึกไว้ ถ้าตอบ Yes ข้อมูลในฟอร์มจะนำเข้าไปยังตารางหลักทันที และลบข้อมูลในตารางชั่วคราวทันที เพื่อรับข้อมูลใหม่

แบบที่ 2
1.ระบุรหัส Barcode แล้วกด Run ข้อมูลจะสร้าง รหัส Barcode มา 1 อันและพร้อมรับรหัส Barcode อันต่อไป 
2.ข้อมูลที่ได้ในฟอร์มจะจัดเก็บไว้ในตารางชั่วคราว ชื่อ LNBTemp
3.เมื่อต้องการบันทึก ผมสร้างปุ่มบันทึกไว้ ถ้าตอบ Yes ข้อมูลในฟอร์มจะนำเข้าไปยังตารางหลักทันที และลบข้อมูลในตารางชั่วคราวทันที เพื่อรับข้อมูลใหม่
ลองดูตัวอย่างด้านล่างครับ ทั้ง 2 แบบ
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

41
ใส่เป็น
โค๊ด: [Select]
TotalAmount: CDbl(DSum("[TotalAmount]","QProBudget2","[Year_only]='" & [Year_only] & "' AND [Mon_only]= '" & [Mon_only] & "' AND [BUYER]= '" & [Customer_Name] & "'"))
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

42
ลองดูตัวอย่างนี้นะครับ
สร้าง ปุ่มขึ้นมา 1 ปุ่มใส่คำสั่งนี้เข้าไป ตารางชื่อ T1 Field ชื่อ F1
สีแดงคือชื่อของ CommandBotton ครับ Event เมื่อคลิ๊ก


Private Sub Command0_Click()
DoCmd.SetWarnings False
DoCmd.RunSQL "UPDATE T1 SET T1.F1 = Null;"
DoCmd.SetWarnings True
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

43
เรียนอาจารย์

         ผมต้องการทำปุ่มCMD  เพื่อลบข้อมูลที่พิว F1 ลบทุกRecord คือลบเฉพาะพิวนี้นะครับ ที่ตาราง T1 จะเขียนคำสั่งยังไงครับ
เข้าใจว่าน่าจะเป็น SQL  Update หรือเปล่าครับ ลบกวนแนะนำด้วยครับ

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

44
รบกวนสอบถามครับ ถ้าในคิวรี่มี่2ฟิวด์คือ ฟิวด์A กับฟิวด์B
ต้องการให้ที่ฟิวด์B = ฟิวด์A ลบ(-) ฟิวด์Aของrecordก่อนหน้า ต้องใช้สูตรยังไงครับ

ถ้า อันล่างลบอันบน น่าจะประมาณนี้ครับคุณประจักษ์

โค๊ด: [Select]
SELECT Table1.ID, Table1.Item, Table1.A, DLookUp("[A]","Table1","[ID]=" & [ID]-1)-NZ([a],0) AS B
FROM Table1;

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

45
ห้อง MS Access / : สอบถามคำสั่ง Docmd.Movesize
« เมื่อ: 10 ม.ค. 62 , 14:40:03 »
ที่ คุณสมบัติฟอร์ม FrmDbLine2_Eng1
เป็นแบบนี้หรือยังครับ


ใส่เป็น

  DoCmd.MoveSize 30000, 0, 0, 0

เลยครับ  :cool: :cool:
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

46
ห้อง MS Access / : การใช้คำสั่ง iifซ้อน iif
« เมื่อ: 11 ธ.ค. 61 , 11:50:48 »
ปัญหาการใช้ Expression จะมี 2 อย่างครับ คือ 1. พิมพ์ตัวอักษรมากเกินไป จำไม่ได้แล้วเท่าไหร่แต่ก็มากอยู่ 2. ใช้นิพจน์ซ้อนกันเกินประมาณ 13 ตัวมั้ง จำตัวเลขไม่ได้
ปัญหาของกระทู้นี้คือใช้นิพจน์ซ้อนกันเยอะเกินไป ไม่ว่าจะเป็น IIf ซ้อน IIf หรือใช้ฟังก์ชั่น Switch() ก็ไม่สามารถซ้อนกันเกินได้ จึงต้องใช้การแยกฟิลด์ไม่ให้เกินครับ
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

47
ห้อง MS Access / : การใช้คำสั่ง iifซ้อน iif
« เมื่อ: 11 ธ.ค. 61 , 08:48:20 »
น่าจะเกิดจาก ความยาว หรือจำนวนอักขระ มากเกินไปครับ เวอร์ชั่นเก่า ยิ่งจำกัดแค่ 255 ตัวอักษร
แนะนำให้เขียนฟังชั่นใช้เองดีกว่าครับ
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

48
ห้อง MS Access / : การใช้คำสั่ง iifซ้อน iif
« เมื่อ: 10 ธ.ค. 61 , 17:06:21 »
ใช้ MS Access เวอร์ชั่นอะไรอะครับ ทำไมเหมือนใส่ได้น้อยจัง เหมือนกับมันใส่อักษรเกินที่ Textbox มันรับได้ป่าวครับ ถ้าใช่ให้แก้โดยแบ่งครึ่งเงื่อนไขครับ เช่น
a: IIf(Not IsNull([Eff20]),[Eff20],IIf(Not IsNull([Eff19]),[Eff19],Null)) ไปเรื่อยๆ จนสุดที่ใช้ได้
สร้างอีกฟิลด์
b: IIf(IsNull([a]),IIf(Not IsNull([Eff18]),[Eff18],Null),[a]) ไปเรื่อยๆ อีก ถ้ายังไม่หมดก็ต่ออีกฟิลด์ แล้วเราก็เอาฟิลด์สุดท้ายไปใช้งานครับ พอนึกภาพออกไม๊ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

49
ห้อง MS Access / : การใช้คำสั่ง iifซ้อน iif
« เมื่อ: 09 ธ.ค. 61 , 13:21:46 »
ต้องใส่ลูกน้ำคั่นวงเล็บปิดด้วยใหมครับนั้น ตย.ที่ผมใช้ =IIf([do_T15]=True,IIf([15_ราคา2]<>"",[15_ราคา2]+[15_ราคา],"0"),"0")
ปล.ถ้าใช้ ),),),),),),),),),),) คือมันไม่มีอะไรอยู่ข้างในมันจะแปลงร่างให้เป็น ))))))))))) ตามเดิมอยู่ดี ลองเป็น ,[%Efficiancy]),[%Efficiancy]),... แทนดูได้ใหมครับ :sweat:

โค๊ด: [Select]
Eff20Auto:
IIf(Not IsNull([Eff20]),[Eff20],
IIf(Not IsNull([Eff19]),[Eff19],
IIf(Not IsNull([Eff18]),[Eff18],
IIf(Not IsNull([Eff17]),[Eff17],
IIf(Not IsNull([Eff16]),[Eff16],
IIf(Not IsNull([Eff15]),[Eff15],
IIf(Not IsNull([Eff14]),[Eff14],
IIf(Not IsNull([Eff12]),[Eff12],
IIf(Not IsNull([Eff11]),[Eff11],
IIf(Not IsNull([Eff10]),[Eff10],
IIf(Not IsNull([Eff9]),[Eff9],[%Efficiancy])
,[%Efficiancy])
,[%Efficiancy])
,[%Efficiancy])
,[%Efficiancy])
,[%Efficiancy])
,[%Efficiancy])
,[%Efficiancy])
,[%Efficiancy])
,[%Efficiancy])
,[%Efficiancy])
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

50
ห้อง MS Access / : การใช้คำสั่ง iifซ้อน iif
« เมื่อ: 08 ธ.ค. 61 , 19:23:29 »
ต้องขอความรู้ อาจารย์ สันติสุข ,TTT , OddyWriter และ ท่านอื่นๆ แล้วละครับ  :cool: :cool:
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

51
ห้อง MS Access / : การใช้คำสั่ง iifซ้อน iif
« เมื่อ: 08 ธ.ค. 61 , 09:40:27 »
ผมรบกวนสอบถามหน่อยนะครับ มีคำสั่งอื่นแทนการใช้ iif ซ้อนไหมครับ ผมใช้ iif ใน expression แต่พอใช้ซ้อนหลายๆชั้นมันเหมือนเกินขีดจำกัด และขึ้น error ครับ พอจะมีคำสั่งอื่นใช้แทนหรือเปล่าครับ


Eff20Auto: IIf(Not IsNull([Eff20]),[Eff20],IIf(Not IsNull([Eff19]),[Eff19],IIf(Not IsNull([Eff18]),[Eff18],IIf(Not IsNull([Eff17]),[Eff17],IIf(Not IsNull([Eff16]),[Eff16],IIf(Not IsNull([Eff15]),[Eff15],IIf(Not IsNull([Eff14]),[Eff14],IIf(Not IsNull([Eff12]),[Eff12],IIf(Not IsNull([Eff11]),[Eff11],IIf(Not IsNull([Eff10]),[Eff10],IIf(Not IsNull([Eff9]),[Eff9],[%Efficiancy])))))))))))
ใช้ Switch Function แทนดีไหมคับ
Switch ( expression1, value1, expression2, value2, ... expression_n, value_n )
โค๊ด: [Select]
Eff20Auto: Switch([Eff20]<>"",[Eff20],[Eff19]<>"",[Eff19],[Eff18]<>"",[Eff18],[Eff17]<>"",[Eff17],[Eff16]<>"",[Eff16],[Eff15]<>"",[Eff15],[Eff14]<>"",[Eff14],[Eff13]<>"",[Eff13],[Eff12]<>"",[Eff12],[Eff11]<>"",[Eff11],[Eff10]<>"",[Eff10],[Eff9]<>"",[Eff9],TRUE,[%Efficiancy])
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

52
ไฟล์ที่แนบมาแตกไฟล์ไม่ได้ครับคุณปิ่นณรงค์

ปกติผม แตกไฟล์กับ 7zip ครับลองดูอันใหม่ครับว่าได้ไหม
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

53
โอเคได้ละครับ พอดีไปค้นหาวิธีจากเว็บนอกได้มาประมาณนี้ คือ
ให้เราสร้างฟอร์มตามที่ต้องการโดยเราจะใช้ ความละเอียดจากเครื่องหลัก เพื่อใช้อ้างอิงว่าค่าเริ่มต้นของ form นั้นได้สร้างจากค่าความละเอียดเท่าไร
จากตัวอย่างผมได้ลองไปตั้งค่าความละเอียด 800x600 แล้วลองสร้างฟอร์มให้ได้ขนาดพอดีครับหน้าจอที่ต้องการแสดงครับ

วิธีการทดสอบ
1.ให้ลองตั้งค่าความละเอียด 800x600 แล้วลองเปิดฟอร์มดู (เพื่อดูว่าฟอร์มที่สร้างมาตอนแรกเป็นอย่างไร) ถ้าคิดว่าตำแหน่งจัดวางโอเคแล้วก็เรียบร้อย

2.ให้ลองตั้งค่าความละเอียด ตามปกติของเครื่องนั้นเลย แล้วลองเปิดฟอร์มดูเพื่อดูความเปลี่ยนแปลงครับ ฟอร์มและตัวคอนโทรลที่เปิดขึ้นมา จะขนาดใหญ่หรือเล็กตามขนาดของจอปลายทางที่เราต้องการแสดงครับจากตัวอย่างเครื่องผมปรับได้สุดแค่นี้ครับ 1366*768  pixels


ถ้าแบบนี้โอเคเดี่ยวจะอธิบายการนำ Code ไปประยุกต์ใช้อีกทีคับ ส่วนตัวอย่าง Code โหลดได้ด้านล่างคับ มีทั้งแบบ 64Bit และ 32Bit ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

54
ต้องกำหนดทุกฟอร์มเลยหรือเปล่าครับ แล้วถ้าเราปิดหรือออกจากโปรแกรม ความละเอียดหน้าจอจะกลับมาที่ความละเอียดปกติมั้ยครับ

เฉพาะ Event Form_Open ของฟอร์มล๊อกอินคับ เพราะมันต้องแสดงขึ้นมาก่อนอยู่แล้ว
ส่วนความละเอียดหน้าจอ ค่าปกติต้องดูว่ากำหนดที่เท่าไร ผมจะได้เพิ่ม Code คืนค่าปกติ เมื่อปิดโปรแกรม


แต่ถ้าเราจะให้มัน Shrinker หรือ Stretcher เดี่ยวขอลองทำดูก่อนนะครับ ได้ยังไงเดี่ยวมาอัพเดทผมว่าน่าจะพอทำได้อยู่คับ

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

หน้า: 1 2 [3] 4 5 6 ... 9