แสดงกระทู้

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 6 7
34
นอกจากเรื่องของโหมดจอ ชื่อฟอนต์ ยุคสมัยนี้ยังมีเรื่องของ DPI ของจอที่กำหนดใน Windows อีกอย่างนึงนะครับ เนื่องจากสมัยนี้จอคอมมีความละเอียดสูงขึ้นเช่น HD 2K 4K แต่ถูกแสดงผลที่จอ 13, 14, 15 นิ้ว ของโน๊ตบุ๊กเท่าเดิม เม็ดพิเซลถูกอัดลงหน้าจอมีความละเอียดมากขึ้นต่อตารางนิ้ว ทำให้เมื่อเรากำหนดค่า DPI เป็น 96 คือ 100% เหมือนเครื่องสมัยก่อน ตัวหนังสือจะเล็กมากๆ ทำให้เรามองได้ไม่ถนัด ดังนั้นส่วนมากคอมสมัยใหม่เล่นที่ความละเอียดสูงๆ จะกำหนด DPI หรือ Scale ไว้เกิน 100% เช่น 125% 150% อย่างเครื่องผมกำหนดเป็น 200% เพื่อทำให้ไอคอนและตัวอักษรใหญ่ขึ้น เราจะได้มองชัดขึ้น มีผลทำให้เวลาเราออกแบบไฟล์ MS Access ที่เครื่องนึง และไปใช้อีกเครื่องที่กำหนด Scale ไว้ไม่เท่ากัน ขนาดตัวอักษรที่ออกแบบไว้มันก็จะโตตามค่า Scale ที่กำหนดใน Windows ด้วย
ทางแก้ไข แบบกำปั้นทุบดินเลยก็คือ ปรับค่า Scale ให้เท่ากับของต้นฉบับก็จะใช้ได้ แต่ตัวอักษรใน Windows ทั้งหมดก็จะตัวเล็กมองไม่ชัด หรือเขียนโค้ดตรวจสอบก่อนรันฟอร์มว่า Windows ที่ใช้กำหนดค่า DPI เป็นเท่าไหร่ แล้วปรับขนาดฟอนต์ของทุกคอนโทรลบนฟอร์มนั้นให้มีขนาดเล็กลงหรือใหญ่ขึ้นตาม DPI ที่กำหนดใน Windows ซึ่งอันนี้ก็จะต้องเขียนโค้ดและทดสอบกันยาวพอดูครับ
ดู Scale ของ Windows 10 ได้โดยการคลิ๊กขวาที่พื้นที่ว่างบน Desktop แล้วเลือก Display Setting > Scale and Layout

35
มีแบบส่งรายบุคคลมั้ยครับพี่

คือถ้าจะส่งไปคนไหน คนนั้นก็จะต้อง Generate token แล้วนำรหัส token มาให้เรา เราถึงจะส่งให้คนนั้นได้ครับ

36
เพิ่งรู้นะครับว่าโปรแกรมนี้มีฟรีแวร์ด้วย ผมเห็นแต่เป็นแบบทดลองใช้แล้วมันจะมีลายน้ำที่รูป อ.laemthong มีแบบเป็น 64bit หรือเปล่าครับ ถ้ามีรบกวนขอแบบ 64bit ด้วยครับ ขอบคุณครับ

37
แนะนำให้โหลดโปรแกรม 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 มาใช้งานได้เลย เป็นอีกทางเลือกลองไปปรับใช้งานดูครับ เป็นไอเดีย

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

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

40
ห้อง 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)

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


41
ห้อง 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]) ไปเรื่อยๆ อีก ถ้ายังไม่หมดก็ต่ออีกฟิลด์ แล้วเราก็เอาฟิลด์สุดท้ายไปใช้งานครับ พอนึกภาพออกไม๊ครับ

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

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


43
ถ้าหมายถึงการใส่ Caption ให้พิมพ์เป็นสองตัวครับ && จะได้เป็น & ตัวเดียว

44
'----------------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-----------------

45
ลองศีกษากระทู้นี้ดูครับ ว่าตรงไม๊
http://www.thai-access.com/yeadram_view.php?topic_id=3065&PagePosition=1

46
ในฟิลด์ 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
ถ้าจะกำหนดให้ค่า Null เป็น 0 ก็ใช้
Val(Nz(DSum("[Que_Pro] * [Salepre_Pro]","tbl_OrderItemPro","ID_Pro=" & [Qry_TotalOut].[ID_Pro]), 0))

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