แสดงกระทู้

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 ... 18 19 20 [21]
321
โค้ดนี้พิมพ์ทุก Property ของทุก Control บนฟอร์มที่ระบุตามชื่อออกเท็กซ์ไฟล์ แต่บาง Property อ่านค่าได้เฉพาะเมื่อเปิดฟอร์มใน Design View มั่ง หรือใน Form View มั่ง ดังนั้นผลลัพธ์จึงอาจแตกต่างเมื่อฟอร์มเปิดใน View ที่ต่างกัน และเพื่อไม่ให้เกิด Runtime Error เมื่ออ่าน Property ตัวไหนไม่ได้ จึงใส่ On Error Resume Next เพื่อข้ามตัวนั้นไป

โค๊ด: [Select]
Public Sub DumpProp()
    Dim obj, prop, str As String
   
    On Error Resume Next
    For Each obj In Forms("ชื่อฟอร์ม")
        For Each prop In obj.Properties
            str = str & vbCrLf & obj.Name & vbTab & prop.Name & vbTab & prop.Value
        Next
    Next
   
    Open "ชื่อพาธและไฟล์.txt" For Output As #1
    Print #1, str
    Close #1
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: bgfc, อุดมโชค สมหวัง

322
เราลองคิดกลับไปยังระบบที่ออก PO ด้วยมือลงกระดาษ ดูว่าระบบงานเดิมทำยังไง เราอาจต้องออกแบบฐานข้อมูลและการทำงานของโปรแกรมให้ล้อไปกับระบบเดิม เช่น ในวิถีทางการลงบัญชี ถ้านำเข้าระบบแล้วและพบว่ามีอะไรผิด ก็ต้องห้ามแก้ ห้ามลบ แต่เปลี่ยนสถานะว่ายกเลิกใบนั้นไป และออกใบใหม่เท่านั้น ลองถามฝ่ายบัญชีดูครับว่ามีกฏระเบียบทางบัญชีว่ายังไง เพราะอาจต้องรองรับให้ บ.ตรวจสอบบัญชี เข้ามาตรวจสอบข้อมูลได้ด้วยครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Pongsak

323
จะไม่บันทึกข้อมูลในเมนฟอร์มถ้าไม่มีข้อมูลในซับฟอร์ม มันค้านกับการทำงานของ Access ครับ แนวคิดที่อาจทำได้ (ไม่รู้ว่าจะเกิดปัญหาอะไรหรือเปล่า เพราะไม่เคยทำ) ก็คือได้แค่กระโดดกลับมายัง PO เลขนั้นเท่านั้น โดยทุกครั้งที่สร้างเรคอร์ดใหม่บนเมนฟอร์ม หรือลบเรคอร์ดในซับฟอร์ม ก็จะเกิด AfterUpdate event บนเมนฟอร์มและ AfterDelConfirm event บนซับฟอร์มตามลำดับ ให้เขียนโค้ดเพื่อเก็บเลขที่ PO เอาไว้ในตัวแปรระดับโมดูล พอไปเรคอร์ดอื่น ซึ่งจะเกิด OnCurrent event บนเมนฟอร์ม ก็ให้เช็คว่าถ้า PO มีค่าและไม่มีเรคอร์ดใน POD ที่มีเลข PO เดียวกันกับที่เก็บไว้ ก็ให้กระโดดกลับไป แต่ถ้ามีแล้ว ก็ให้เคลียร์ตัวแปรนั้นทิ้ง โปรแกรมจะได้ไม่ต้องมาทดสอบ POD ตลอดเวลาครับ
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

324
ห้อง MS Access / > ซ่อน Page Header
« เมื่อ: 05 มี.ค. 61 , 16:25:15 »
ใส่ใน On Format หรือ On Print event ของ Page Header Section ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: Un

325
ฐานข้อมูลแบบ Relational Database ทุกๆยี่ห้อ ทุกเทเบิลต้องมี PK (Primary Key) เพื่อระบุเรคอร์ดไหนคือเรคอร์ดไหน (ถ้าไม่มี ระบบจัดการภายในจะสร้างขึ้นมาเพื่อใช้งานเอง แต่***อาจจะ***ไม่มีบันทึกเป็นฟิลด์ให้ผู้ใช้เห็น)  PK จะมีความหมายหรือไม่มีก็ได้ เช่น อาจใช้เลข 1,2,3,... เป็น PK ก็ได้ แต่ในทางปฏิบัติแล้วเราจะสร้าง PK จากหนึ่งฟิลด์หรือหลายฟิลด์รวมกันโดยที่ค่ารวมของมันจะต้องไม่ซ้ำกันเลย เช่น เลขบัตรประชาชนสำหรับเทเบิลบุคคล หรือใช้เลขที่บ้าน/อาคาร+เลขที่ห้อง+ซอย+ถนน+แขวง/ตำบล+เขต/อำเภอ+จังหวัดสำหรับเทเบิลบ้านอาคารที่อยู่

PK เป็น Index (ดัชนี) ประเภทหนึ่ง และเป็น Unique Index ด้วย (Index ที่ค่าจะไม่มีการซ้ำกันเลยในเทเบิลนั้นๆ) ระบบจัดการฐานข้อมูลจะมีการโยงว่าเรคอร์ดที่มีค่าดัชนีมากกว่า น้อยกว่า เท่ากัน นั้นอยู่ที่ไหน ดังนั้นประโยชน์ของ Index (ไม่ว่าจะ Unique หรือไม่) อีกอย่างก็คือทำให้ระบบสามารถค้นหาเรคอร์ดที่ต้องการได้อย่างรวดเร็วครับ ในทางทฤษฏีแล้ว การค้นหา 1 เรคอร์ดจาก 1 ล้านเรคอร์ดด้วย Unique Index ระบบจะพบเรคอร์ดที่ต้องการภายในการวนหาไม่เกิน 20 ครั้งเท่านั้น
โพสต์นี้ได้รับคำขอบคุณจาก: ปิ่นณรงค์

326
"... แต่มันบันทึกเป็นไฟล์ใหม่ ผมอยากให้มันมันทึกซ้ำวันที่อันเดิมครับ ..." เข้าใจว่าบันทึกเป็นเรคคอร์ดใหม่ใช่ไหม คงไม่ใช่ไฟล์ใหม่อย่างที่คุณเขียน แล้วต้องการบันทึกทับของเดิมใช่ไหมครับ

คำสั่ง INSERT INTO เป็นคำสั่งเขียนเรคอร์ดใหม่ครับ  ถ้าจะเขียนทับหรือแก้ไขเรคอร์ดที่มีอยู่แล้ว ต้องใช้คำสั่ง UPDATE ซึ่งมี syntax คือ
โค๊ด: [Select]
UPDATE ชื่อเทเบิล SET ชือฟิลด์1 = ค่าใหม่, ชือฟิลด์2 = ค่าใหม่, ... WHERE เงื่อนไขแต่การเขียนทับ/แก้ไขเรคอร์ดโดยยังไม่มีเรคอร์ดนั้นมาก่อนตามเงื่อนไขที่ใส่หลัง WHERE  ผลก็คือจะไม่มีเรคอร์ดอะไรถูกแก้ไขเช่นกัน (ส่วนคำสั่ง INSERT จะไม่มี WHERE clause ครับ)

ดังนั้นที่ควรเป็นก็คือ หาโดยคำสั่ง SELECT ก่อนว่ามีเรคอร์ดนั้นหรือยัง ถ้ายัง ก็ให้ INSERT ไม่เช่นนั้นก็ให้ UPDATE 

โค๊ด: [Select]
Private Sub Cmd_Report_Up_Click()

If MsgBox( ...... ) = vbYes Then
   If CurrentDB.OpenRecordset("SELECT * FROM Report_Sale WHERE R_DATE = '" & Me.Date_Re & "'").EOF Then
      CurrentDB.Execute "INSERT INTO Report_Sale(R_DATE, R_PRICE, R_SALE,R_CARD,R_CREDIT,R_IN_CREDIT,R_GP) " & _
      "VALUES ('" & Me.Date_Re & "', " & Me.t01 & ", " & Me.t02 & ", " & Me.t03 & ", " & Me.t04 & ", " & Me.t05 & ", " & Me.t06 & ")", dbFailOnError
   Else
      CurrentDB.Execute "UPDATE Report_Sale SET R_Price = " & Me.t01 & ",   .....   = " & Me.t06 & " WHERE R_DATE = '" & Me.Date_Re & "'", dbFailOnError
   End If
End If
End Sub

หมายเหตุ
1. ตรงที่เขียน .... คุณไปเติมเองนะครับ
2. ยังคงใช้เครื่องหมาย ' เป็นตัวครอบชนิดข้อมูลวันที่ เพราะถ้าใช้ # ในกรณีวันที่เป็นปี พ.ศ. จะวุ่นวายมาก คำสั่ง SQL จะใช้ปี ค.ศ. เท่านั้น ถ้าจะใช้ # จริง ก็ต้องแปลงข้อมูลจากหน้าฟอร์มที่เป็นปี พ.ศ. ให้เป็นปี ค.ศ. อีก แต่การใช้ ' มันจะแปลงเอง แต่กฏเกณฑ์การแปลงเป็นยังไงนี่ผมไม่รู้ อาจเกิดปัญหาตรงไหนผมบอกไม่ได้   ยังไงก็ตาม ผมไม่แนะนำให้ตั้งปฏิทินของวินโดว์ในระบบปี พ.ศ. หรือป้อนข้อมูลเป็นปี พ.ศ. เพราะจะทำให้เกิดข้อผิดพลาดแอบแฝงเอาไว้ได้ โปรแกรมอาจตีความต่างจากที่เราเข้าใจได้ ควรตังเป็นปี ค.ศ.และรูปแบบเป็น ว/ด/ป เท่านั้น และจะใช้ # ได้อย่างไม่ต้องกังวล(เท่าไหร่)
3. แต่ถ้าปัจจุบันระบบวินโดว์เป็นปี ค.ศ. อยู่แล้ว แปลว่าปีของ 23/2/2561 คือปี ค.ศ. 2561 นะครับ ไม่ใช่พ.ศ. 2561
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

327
เทเบิล Take_Return1 ไม่มี Primary Key เหรอครับ ถ้ามีก็เลือกเฉพาะฟิลด์ที่เป็น Primary Key ซึ่งน่าจะมีไม่กี่ฟิลด์ แต่ถ้าไม่มีจริงๆ ก็สร้างฟิลด์ uniqueidentifier เพิ่มในเทเบิลของฝั่ง SQL Server แล้วใช้ฟิลด์นี้แทน
โพสต์นี้ได้รับคำขอบคุณจาก: TaroKung Ichimura

328
Access เองไม่ได้มีคำสั่งสำหรับสร้าง SQL statement ให้กับ Schema ของอ็อปเจ็คต่างๆในฐานข้อมูล อย่างเช่น Table, Index, Relationship, Query, ...   ดังนั้นปกติแล้วเราจะต้องสร้างเองด้วยแมนวลออกมาเป็นคำสั่งเช่น

DROP TABLE [CUSTOMER];
CREATE TABLE [CUSTOMER] (
[ID] TEXT(12)
[NAME] TEXT(20) NOT NULL
[CityCD] TEXT(6)
[PostalCD] TEXT(10)
[CountryCD] TEXT(6)
[Tel] TEXT(50)
[Fax] TEXT(50)
) ;
CREATE UNIQUE INDEX [PrimaryKey] ON [CUSTOMER] ([ID] ASC) WITH PRIMARY DISALLOW NULL;
CREATE INDEX [AK1] ON [CUSTOMER] ([NAME] ASC);

แต่ยูทิลิตี้ที่เป็น Command-line ตัวนี้สามารถช่วยสร้างให้เราได้ นอกจากสร้างให้แล้ว ยังสามารถสั่งให้อ่านจากไฟล์ที่สร้าง SQL statement ตามข้างบน มาทำงานได้ด้วย ยูทิลิตี้ตัวนี้จะช่วยให้การดูแลจัดการกับ Schema ทำได้ง่ายขึ้นมาก สามารถโหลดมาใช้ได้จาก https://bitbucket.org/himselfv/jet-tool/wiki/Home link  have
โพสต์นี้ได้รับคำขอบคุณจาก: PookPuy, Xternity

329
https://www.overclockzone.com/news/10009 link
โพสต์นี้ได้รับคำขอบคุณจาก: PookPuy, OddyWriter, TTT

330
ผมเข้าใจว่าคงถามถึงการแปลงจาก Access ไป SQL Server ใช่หรือไม่ เราสามารถใช้โปรแกรม SQL Server Migration Assistant for Access https://docs.microsoft.com/en-us/sql/ssma/access/installing-sql-server-migration-assistant-for-access-accesstosql link ที่ไมโครซอฟท์มีให้เพื่อแปลงข้อมูลไปยัง SQL Server ได้  แต่อาจมีเงื่อนไขบางอย่างที่ไม่สามารถแปลงได้ ดูได้จากหัวข้อ Incompatible Access Features (AccessToSQL)   ส่วนประเภทข้อมูลว่าแปลงไปแล้วกลายเป็นประเภทไหน ในหัวข้อ Project Settings (Type Mapping) (AccessToSQL)ก็มีบอกไว้ครับ

ส่วนเรื่องของตัวโปรแกรมฝั่ง Access เองก็อาจต้องมีการปรับแก้ ขึ้นอยู่กับต้องการให้เรียกใช้คุณสมบัติของ SQL Server มากน้อยแค่ไหน เช่น การล็อคอินเข้าไปยัง SQL Server, การกำหนดไม่ให้ ODBC หรือตัว SQL Server ตัดการติดต่อหรือยกเลิกงานเพราะ Timeout, การเรียกใช้ Stored Procedure (โค้ดที่เขียนบน SQL Server เอง) ฯลฯ
โพสต์นี้ได้รับคำขอบคุณจาก: สุภาพร

หน้า: 1 ... 18 19 20 [21]