แสดงกระทู้

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

หน้า: 1 ... 7 8 9 [10] 11 12 13 ... 18
163
โพสปัญหาแรก ท่านแก้ปัญหาได้แล้วเนื่องจากไม่ได้สั่งเปิดฟอร์มใดๆใว้ทำให้หน้าโปรแกรมว่างเปล่า
*เหตุการณ์คือ เปิดไฟล์ > แจ้งเตือน(รูป3) > กด Open(รูป3) > หน้าโปรแกรมว่างเปล่า(รูป1)

Trust Center ใน Runtime จะไม่มีให้ตั้งค่าแต่ก็สามารถแก้ Registry โดยเพิ่ม Trusted Locations
Adding Databases to Access 2007 (and higher) Trusted Locations
Adding Trusted Location to Access Run Time
https://www.accessribbon.de/en/?Trust_Center:Trusted_Locations
How do set a file/location to trusted for Access runtime?


โพสปัญหาสอง
> Runtime คนล่ะตัวกัน,คนล่ะเวอร์ชั่นใช่หรือไม่
> Runtime v.2010 ขึ้นไปตัวติดตั้งจะมีทั้งที่เป็น x86(32บิต) และ x64(64บิต) ต้องติดตั้งให้ตรงกันกับที่สร้างไฟล์มา (Access 2007 =32บิต)
> มีการดึงหรือเชื่อมโยงไฟล์อื่นหรือไม่
> รันสคริปหรือมาโครคนล่ะภาษา
> ไฟล์มีปัญหา(หรือก็คือไฟล์เสียอ่านะ)

164
พร้อมให้ทีมวิวไปดูเครื่องผู้ใช้งานหรือคุยไลน์ส่งข้อความส่วนตัวมานะครับ

Adding Databases to Access 2007 (and higher) Trusted Locations
Adding Trusted Location to Access Run Time
https://www.accessribbon.de/en/?Trust_Center:Trusted_Locations
How do set a file/location to trusted for Access runtime?
ตัวอย่างชุดคำสั่งแก้ Registry
โค๊ด: [Select]
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Access\Security]
"VBAWarnings"=dword:00000001
[HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Access\Security\Trusted Locations]
[HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Access\Security\Trusted Locations\Location0]
"Path"="%userprofile%\\my documents\\"
"Description"="my docs"
"Date"="14/03/2011 5:39 p.m."
"AllowSubFolders"=dword:00000001
[HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Access\Security\Trusted Locations\Location2]
"Path"="C:\\Program Files\\Microsoft Office\\Office12\\ACCWIZ\\"
"Description"="Access default location: Wizard Databases"
"AllowSubFolders"=dword:00000001

165
พื้นฐานตัวโปรแกรมเขาจะเปิดระบบป้องกันใว้อยู่นะครับ เราต้องเปิด Access แบบเพียวๆ(ตัวruntimeมีไอค่อนให้กดใหมน้อ)จากนั้นไปตั้งค่าครับ
Access Options > Trust Center > ActiveX Settings > Enable All controls....

https://www.thai-access.com/index.php?topic=1024.msg4510#msg4510

166
ไฟล์ฉบับเหมือนจะง่ายไม่ผูกอะไรครับ :shout:
จากกระทู้เก่าท่านเห็นมี Value แยกหมวดอยู่ผมเลยแอบเอามาใส่ในนี้ให้มีเป็นแนวด้วยนะครับ หรือก็คือ ID จะรันแยกหมวดและปีเดือนครับ(แต่ Table2 จะไม่เทพอย่างท่าน PNR )
โค๊ด: [Select]
Private Sub cmd_QuNew_Click()
If IsNull(cmbG) Then
    Me.cmbG.SetFocus
    MsgBox "เลือกกลุ่ม"
Else
    Me.txtID = AutotxtID
End If
End Sub

Function AutotxtID() As String
Dim X As Variant
Dim bk, cmbG As String
    cmbG = Me.cmbG
    X = DMax("Right(ID,4)", "[Table1]", "Left([ID],7) = cmbG & Left([txtDate2], 4)")
    If IsNull(X) Then bk = 1 Else bk = X + 1
    AutotxtID = cmbG & Left([txtDate2], 4) & Format(bk, "0000")
End Function

หรือตัวอย่างของท่าน PNR มีระบบผูกตาราง,คิวรี่,ฯลฯ
https://www.thai-access.com/index.php?topic=1063.msg4744#msg4744

167
ถ้าใช้ dmax มันจะเกิดปํญหาอะไรไหม และมีวิธีอื่นๆ ไหมครับ
ถ้า dmax address_id กลัวว่าจะเลขที่บ้านเดียวกันแต่ดันอยู่คนล่ะหลังนะครับ

> ทำฟอร์มหรือชุดคำสั่งแยกเพื่อเพิ่มข้อมูลลงไปในตาราง address / สั่ง Requery
> เปลี่ยน baan เป็น combo box เพื่อเลือกที่อยู่จากตาราง address และเก็บข้อมูลเป็นเพียง address_id เท่านั้น

ที่นี้ในฟอร์ม person ก็ไม่จำเป็นต้องมี tambon แล้วมั้งนี่
หรือไม่ก็ไม่ต้องไปแยกตาราง เวลาเราจะดูว่าใครอยู่บ้านไหนบ้างก็สั่งกรองเอา :cool:

168
สร้างบ้านก่อนแล้วค่อยให้คนเลือกบ้านที่จะเข้าไปอาศัยครับ
ถ้าจะทั้งสร้างคนและสร้างบ้านไปพร้อมๆกันกลัวว่าจะเลขที่บ้านเดียวกันแต่ดันอยู่คนล่ะหลังนะครับ

169
ระบบรันเลขที่ในเว็บมีเยอะเลยค้นหาดูก่อนครับ เพียงแต่เขาจะรันหรือทำงานบนฟอร์มกันซะส่วนใหญ่นะ :yuush:

170
master form ที่เห็นอยู่ด้านซ้ายนั่นเป็นการแสดงข้อมูลฉบับเต็มที่มีอยู่จริงบน tb_ccr ไม่ใช้ผลการค้นหา(จากคำใดคำหนึ่งแบบซับฟอร์ม)
ดังนั่นถ้าจะให้ master form ด้านซ้าย ทำงานก็เปลี่ยน tx_search ไปเป็น combobox เพื่อเลือกข้อมูลจากตารางลงมาแสดงเลยอ่านะ(ที่นี้ตารางค้นหาก็ไม่จำเป็นล่ะมั้งนี่)

ไฟล์ตัวอย่าง(ผมก็ก๊อบมาจากที่อื่น)ที่ตัว combobox
1.แก้ Row Source ให้เป็นเทเบิ้ลที่ต้องการดึงรายการมาแสดง(tb_ccr)
2.แก้มาโคร AfterUpdate ด้านล่างที่ SearchForRecord ตรง Where.... ให้เป็น =="[ชื่อคอลัมน์ที่ใช้รันเลขที่]=" & [TempVars]![ActiveControlValue] 

ปล.รูปที่อัพมาวาดเขียนลงไปด้วยก็ได้นะว่าอะไรเป็นอะไรคืออะไร?

171
ลองเปลี่ยนตามนี้ดูครับ

โค๊ด: [Select]
Private Sub bt_se_car_Click()
     Me.ชื่อซับฟอร์ม.Form.Filter = "[id_cr] like '*" & [tx_search] & "*'"
     Me.ชื่อซับฟอร์ม.Form.FilterOn = True
     Me.ชื่อซับฟอร์ม.Form.Refresh
End Sub

172
ดูภาพแล้วข้องใจว่า"แสดงผลการค้นหาในซับฟอร์ม"ใช้หรือไม่ครับ

173
ห้อง MS Access / : การทำ supertype & subtype
« เมื่อ: 11 มี.ค. 63 , 13:35:17 »
เนื้อหาบทเรียนจากมหาวิทยาลัยบูรพาครับ > https://staff.informatics.buu.ac.th/~komate/886301/DB-Chpater-5.pdf

อ้างถึง
5.1.5 disjoint constaint และ overlapping constaint
เอ็นทิตี้ supertype หนึ่งๆจะสามารถมีความเกี่ยวเนื่องกับเอ็นทิตี้ subtype ใน 2 รูปแบบ คือ แบบ
disjoint หรือแบบ overlapping ตัวอย่างเช่น ธุรกิจสายการบินทำการว่าจ้างพนักงานในตำแหน่งนักบิน ช่าง
ซ่อมบำรุง และนักบัญชี และมีกฎเกณฑ์ทางธุรกิจที่บ่งบอกว่า “พนักงานคนหนึ่งๆไม่สามารถทำงานในหลายๆ
ตำแหน่งได้” จากกฎเกณฑ์ทางธุรกิจดังกล่าวจะช่วยให้เราสามารถกำหนดลักษณะความสัมพันธ์ระหว่าง
เอ็นทิตี้ supertype และเอ็นทิตี้subtype ได้เป็นแบบ “disjoint subtype” หรือ “nonoverlapping
subtype” ที่ซึ่ง “แถวข้อมูลหนึ่งๆในเอ็นทิตี้ supertype จะสามารถมีความสัมพันธ์กับข้อมูลในเอ็นทิตี้
subtype หนึ่งๆเท่านั้น (ห้ามมีความสัมพันธ์กับหลายเอ็นทิตี้ subtype)” เช่น แถวข้อมูลหนึ่งๆในเอ็นทิตี้
EMPLOYEE จะมีความเกี่ยวเนื่องกับเอ็นทิตี้ PILOT หรือ MECHANIC หรือ ACCOUNTANCE อย่างใดอย่าง
หนึ่งเท่านั้น ..........

หรือตามที่ผมตีความสรุปได้ว่า
Disjoint = บังคับว่าเลือกได้เพียงแค่หนึ่งเช่น เป็นนักเรียนก็เรียนไปห้ามทำหน้าที่อื่น
Overlaping = เลือกได้มากกว่าหนึ่งหรือก็คือเป็นนักเรียนแล้วจะขยันทำอะไรอีกถ้าทำได้ก็ทำไป ^u^
แอบไปหาอ่านเจอมาตอบแทนผู้ตั้งกระทู้  :shout:

174
1. รายการในรีพอร์ตแบบ Continuous ผมใช้วิธีวางค่า sum ซ้อนใว้ข้างใน แล้วที่ด้านล่างจึงอ้างถึง =textbox... ไปอีกที


2. =Date() หรือ =Date$() นี่คำสั่งพื้นฐานเลยนะครับ ท่านลองสั่งตรวจสอบและซ่อมไฟล์ดูยังครับหรือลองทำไฟล์เปล่าๆแล้วใช้คำสั่งดูครับ


3. ข้อนี้นี่ยังไงครับ คือว่า AL,AS นี่เป็น Checkbox ใช้ใหมครับ(เห็นใช้คำว่า"ถ้าถูกเลือก")
3.1 แบบแยกกันแสดงรูปคนล่ะที่
โค๊ด: [Select]
Private Sub AL_Click()
    Call ALAS
End Sub
Private Sub AS_Click()
    Call ALAS
End Sub

Public Sub ALAS()
DoCmd.SetWarnings False

    If Me.AL.Value = True Then
        Me.p101.Picture = CurrentProject.Path & "\" & "AL.png"
    Else
        Me.p101.Picture = ""
    End If

    If Me.AS.Value = True Then
        Me.p102.Picture = CurrentProject.Path & "\" & "AS.png"
    Else
        Me.p102.Picture = ""
    End If

DoCmd.SetWarnings True
End Sub


3.2 แบบแสดงรูปอยู่ที่เดียวเพียงแค่ตรวจดูว่า AS,AL มีการเลือกอยู่หรือไม่ถ้ามีก็นำรูปนั่นมาแสดง(*อันนี้ผมให้ AS สำคัญกว่านะ)
โค๊ด: [Select]
Private Sub AL_Click()
    Call ALAS
End Sub
Private Sub AS_Click()
    Call ALAS
End Sub

Public Sub ALAS()
DoCmd.SetWarnings False

    If Me.AS.Value = True Then
    Me.p101.Picture = CurrentProject.Path & "\" & "AS.png"
        ElseIf Me.AL.Value = True Then
        Me.p101.Picture = CurrentProject.Path & "\" & "AL.png"
    Else
        Me.p101.Picture = ""
    End If

DoCmd.SetWarnings True
End Sub

176
ด้านบนเป็นเพียงการเติมอักษรต่อท้ายเลขวันที่ครับ
ส่วนมาโครด้านล่างนี่ผมก็แก้จากชื่อเดือนภาษาไทยเป็นชื่อเดือนภาษาอังกฤษครับ
ตัวอย่างการนำไปใช้งาน =Format(Date(),"d ") & MonthNameEng(Date()) & " " & Year(Date()) = 25 February 2020

โค๊ด: [Select]
Option Compare Database

Public Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long
Public Declare Function GetLocaleInfo Lib "kernel32" _
   Alias "GetLocaleInfoA" _
(ByVal Locale As Long, _
   ByVal LCType As Long, _
   ByVal lpLCData As String, _
   ByVal cchData As Long) As Long

Public Function GetUserLocaleInfo(ByVal dwLocaleID As Long, ByVal dwLCType As Long) As String
   Dim sReturn As String
   Dim r As Long
   r = GetLocaleInfo(dwLocaleID, dwLCType, sReturn, Len(sReturn))
   If r Then
      sReturn = Space$(r)
      r = GetLocaleInfo(dwLocaleID, dwLCType, sReturn, Len(sReturn))
      If r Then GetUserLocaleInfo = Left$(sReturn, r - 1)
   End If
End Function

Public Function mYear(ByVal yourDate As Date) As Long
    mYear = Year(yourDate)
    If GetUserLocaleInfo(GetSystemDefaultLCID(), &H1009) = 7 Then mYear = Year(yourDate)
End Function

Public Function bYear(ByVal yourDate As Date) As Long
bYear = Year(yourDate)
'If GetUserLocaleInfo(GetSystemDefaultLCID(), &H1009) <> 7 Then bYear = Year(yourDate) + 543
If GetUserLocaleInfo(GetSystemDefaultLCID(), &H1009) = 7 Then bYear = ((Year(yourDate) + 543) - 2500)
End Function

Function MonthNameEng(ByVal yourDate) As String
    If Not IsNull(yourDate) Then
        yourDate = Format(yourDate, "m")
        Select Case yourDate
            Case 1
               MonthNameEng = "January"
            Case 2
               MonthNameEng = "February"
            Case 3
               MonthNameEng = "March"
            Case 4
               MonthNameEng = "April"
            Case 5
               MonthNameEng = "May"
            Case 6
               MonthNameEng = "June"
            Case 7
               MonthNameEng = "July"
            Case 8
               MonthNameEng = "August"
            Case 9
               MonthNameEng = "September"
            Case 10
               MonthNameEng = "October"
            Case 11
               MonthNameEng = "November"
            Case 12
               MonthNameEng = "December"
            Case Else
               MonthNameEng = ""
        End Select
    End If
End Function


มาแถมถ้าอยากให้มีอักษรต่อท้ายด้วยอีก
1. แก้มาโครแรกให้ FancyDate = FancyDate & Format(dteInput, " ")
2. =FancyDate(Date()) & MonthNameEng(Date()) & " " & Year(Date()) จะได้  25th February 2020

177
ในมุมผมนะ
> เอามาใช้แค่เป็น Combo box ช่วยในการเลือกข้อมูลไม่ต้องผูกอะไรครับ ที่นี้ล่ะว่าComboboxเลือกข้อมูลแบบไหนมาเก็บในตาราง
   - เก็บเป็น ID = ในฟอร์มหรือรีพอร์ตอื่นๆค่อยเอามาผูกเพื่อดึงชื่อมาแสดง
   - เก็บเป็นชื่ออยู่แล้ว = ไม่จำเป็นที่จะต้องผูกอะไรอีกในอนาคตครับ

> เห็นมี xxx..ID ทั้งหลายอยู่แล้วไม่ตั้งให้เป็นหัวไปเลยไม่ต้องไปใช้ ID อ่านะครับ

178
ผมใช้แบบนี้อยู่ ลองเอาไปใช้ดูครับ (ผมเปลี่ยนชื่อรีพอตเป็นของท่าน และก็มันสั่งแค่อย่าล่ะ1ชุดไม่รู้ใส่เลขต่อท้ายให้สำเนา 2ยังไงนะ)

โค๊ด: [Select]
    stDocName = "ต้นฉบับใบเสร็จรับเงิน"
    DoCmd.OpenReport stDocName, acNormal
---
    stDocName2 = "สำเนาใบเสร็จรับเงิน"
    DoCmd.OpenReport stDocName2, acNormal

179
เหมือนกับกระทู้นี้นะครับ https://www.thai-access.com/index.php?topic=701.msg4785#msg4785

นั่นคือปิดชุดคำสั่งนี้ครับ  DoCmd.OpenReport "ต้นฉบับใบเสร็จรับเงิน", acViewPreview, Filename
หรือย้ายลงมาด้านล่างครับ
โค๊ด: [Select]
    .....
    DoCmd.PrintOut , , , , 2
    DoCmd.OpenReport "ต้นฉบับใบเสร็จรับเงิน", acViewPreview, Filename

หรือก็คือแยกปุ่มคำสั่งสำหรับแสดงตัวอย่างออกไปดูนะครับ

180
สั่งบันทึกรหัสใว้ตอนดึงตารางมาครับ (แนวทางจากอ.TTT ดูที่ 26:35นาที)

หน้า: 1 ... 7 8 9 [10] 11 12 13 ... 18