แสดงกระทู้

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 ... 16 17 18 [19]
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  have
โพสต์นี้ได้รับคำขอบคุณจาก: PookPuy, Xternity

329
https://www.overclockzone.com/news/10009
โพสต์นี้ได้รับคำขอบคุณจาก: 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 ที่ไมโครซอฟท์มีให้เพื่อแปลงข้อมูลไปยัง 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 ... 16 17 18 [19]