สมัครสมาชิก

แสดงกระทู้

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 - สันติสุข

หน้า: [1] 2 3 4 ... 14
1
ห้อง MS Access / : การ Split database
« เมื่อ: วันนี้ เวลา 09:01:51 »
ตามข้อกำหนดของ Access บอกว่าสามารถมีการใช้ไฟล์ฐานข้อมูลหนึ่งๆได้พร้อมๆกันที่ 255 หรือ 256 คนนี่แหล่ะครับ ส่วนที่เคยเจอก็ 20 กว่าคนพร้อมๆกัน
โพสต์นี้ได้รับคำขอบคุณจาก: Mercury

2
ห้อง MS Access / : การ Split database
« เมื่อ: วันนี้ เวลา 01:33:45 »
ไฟล์ A   (หรือเรียกว่า Backend File) จะเก็บเฉพาะเทเบิล  ส่วนไฟล์ B (หรือที่เรียกว่า Frontend File) จะเก็บส่วนอื่นๆนอกเหนือจากเทเบิล  แต่จะสร้าง Linked Table ขึ้นมาแทนเทเบิลที่ได้ย้ายไปยัง A  ซึ่งก็จะโยงไปหาเทเบิลจริงในไฟล์ A นั่นเอง  ดังนั้นการกระทำใดๆกับข้อมูลผ่าน  Linked  Table  ก็คือการทำกับข้อมูลในไฟล์ A ครับ  วิธีนี้คือวิธีที่ถูกต้องในการสร้างระบบใดๆสำหรับ Access ครับ  ไม่เว้นแม้แต่เราทำบนเครื่องเดียว ผู้ใช้เดียว
โพสต์นี้ได้รับคำขอบคุณจาก: Mercury

3
ถ้าเป็นบรรทัดเดียว จะไม่จัดให้ไม่ว่าไทยหรืออังกฤษ (ทดลองใน Microsoft Word ก็ไม่ทำให้เหมือนกันนะครับ) แต่ถ้าหลายบรรทัด จะจัดให้
โพสต์นี้ได้รับคำขอบคุณจาก: tanuki

4
ใครเคยใช้ไหม เป็นยังไงบ้าง https://ultraviewer.net/en/ link
โพสต์นี้ได้รับคำขอบคุณจาก: PookPuy, PNR

5
ส่วนตัวแล้ว ฟอร์มของผมจะอิงกับคิวรี่เมื่อใช้แสดงข้อมูลเท่านั้นครับ นอกนั้นส่วนมากจะโยงกับเทเบิลหรือ SQL SELECT statement ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: PookPuy

6
Access ทำคุณสมบัติการลบเรคอร์ดให้ไว้อยู่แล้ว โดยกำหนด Record Selector property ของทั้งฟอร์มหลักและฟอร์มย่อย ให้เป็น Yes   คุณก็จะเห็น แถบ ที่ด้านหน้าเรคอร์ด เมื่อคลิกที่แถบนี้และกดคีย์ DELETE มันก็จะลบเรคอร์ดให้  ส่วนการลบเรคอร์ดบนฟอร์มหลักและไปลบเรคอร์ดในฟอร์มย่อยที่เกี่ยวข้องโดยอัตโนมัติ ก็ใช้คุณสมบัติเรื่อง Referential Integrity ซึ่งเป็นคุณสมบัติพื้นฐานของระบบจัดการฐานข้อมูลทุกตัวอยู่แล้วครับ ดูวิธการที่ อ.Yeadram ตอบใน https://www.thai-access.com/topic_post.asp?CategoryID=1&TopicID=725

หมายเหตุ : ฟอร์มหลักให้ผูกเข้ากับเทเบิลของข้อมูลหลัก ส่วนฟอร์มย่อยก็ผูกเข้ากับเทเบิลของข้อมูลย่อย จะง่ายกว่าไปผูกกับคิวรี่ซึ่งมีเงื่อนไขในฟอร์มหลักอีกที ดูแล้วงงๆ
โพสต์นี้ได้รับคำขอบคุณจาก: PookPuy

7
น่าจะได้ แต่ผมไม่กล้ายืนยัน 100% ผมว่าควรเอาโปรแกรมนั้นมาทดลองครับ แต่ที่แน่ๆคือเราต้องจัดฟอร์แมทของข้อมูลให้ตรงตามที่โปรแกรมจะใช้ต้องการเสียก่อน แล้วค่อย export ออกไปครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Mercury

8
ห้อง MS Access / : access 2003 to windows 10 64 bit
« เมื่อ: 02 พ.ย. 62 , 13:57:07 »
สร้างโมดูล แล้วใส่โค้ดข้างล่างนี้ เวลาเรียกใช้ ก็แค่สั่ง setdate เท่านั้น  โค้ดมีความแตกต่างนิดหน่อยจากโค้ดของคุณ nonc31 นะครับ คือไม่มีการเช็ค compiler directive VBA7 เพราะ VBA7 ไม่ได้เป็นการเช็คว่าระบบเป็น 32 หรือ 64 bit  ถ้าจะเช็คต้องใช้ compiler directive Win64  แต่ยังไงก็ตาม API 3 ตัวนี้ไม่มีความจำเป็นต้องเช็ค เพียงแค่ตบแต่งบางอย่าง ก็จะใช้ได้ทั้ง 32 และ 64 bit แต่ใช้สำหรับ Access 2007 หรือสูงกว่าเท่านั้นนะครับ

เนื่องจากว่า ผมเข้าใจว่าการเรียกใช้ API ทั้ง 3 ตัวนี้ ถูกเรียกจาก procedure setdate เท่านั้น ดังนั้นไม่จำเป็นต้องกำหนดเป็น Pubic ที่คำสั่ง Declare ก็ได้ แต่ใส่ไว้ที่ procedure setdate ที่เดียวก็ได้ครับ

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

โค๊ด: [Select]
Option Compare Database
Option Explicit

Private Const LOCALE_SSHORTDATE = &H1F
Private Const WM_SETTINGCHANGE = &H1A
Private Const HWND_BROADCAST = &HFFFF&

Declare PtrSafe Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String) As Long
Declare PtrSafe Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, ByVal lParam As LongPtr) As Long
Declare PtrSafe Function GetSystemDefaultLCID Lib "kernel32" () As Long

Public Function setdate()
    Dim dwLCID As Long
   
    dwLCID = GetSystemDefaultLCID()
    If SetLocaleInfo(dwLCID, LOCALE_SSHORTDATE, "dd/MM/yyyy") = 0 Then
        MsgBox "ผิดพลาด", vbCritical, "Error"
        Exit Function
    End If
   
    PostMessage HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0
End Function
โพสต์นี้ได้รับคำขอบคุณจาก: มาลี

9
ห้อง MS Access / : access 2003 to windows 10 64 bit
« เมื่อ: 01 พ.ย. 62 , 13:43:19 »
สร้าง Module ขึ้นมา 1 ตัว แล้วแทนที่จะใส่ Private Declare PtrSafe ... ก็ใส่เป็น Public Declare PtrSafe ... แทนครับ วางไว้ที่เดียว จะได้เรียกใช้จากที่ไหนก็ได้
โพสต์นี้ได้รับคำขอบคุณจาก: มาลี

10
ไปดูโปรแกรมที่จะใช้ดีกว่า ว่าเขาใช้ฐานข้อมูลฟอร์แมทหรือยี่ห้ออะไร จะได้รู้ว่า export ไปได้ง่ายไหม หรือเขาสามารถอ่านฐานข้อมูลของ Access ได้โดยตรงเลยหรือไม่
โพสต์นี้ได้รับคำขอบคุณจาก: Mercury

11
ตามหลักการแล้ว อะไรที่ขึ้นกับคนนั้นและไม่มีทางเปลี่ยน ก็ให้ผูกกับเทเบิลที่มี Primary Key เป็น NationalID เช่น วันเกิด  แต่อะไรที่เปลี่ยนแปลงไปได้ เช่น ชื่อ นามสกุล ที่อยู่ เบอร์โทร ก็ต้องผูกกับเทเบิลที่มี Primary Key เป็น NationalID + NumberOfEdited  แต่เท่าที่ดู มีแค่ฟิลด์วันเกิดเท่านั้นที่ไม่เปลี่ยนแปลง ดังนั้นการจะแยกเป็นอีกเทเบิลที่มีแต่ฟิลด์ NationalID กับ BirthDate อาจจะดูไม่คุ้มกับการทำ ผมคิดว่าให้เทเบิล tbl_Contracter และ tbl_Address มี Primary Key เป็น NationalID + NumberOfEdited ไปเลยจะดีกว่า และคิดว่าเพิ่มฟิลด์ประเภท Boolean อีกฟิลด์ทั้งใน 2 เทเบิล เพื่อบอกว่า Edition ไหน เป็น Edition ปัจจุบันไปด้วย จะทำให้ตอนค้นหาข้อมูลปัจจุบันเพื่อนำมาใช้ในส่วนต่างๆ ไม่ยุ่งยากเมื่อเทียบกับการต้องหาว่า Edition ไหนเป็น Edition ล่าสุดโดยไม่มีฟิลด์ที่ว่า แต่ก็ต้องจัดการให้ดีๆว่า ในขณะใดขณะหนึ่งต้องมีเพียงเรคอร์ดเดียวเท่านั้นที่ฟิลด์ที่ว่ามีค่าเป็น True    ส่วนเทเบิลอื่นๆที่ต้องโยงมายัง 2 เทเบิลนี้ ก็ต้องเก็บทั้ง NationalID และ NumberOfEdited ไปด้วย ดังนั้น transaction ต่างๆก็จะอิงกับข้อมูลที่เป็นปัจจุบัน ณ เวลานั้นครับ
โพสต์นี้ได้รับคำขอบคุณจาก: sjs, Tatchawin

12
API (Application Program Interface)  เป็นชื่อเรียกรวมๆของฟังก์ชันที่ระบบสร้างไว้ให้ผู้พัฒนาโปรแกรมเขียนโค้ดไปเรียกใช้เพื่อสั่งให้ระบบทำงานต่างๆ เพราะภาษาที่เราใช้เขียนโปรแกรมนั้นไม่ว่าจะภาษาอะไรก็ตาม ไม่สามารถสร้างฟังก์ชันเอาไว้ให้ทำได้ทุกอย่างที่ต้องการ  ถ้าเป็น API ของระบบวินโดวส์ เรียกเต็มๆก็คือ Windows API แต่ก็มักเรียกสั้นๆว่า API   ดังนั้นก็ต้องเข้า VBA Editor แล้วกด Ctrl-F เพื่อค้นหาชื่อ API ที่เรา Declare เอาไว้ทีละตัว ว่ามันอยู่ที่ไหนในโค้ดบ้างเท่านั้นเองครับ
โพสต์นี้ได้รับคำขอบคุณจาก: มาลี

13
ห้อง MS Access / : Access Runtime 2013ติดปัญหาครับ
« เมื่อ: 18 ต.ค. 62 , 22:03:58 »
จากที่คุณบอกว่าปลายทางมีแต่ Runtime มันก็จะหาจากเครื่องปลายทางคงไม่ได้ ก็มีแต่ที่เครื่องต้นทางให้เข้าโปรแกรมไฟล์แล้วกด F11 ตามที่คุณ PNR บอก คุณก็เห็นไลบรารี่ทุกตัวที่ทำเครื่องหมายเลือกเอาไว้ ซึ่งจะแสดงติดๆกันที่ด้านบนของลิสท์ ให้คุณดูส่วนที่เขียนว่า Location ที่อยู่ด้านล่างที่จะบอกว่าไฟล์อะไรอยู่ที่ไหน เราก็ไปดูที่เครื่องปลายทางว่ามีไฟล์นั้นหรือไม่ ตัวไหนไม่มีก็ค่อยก็อปปี้ไป ย้ำว่าเอาเฉพาะตัวที่หาไม่มีในเครื่องปลายทางนะครับ อย่าไปก็อปปี้ทับ หลังก็อปปี้ไปอาจจะใช้ได้หรือไม่ ก็ยังไม่แน่ครับ ขึ้นกับปัจจัยมากมาย แต่โปรแกรมไม่ต้องแก้ไขอะไรครับ


แต่ถ้าเกิด Location มันยาว ก็จะมองเห็นไม่หมด ทีนี้ก็ต้องเข้าโปรแกรม RegEdit ซึ่งเป็นโปรแกรมของระบบวินโดว์ที่เข้าไปยุ่งกับค่าทุกค่าที่เกี่ยวกับระบบวินโดว์และโปรแกรมต่างๆในเครื่องแล้ว ซึ่งถ้าทำอะไรผิดไป ระบบวินโดว์อาจพังไปเลย  ถ้าไม่เคยใช้ RegEdit ตรงนี้ไม่ค่อยอยากให้เข้าไปยุ่งเลยครับ
โพสต์นี้ได้รับคำขอบคุณจาก: pitakchan

14
ห้อง MS Access / : Access Runtime 2013ติดปัญหาครับ
« เมื่อ: 18 ต.ค. 62 , 19:37:54 »
ถ้าไลบรารี่หาย ดังนั้นไม่ว่าจะใช้ Runtime หรือ Full Version ก็ทำงานไม่ได้อยู่ดีครับ  ถ้ามี Source Code ไฟล์ .mdb, .accdb และ Full Version สักเครื่องก็จะหาตัวที่หายไปได้ ถ้าไม่ได้ใช้ไลบรารี่ตัวนั้นแล้ว ก็อย่าไป reference ถึง แต่ถ้ายังต้องใช้ ก็อาจลองโดยก๊อปปี้จากเครื่องที่มีมาลงเครื่องที่ไม่มี อาจแก้ไขได้ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: pitakchan

15
ห้อง MS Access / : การผูก Queries
« เมื่อ: 17 ต.ค. 62 , 10:52:57 »
ไม่ค่อยเข้าใจคำถาม แต่เอาเป็นว่า ภาพจาก Query Design ที่นำเอาคิวรี่แต่ละตัวมาเชื่อมความสัมพันธ์กับตัวก่อนหน้า ก็จะให้ผลเป็นว่า   box-inqty จะเป็นคิวรี่หลัก ถ้ามีเรคอร์ดของ 1A030000008 ก็ถึงจะแสดงบรรทัดออกมาให้เห็น แต่ว่า 1A030000008 ไม่มีใน box-outqty ดังนั้น inhouse (และฟิลด์อื่นๆ) ของ box-outqty จะเป็นค่าว่างๆ ดังนั้นมันก็ไม่สามารถไปหา inhouse จากคิวรี่ตัวถัดไปได้ สมมุติถ้ามี 1A030000008 จากทุกคิวรี่ยกเว้น pcs-in ผลก็คือมันจะแสดงค่าจาก box-inqty และ box-outqty เท่านั้น  หรือว่า ถ้ามีในทุกคิวรี่ยกเว้น box-inqty ทีนี้ก็กลายเป็นว่าจะไม่มีแสดงบรรทัดของ 1A030000008 ออกมาเลย

วิธีแก้ไขก็คือ เปลี่ยนเป็นสร้างความสัมพันธ์ระหว่างคิวรี่ทุกตัวกับตัวหลักแทนครับ ก็คือ box-inqty กับ box-outqty, box-inqty กับ pcs-in, ...
โพสต์นี้ได้รับคำขอบคุณจาก: Mercury

16
อีกวิธีครับ https://www.thai-access.com/index.php?topic=640.0
โพสต์นี้ได้รับคำขอบคุณจาก: Tongo

หน้า: [1] 2 3 4 ... 14