สวัสดีครับ คือว่าตอนนี้ผมกำลังทำแอพตัวนึงซึ่งใช้ในบริษัท (เป็นบริษัทจำลองของมหาวิทยาลัย ให้นิสิตได้ลองรันบริษัทดู)
โดยแอพให้แต่ละฝ่ายใช้ออกเอกสารต่างๆ เช่น ใบสั่งขาย ใบสั่งซื้อ ใบแจ้งหนี้ ฯลฯ โดยใชัภาษา VB.NET และเก็บข้อมูลด้วย SQL Server ครับ
ในการทำแอพเท่าที่ศึกษาจากในเน็ต เห็นว่าการเปลี่ยนไปใช้แต่ละหน้าของโปรแกรมมี 2 แบบคือ สร้างฟอร์มใหม่ หรือ สร้าง User Control แล้วเพิ่มลงใน Form ซึ่งสงสัยว่าจริงๆแล้วควรเป็นแบบไหน แต่ละแบบมีข้อดีข้อเสียอย่างไรครับ
การเก็บข้อมูลด้วย SQL มีการเก็บข้อมูลวันที่ครับ โดยเก็บในรูป ปีค.ศ. - เดือน - วัน เช่น 2019-05-30 แต่เวลาแก้ไขหรือเพิ่มข้อมูลบางทีมันจะชอบขึ้นเป็น 1476-05-30 แทน โดยปีจะ -543 ครับทั้งที่ผมใส่เป็น ค.ศ. อยู่แล้ว เลยสงสัยว่าต้องมีตั้งค่าตรงไหนยังไงรึเปล่าครับ เพราะเท่าที่เสิร์ชไม่เจอวิธีแก้เลย
ขอบคุณครับ
User กรอกข้อมูลเป็น คศ.
ปกติเวลากรอกจะให้ใช้ DateTimePicker ใน VB.NET อยู่แล้วครับ แล้ว insert เข้า database เป็น ค.ศ. ครับ แต่พอมีการแก้ไขเมื่อไหร่ หลังจาก save มันจะเปลี่ยนเป็นปี 1976 เองตลอดเลยครับ
.NET โดยปกติถ้าคุณใช้
คุณจะไม่มีปัญหาเรื่องของวันที่เลยครับ ถึงเครื่องคอมจะตั้งค่าเป็น พ.ศ. หรือ DateFormat หลายรูปแบบก็ตาม
ปกติใช้ DateTimePicker ครับ แต่บางทีมีต้องแก้ไขข้อมูลใน DB ก็จะใช้ Microsoft SQL Server Studio แล้วใช้ edit เอาอะครับ แต่พอดี edit เสร็จสมมติกรอกเป็น 2019-03-10 พอกด enter มันจะขึ้นเป็น 1476-03-10 เฉยเลยอะครับ
ลองแก้ Collation เป็น SQL_Latin1_General_CP1_CI_AS ครับ แล้วปรับ Windows regional setting เป็น EN-US และอาจจะปรับ dateformat เป็น yyyy-mm-dd ก็ได้(ไม่บังคับ)
CALENDAR เป็นอะไรครับ
edit: ผมไม่รู้ว่า Microsoft SQL มี NLS_CALENDAR แบบ Oracle หรือเปล่าครับ ถ้ามีต้องเปลี่ยนดู
หรือถ้าไม่มี ลองเช็คว่า Windows ของตัว server เซ็ตค่า regional แบบไหนครับ
Russia is just nazi who accuse the others for being nazi.
someone once said : ผมก็ด่าของผมอยู่นะ :)
ที่ผมเคยทำ ผมใช้ User Control น่ะ เพราะถ้าสร้าง form ใหม่ จะชอบมีปัญหาเวลาใช้งานน่ะคร้บ
ส่วนวันที่ถ้าจำไม่ผิด เครื่องตั้งค่าวันที่เป็น ไทย แล้วเครื่องที่ทำการเก็บ DB เก็บเป็น ค.ศ. หรือเปล่า ของผมจะใช้วิธีตรวจสอบถ้าปี เกิน 2500 ก่อน save จะแปลงค่าวันที่ให้ตรงกับ format ของเครื่องน่ะครับ ถ้าเอาสะดวกแนะนำ ตั้งเวลาเครื่องให้เป็นปี ค.ศ. จะง่ายกว่าครับ
ตั้งแต่หลุดจาก vb6 มาจนถึง .net ผมใช้
System.Globalization
System.Threading
ไม่เคยมีปัญหาเรื่องวันที่เลยไม่ต้องอิง OS เหมือน vb6 เลย
format มาตรฐาน DB มันจะเป็น คศ. yyyy-mm-dd ทั้งหมด
เปลี่ยน currentthred สลับไปสลับมาไม่เคยเจอปัญหาอะไร debug ดูซักรอบว่า thread en-US หรือ th-TH
ออกมารูปแบบไหนได้ผลลัทธ์มาก็จัดรูปแบบส่งเข้า DB จบ