แสดงกระทู้

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

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

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

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

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

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

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

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

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

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

41
ในฟิลด์ 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
--------------------------------------------
โพสต์นี้ได้รับคำขอบคุณจาก: ชีวิต ไม่สิ้นหวัง, อุดมโชค สมหวัง

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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