แสดงกระทู้

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

หน้า: 1 2 [3] 4 5
37
เพิ่งรู้นะครับว่าโปรแกรมนี้มีฟรีแวร์ด้วย ผมเห็นแต่เป็นแบบทดลองใช้แล้วมันจะมีลายน้ำที่รูป อ.laemthong มีแบบเป็น 64bit หรือเปล่าครับ ถ้ามีรบกวนขอแบบ 64bit ด้วยครับ ขอบคุณครับ
โพสต์นี้ได้รับคำขอบคุณจาก: pirin

38
แนะนำให้โหลดโปรแกรม Siam-ID มาติดตั้งนะครับ เป็นฟรีแวร์โปรแกรมในตำนานโปรแกรมเดียวของไทยที่ฟรี และใช้โหมด Fill From จากนั้นก็สร้างฟิลด์บนตาราง MS Access ให้ตรงกับที่ตั้งค่าไว้ในโปรแกรม Siam-ID
การใช้งานคือเมื่อเปิดโปรแกรม Siam-ID ในโหมด Fill from แล้ว เราก็เปิดใช้งานโปรแกรมอะไรก็ได้ในที่นี่ก็คือ MS Access จากนั้นก็คลิ๊กเคอร์เซอร์ไปที่ฟิลด์แรกที่เราต้องการบันทึกรอไว้ก่อน แล้วเราก็เสียบบัตรประชาชนเข้าเครื่องอ่านบัตร โปรแกรม Siam-ID ก็จะทำการ SendKey เหมือนกับการใส่คำในคีย์บอร์ดทีละหัวข้อลงไปในฟิลด์ของ MS Access ที่เราโฟกัสไว้ทีละฟิลด์ไปเรื่อยๆ จนครบ ส่วนรูปให้สร้างฟิลด์ใน MS Access เป็น OLE Object มันจะรองรับไฟล์รูปบัตรลงในฟิลด์ได้เลยครับ
ปล. หากไม่เข้าใจอยากลองก่อน ให้ลองกับ MS Excel ก่อนได้ครับ โดยเปิดโปรแกรม MS Excel ขึ้นมา แล้วเสียบบัตรอ่านดู ก็จะเห็นการทำงานของโปรแกรม Siam-ID ในโหมด Fill From เองครับ
หรืออีกวิธีอันนี้จะยากหน่อยคือ ในโปรแกรม Siam-ID เมื่อเราทำการอ่านบัตร โปรแกรมจะสร้างไฟล์ที่เป็น Text ไฟล์ และ รูปที่เป็น Jpg ไว้ในโฟลเดอร์ Siam-ID ที่ Document เราสามารถเขียนโค้ดให้ MS Access อ่าน Text ไฟล์นั้น แล้วบันทึกลงบนฟิลด์ได้ แต่จะมีปัญหาที่ผมเคยเจออย่างนึงคือมันจะอ่านภาษาไทยไม่ได้ อันนี้ต้องใช้วิธีแก้กันหลายขั้นตอนอยู่ ส่วนรูปก็เซฟจากโฟลเดอร์ Document\Siam-ID มาใช้งานได้เลย เป็นอีกทางเลือกลองไปปรับใช้งานดูครับ เป็นไอเดีย
โพสต์นี้ได้รับคำขอบคุณจาก: สันติสุข, nikorn, laemthong

39
ถ้าอยากเก็บค่า Checkbox หลายๆ ตัวลงในฟิลด์เดียว ลองทำเป็นค่ายกกำลังแล้วจัดเก็บในรูปแบบของตัวเลขตามกระทู้นี้ที่ อ.สันติสุข เคยแนะนำไว้ดูครับ
https://www.thai-access.com/yeadram_view.php?topic_id=3414
โพสต์นี้ได้รับคำขอบคุณจาก: Apocalypse

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

41
ห้อง MS Access / : อยากทำ progress meter
« เมื่อ: 10 ธ.ค. 61 , 17:14:08 »
ลองดูคลิปนี้นะครับ แต่การแสดง meter มันทำให้เครื่องต้องเสียเวลาแสดงส่วนนี้เพิ่มด้วยทำให้การทำงานช้าลงอีกนะครับ



ปล. มันจะมีอีกอย่างคือ progress meter ที่ Status bar ไม่แน่ใจว่าตั้งแต่ MS Access เวอร์ชั่น 2007 หรือ 2010 ขึ้นไป ก็สามารถเขียนคำสั่งให้มันแสดงความก้าวหน้าได้ ตัวอย่าง

1. สร้างตัวแปร
Dim ReturnValue As Variant
 
2. กำหนด สเกล ให้ เท่ากับ 100
ReturnValue = SysCmd(acSysCmdInitMeter, "Processing ", 100)
 
3. สมมุติเป็นการนับเรคคอร์ดทั้ง ก็ทำให้ เป็น เปอร์เซนต์
For StartLoop = 0 To (TotalRecord - 1)
      ReturnValue = SysCmd(acSysCmdUpdateMeter, ((StartLoop) / TotalRecord) * 100)
Next StartLoop
 
4. เคลียร์
ReturnValue = SysCmd(acSysCmdRemoveMeter)

อะไรประมาณนี้ครับ ปรับใช้ดู

โพสต์นี้ได้รับคำขอบคุณจาก: ปิ่นณรงค์, aek

42
ห้อง 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, ปิ่นณรงค์

43
ห้อง MS Access / : การใช้คำสั่ง iifซ้อน iif
« เมื่อ: 10 ธ.ค. 61 , 14:25:36 »
ที่บอกว่า "มันเหมือนเกินขีดจำกัด และขึ้น error" มันมีปัญหายังไงหรือครับ เท่าที่ดูทั้งการใช้ IIF() หรือใช้ฟังก์ชั่น Switch() มันก็ใช้ได้นะครับ ผมเคยเขียนซ้อนกันเยอะกว่านี้อีก

@UnKnown ทำให้ผมนึกถึงรูปที่เค้าล้อคนที่ชอบเขียน If ซ้อน If กันเยอะๆ รูปนี้เลยครับ

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

44
ถ้าหมายถึงการใส่ Caption ให้พิมพ์เป็นสองตัวครับ && จะได้เป็น & ตัวเดียว
โพสต์นี้ได้รับคำขอบคุณจาก: diehard4

45
'----------------Code Start----------------
    Dim obj As Object, prop As Property, str As String
On Error Resume Next
    For Each obj In Forms("ชื่อฟอร์มเป้าหมาย")
        For Each prop In obj.Properties
            If obj.Name = "ชื่อคอนโทรลเป้าหมาย" Then
                str = str & vbCrLf & obj.Name & vbTab & prop.Name & vbTab & prop.Value
            End If
        Next
    Next
    Debug.Print str
 
    'คำสั่งสร้าง Text File ----------------------------
    'Open "C:\???\???.txt" For Output As #1
    'Print #1, str
    'Close #1
    '---------------------------------------------
'-----------------Code End-----------------
โพสต์นี้ได้รับคำขอบคุณจาก: bgfc

46
ลองศีกษากระทู้นี้ดูครับ ว่าตรงไม๊
http://www.thai-access.com/yeadram_view.php?topic_id=3065&PagePosition=1
โพสต์นี้ได้รับคำขอบคุณจาก: sjs, somkuon thongmunang

47
ในฟิลด์ Data Type แบบ Text หากกำหนดคุณสมบัติหัวข้อ Allow Zero Length: Yes จะเป็นการกำหนดให้โปรแกรม MS Access เห็นค่าของสตริง "" ไม่เหมือนกับค่า Null กล่าวคือ ค่า Null ของ String ไม่เหมือนกับค่า String ที่มีความยาวเป็น 0 เช่น เมื่อเรากำหนด Allow Zero Length: Yes และกำหนด Required: Yes (หมายถึง ฟิลด์นี้ต้องใส่ข้อมูลห้ามเป็นค่าว่าง) เมื่อเราทำการคีย์ข้อมูลเราสามารถใส่ค่าเครื่องหมาย "" บนฟิลด์ที่กำหนด Required: Yes ได้ โดยโปรแกรมจะเห็นว่ามีค่าแล้ว แต่หากกำหนด Allow Zero Length: No และกำหนด Required: Yes เมื่อเราคีย์ข้อมูลใส่ค่าเครื่องหมาย "" บนฟิลด์ที่กำหนด Required: Yes โปรแกรมจะไม่ยอมให้ผ่านไป ยังคงฟ้องให้ผู้ใช้ใส่ข้อมูลอยู่ นั่นคือโปรแกรมเห็นค่า "" เป็นค่า Null นั่นเอง

ฟังก์ชัน Nz() ก็เช่นกัน เพราะฟังก์ชั่น Nz() จะมองค่า "" ไม่เหมือนกับค่า Null การใช้งานเราตัองมั่นใจว่าค่าที่เราต้องการจะใช้ Nz() ต้องเป็นค่า Null จริงๆ ไม่ใช่ค่า "" เช่น
?Nz(Null,0) = 0
?Nz("",0) = ""
จะเห็นว่าหากเราใช้ Nz() กับค่า String ที่เป็น "" ฟังก์ชั่น Nz() จะไม่ให้ค่าตามที่เราต้องการ
เรื่องของค่าว่าง ค่าศูนย์ ไม่มีค่า และการใช้ฟังก์ชั่นเกี่ยวกับการไม่ใส่ค่าต่างๆ เหล่านี้ต้องทดลองและศึกษาดูครับ มันมีอยู่เยอะเหมือนกันใน MS Access หลายคนตกม้าตายตรงการตรวจสอบค่าพวกนี้ จนทำให้โปรแกรมที่เขียนทำงานผิดพลาดแบบไม่รู้ตัว (ผมด้วยคนนึง) ผมเคยเขียนการทดสอบเล่นๆไว้ลองเทียบดูนะครับ เป็นตัวอย่าง
--------------------------------------------
Dim myVar As Variant
myVar = Null
 
If Isnull(myVar) Then        Return: True
If IsEmpty(myVar) Then       Return: False
If myVar = "" Then           Return: Null
If myVar = vbNullString Then Return: Null
If myVar = vbNullChar Then   Return: Null
If myVar = vbEmpty Then      Return: Null
If myVar & "" = "" Then      Return: True
If Nz(myVar) = "" Then       Return: True
If Len(myVar) = 0 Then       Return: Null
--------------------------------------------
Dim myVar As Variant
myVar = Empty
 
If Isnull(myVar) Then        Return: False
If IsEmpty(myVar) Then       Return: True
If myVar = "" Then           Return: True
If myVar = vbNullString Then Return: True
If myVar = vbNullChar Then   Return: False
If myVar = vbEmpty Then      Return: True
If myVar & "" = "" Then      Return: True
If Nz(myVar) = "" Then       Return: True
If Len(myVar) = 0 Then       Return: True
--------------------------------------------
Dim myVar As Variant
myVar = ""
 
If Isnull(myVar) Then        Return: False
If IsEmpty(myVar) Then       Return: False
If myVar = "" Then           Return: True
If myVar = vbNullString Then Return: True
If myVar = vbNullChar Then   Return: False
If myVar = vbEmpty Then      Return: False
If myVar & "" = "" Then      Return: True
If Nz(myVar) = "" Then       Return: True
If Len(myVar) = 0 Then       Return: True
--------------------------------------------
Dim myVar As Variant
myVar = vbNullString
 
If Isnull(myVar) Then        Return: False
If IsEmpty(myVar) Then       Return: False
If myVar = "" Then           Return: True
If myVar = vbNullString Then Return: True
If myVar = vbNullChar Then   Return: False
If myVar = vbEmpty Then      Return: False
If myVar & "" = "" Then      Return: True
If Nz(myVar) = "" Then       Return: True
If Len(myVar) = 0 Then       Return: True
--------------------------------------------
Dim myVar As Variant
myVar = vbNullChar
 
If Isnull(myVar) Then        Return: False
If IsEmpty(myVar) Then       Return: False
If myVar = "" Then           Return: False
If myVar = vbNullString Then Return: False
If myVar = vbNullChar Then   Return: True
If myVar = vbEmpty Then      Return: False
If myVar & "" = "" Then      Return: False
If Nz(myVar) = "" Then       Return: False
If Len(myVar) = 0 Then       Return: False
--------------------------------------------
Dim myVar As Variant
myVar = vbEmpty
 
If Isnull(myVar) Then        Return: False
If IsEmpty(myVar) Then       Return: False
If myVar = "" Then           Return: False
If myVar = vbNullString Then Return: False
If myVar = vbNullChar Then   Return: False
If myVar = vbEmpty Then      Return: True
If myVar & "" = "" Then      Return: False
If Nz(myVar) = "" Then       Return: False
If Len(myVar) = 0 Then       Return: False
--------------------------------------------
โพสต์นี้ได้รับคำขอบคุณจาก: ชีวิต ไม่สิ้นหวัง, อุดมโชค สมหวัง

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

49
ถ้าจะกำหนดให้ค่า Null เป็น 0 ก็ใช้
Val(Nz(DSum("[Que_Pro] * [Salepre_Pro]","tbl_OrderItemPro","ID_Pro=" & [Qry_TotalOut].[ID_Pro]), 0))
โพสต์นี้ได้รับคำขอบคุณจาก: MyDDT, ชีวิต ไม่สิ้นหวัง

50
ก็ต้องดูว่าค่าในฟิลด์ไหนที่อาจจะเป็นค่า Null ได้ในฐานข้อมูลเรา แล้วทำให้การคำนวณอาจคำนวณค่ากับฟิลด์อื่นที่มีค่าไม่ได้ก็ให้ใส่ Nz() เข้าไปเพื่อทำให้มันสามารถคำนวณค่าได้ เช่นหากถ้าเป็นไปได้ทุกฟิลด์ในฐานข้อมูลเราจะเป็นค่า Null ได้ทั้งหมด เราก็ต้องใส่ทั้งหมดประมาณนี้ครับ

Val(DSum("Nz([Que_Pro]) * Nz([Salepre_Pro])","tbl_OrderItemPro","Nz(ID_Pro)=" & Nz([Qry_TotalOut].[ID_Pro])))

ซึ่งมันแล้วแต่การออกแบบฐานข้อมูลว่าเรากำหนดให้มันสามารถเกิดค่า Null ได้หรือไม่ในฟิลด์ครับ ปรับใช้ดู
โพสต์นี้ได้รับคำขอบคุณจาก: MyDDT, ชีวิต ไม่สิ้นหวัง

51
หากคำสั่งอยู่ที่ฟอร์มหลัก ต้องโฟกัสที่ซับฟอร์มก่อนแล้วค่อยโฟกัสที่คอนโทรลซับฟอร์มอีกครั้ง

Forms![เมนฟอร์ม]![ซับฟอร์ม].SetFocus
Forms![เมนฟอร์ม]![ซับฟอร์ม].Form.[คอนโทรล].SetFocus

เป็น
Forms![Frm_Main]![Frm_Sub].SetFocus
Forms![Frm_Main]![Frm_Sub].Form.[Text1].SetFocus
หรือแบบนี้ก็ได้
Me("Frm_Sub").SetFocus
Me("Frm_Sub").Form.Text1.SetFocus

ปรับใช้ดูครับ
โพสต์นี้ได้รับคำขอบคุณจาก: ปิ่นณรงค์, มาลี

52
คิดว่าที่คุณเขียนไว้ตั้งแต่แรกก็ใช้ได้แล้วมั้งครับ แต่ให้ต่อฟิลด์ลงไปเพิ่ม ประมาณนี้

select * from table_a
where charge & code not in(select charge & code from Table_b)

ไม่รู้ว่าเข้าใจความต้องการของคุณถูกไม๊นะครับ

ปล. การใช้ซับคิวรี่ หากข้อมูลมีจำนวนมากๆ จะทำให้คำนวณได้ช้า
โพสต์นี้ได้รับคำขอบคุณจาก: Cyber O haiyo

53
ห้อง MS Access / : สร้างริบบอน ใช้เอง
« เมื่อ: 08 ส.ค. 61 , 20:13:12 »
แนะนำอ่านที่นี่ครับ มีหมดว่าจะทำเมนูประเภทไหน
Accessribbon
ส่วนนี่เป็นไฟล์ตัวอย่างเมนูที่ผมเคยทำเป็นเมนูที่แสดงเป็นรูปภาพสมาชิกแต่ละคนได้ผมทำเป็นไฟล์ไว้ที่นี่ครับ เรียกไฟล์ BNK48-Update.accde ดูโค้ดที่เป็น xml ได้ที่ตาราง UsysRibbons ส่วนโค้ดที่เป็น VBA ศึกษาดูที่เว็บข้างบนได้ ผมก็ใช้โค้ดจากเว็บข้างบนนี้ทั้งหมดครับ
โหลดไฟล์ BNK48
โพสต์นี้ได้รับคำขอบคุณจาก: kitisak

54
ใช้อังกฤษตัวเล็กแล้วเข้าฟังก์ชั่น UCase() ก็จะเป็นตัวใหญ่ทั้งหมดครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Anupap

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