แสดงกระทู้

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

หน้า: 1 ... 13 14 15 [16] 17 18 19 ... 46
271
เหมือนต้องสร้างคิวรี่มา Format ก่อนเช่น
คิวรี่แรกชื่อ Qry_DBO_Panasonic
โค๊ด: [Select]
SELECT Format([Indate],"dd/mm/yyyy") AS SIndate, DBO_Panasonic.Quanlity
FROM DBO_Panasonic;

เนื่องจาก Now() จะรวมทั้งวันที่และเวลา ไว้ด้วยกัน แต่ Date() จะมีเฉพาะวันที่ปัจจุบัน
ถ้าจะเทียบกันต้องให้เหลือเฉพาะวันที่ ใน format แบบเดียวกัน

ที่นี้ก็ใช้ Dsum ได้แล้ว เช่น
=DSum("Quanlity","Qry_DBO_Panasonic","SinDate ='" & CStr(Format(Date(),"dd/mm/yyyy")) & "'")

272
ห้อง MS Access / : ค้นหาสินค้าไม่พบ
« เมื่อ: 14 ม.ค. 64 , 15:40:29 »
รหัสสินค้าเรามั่นใจไหมครับว่า ไม่มีช่องว่างระหว่างรหัสสินค้า สมมุติเครื่องหมาย _ แทนช่องว่างของรหัสช่องว่างนี้อาจจะเกิดจากการกด Back Space หรือเคาะคานเว้นวรรค ครับ
รหัสปกติ 1004000300800
เป็นไปได้ไหมบางครั้งรหัสอาจจะเป็น _1004000300800  หรือ 1004000300800_ หรือ _1004000300800_
ทำให้เวลาเปรียบเทียบรหัสในการค้นหาไม่เจอ
สามารถใช้ Trim() ในการตัดช่องว่าง

273
1.ลองกระชับฐานข้อมูลดูซักหน่อย (compact and repair)
2.เช็คการอ้างถึงคอนโทรลอื่นว่าถูกต้องหรือเปล่า (ลองนำการอ้างถึงมาดูหน่อยครับ)
  บางกรณี มีการใช้ชื่อ ฟิลล์กับชื่อคอนโทรลเหมือนกันเช่น
  ฟิลล์ชื่อ Status  คอนโทรลของฟิลล์ก็ชื่อ Status จึงควรเปลี่ยนเป็น txtStatus เพื่อไม่ให้เหมือนกันเป็นต้น
3.เช็คอ้างถึงฟังก์ชั่น(ถ้ามี) ว่าถูกต้องหรือเปล่า

274
แอด Email: มาคุยรายละเอียดกันครับ
pinnarong83@gmail.com

275
ใช้ IIF ในการเช็คเงื่อนไขครับเช่น
ที่ฟิลล์ที่ต้องการกรอง

S: IIf(IsNull([SOI]),Null,SOISORT([SOI]))

ถ้า SOI เป็นค่าว่าง ก็ให้ = Null
ถ้าไม่ว่างก็ให้ใช้การกรอง

SQL ของคิวรี่นั้นก็คือ
โค๊ด: [Select]
SELECT Mytable.ID, Mytable.SOI
FROM Mytable
ORDER BY IIf(IsNull([SOI]),Null,SOISORT([SOI]));

ถ้าไม่อยากนำ บุคคลไม่มีชื่อซอยมาแสดงก็ใส่ SQL ว่า
โค๊ด: [Select]
SELECT Mytable.ID, Mytable.SOI
FROM Mytable
WHERE ((Not (Mytable.SOI) Is Null))
ORDER BY IIf(IsNull([SOI]),Null,SOISORT([SOI]));

276
พรุ่งนี้นะครับ

277
OShiftID ในตาราง T_OT ชนิดข้อมูลเป็นแบบไหนครับ
ShiftID ในตาราง T_Shift ชนิดข้อมูลเป็นแบบไหน

สามารถ Remote ไปเช็คได้หรือไม่

278
RelationShip เช็คการกำหนด Primary Key
ข้อความแจ้งเตือนแบบนี้เกิดจาก การกำหนดความสัมพันธ์กันแล้ว ไม่ได้สร้างข้อมูลในฟิลล์ PK ให้ตารางหลักก่อน
เช่น เมื่อต้องการเพิ่มข้อมูลให้ ตารางที่ 2 ตารางแรกต้องมี ข้อมูลในฟิลล์ PK ด้วยเหมือนกันมันถึงจะยอมให้ผ่านได้


เช่น ท่านจะเพิ่มข้อมูลตารางที่ 2 ID ก็ต้องมีใน ตารางที่ 1 ด้วยครับ

1.เพื่อความชัดเจน ให้แสดงรูป การกำหนด Relationship มาดู
2.แสดงการกำหนด Record Source ในฟอร์มมาดู



279
ท่านอาจารย์ครับลองทำแล้วไปไม่รอด รบกวนขอตัวอย่างครับ

ลองดูตัวอย่างที่แนบมานะครับ สามารถนำไปใช้กับการเรียงลำดับที่มีตัวเลขผสมกับตัวอักษรได้หลากหลายครับ
ผมค้นหาข้อมูลจากเว็บ
เครดิต https://www.access-programmers.co.uk/


280
ขอบคุณครับ ที่ data type ทีแรกของผมเป็น Currency ครับ แต่พอเปลี่ยนเป็น Text แล้วก็ตรงกันครับขอบคุณนะครับ
ใช่ครับ ของผมเป็น text เหมือนกันครับ
แล้วในคิวรี่ผมใช้ val แปลงเป็นตัวเลขมาคำนวนก็ตรงกันแล้วครับ
และกำหนด Format เป็น หมายเลขทั่วไป

281


อ้างถึง
excel  จะได้ค่า stdev = 0.00057735
ใน excel ก็ได้เท่านี้ครับ
ใน access ได้เท่ากันครับ

โค้ดที่ทดสอบ ผมใช้ val ด้วย

SELECT StDev(Val([Numb])) AS StDev
FROM Mytable;

282
ในคิวรี่ คงต้องเขียนฟังชั่นนะครับ แล้วมาเรียกใช้ในคิวรี่แต่ผมไม่เคยลอง รออาจารย์ท่านอื่นๆ


แต่ถ้าการสร้างข้องมูลไปวางในตาราง อีกอันนั้นผมใช้แบบนี้ครับ
ตารางหลักชื่อ MyTable
มีฟิลล์ ID,ITEM (ตามตัวอย่าง)
--------------------------------------------------
มีตารางแสดงผลชื่อ TblResult
มีฟิลล์ ID,ITEM (ตามตัวอย่าง)
โค้ด

โค๊ด: [Select]
Private Sub concatenateString()
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim rstOut As DAO.Recordset
Dim strID As String
Dim strITEM As String
Set db = CurrentDb()
Set rst = db.OpenRecordset("SELECT Mytable.ID, Mytable.ITEM FROM Mytable GROUP BY Mytable.ID, Mytable.ITEM ORDER BY Mytable.ID, Mytable.ITEM DESC;", dbOpenDynaset)

If Not rst.BOF And Not rst.EOF Then
  rst.MoveFirst
  strID = rst!ID
  strITEM = rst!Item
 
  rst.MoveNext
   
  Do Until rst.EOF
    If strID = rst!ID Then
      strITEM = strITEM & ", " & rst!Item
    Else
    Set db = CurrentDb()
    Set rstOut = db.OpenRecordset("tblResult", dbOpenDynaset)
    rstOut.AddNew
    rstOut!ID = strID
    rstOut!Item = strITEM
    rstOut.Update
       
      strID = rst!ID
      strITEM = rst!Item
        rstOut.Close
        db.Close
    End If
    rst.MoveNext
  Loop
    Set db = CurrentDb()
    Set rstOut = db.OpenRecordset("tblResult", dbOpenDynaset)
    rstOut.AddNew
    rstOut!ID = strID
    rstOut!Item = strITEM
    rstOut.Update
      strID = rstOut!ID
      strITEM = rstOut!Item
    rstOut.Close
    db.Close
End If
Set rst = Nothing
Set db = Nothing
Set rstOut = Nothing
End Sub
ที่ปุ่มใส่โค้ดเพื่อเรียกใช้งาน

โค๊ด: [Select]
Private Sub Command0_Click()
concatenateString
End Sub


283
ส่งตัวปรับแก้ไปให้แล้วครับ ลองทดสอบดู

284
user: admin
pass: ptk6655143

ผมส่งตัวเต็มไปให้เลยนะครับ ช่วยดูให้หน่อย ตามลิ้งนะครับ
https://drive.google.com/file/d/1srkj2rqfmUi8Cq_AHl6ODjE2_qbSO3cQ/view?usp=sharing
เปิดสิทธิ์การเข้าถึง ให้ด้วยนะครับเมล







285
ทำตัวอย่าง ข้อมูลมาครับ เดี่ยวผมเช็คและบอกสาเหตุให้
ส่งมาทางกล่องข้อความได้เลย

มันอาจจะเป็นได้หลายอย่างเช่นการกำหนดใส่ชื่อ ฟิลล์หรือตาราง ผิด ก็ขึ้น error ครับ

286
ห้อง MS Access / : preview and new record
« เมื่อ: 07 ม.ค. 64 , 15:24:34 »
สอบถามผู้รู้ครับ
ผมต้องการสร้างปุ่ม preview และ Add NewRecord ในปุ่มเดียวต้องเขียน code อย่างไรครับ ?
ที่ปุมใส่ 2 โค้ดนี้เข้าไป
DoCmd.OpenReport "ชื่อReport", acViewPreview
Docmd.GoToRecord,,acNewRec

287
ทำได้ 2 แบบด้วยกัน
แบบที่ 1
สมมุติตารางชื่อ Mytable
Field ไอดี ชื่อ ID
Field วันที่ ชื่อ Mydate

คิวรี่กำหนดดังนี้
SELECT Mytable.ID, IIf(Month([Mydate])=Month(Date()) And Year(Date())=Year([Mydate]),1,0) AS CheckMonth
FROM Mytable;
กำหนดชื่อคิวรี่ชื่อ QryCheckMonth
คิวรี่ด้านบน ท่านจะได้ข้อมูล ที่ถ้าหากปีเป็นปีปัจจุบัน และเดือนเป็นเดือนปัจจุบัน จะมีค่าเท่ากับ 1 ส่วนเดือนอื่นๆ ปีอื่นๆจะเท่ากับ 0

ต่อไปเขียนโค้ดไว้เรียกใช้เงื่อนไขในการเช็ค
Private Sub CheckAllowEdits()
Dim MonthCheck As String
MonthCheck = DLookup("CheckMonth", "QryCheckMonth", "ID =" & Me.ID & "")
If MonthCheck = 0 Then
Me.AllowEdits = False
Me.Undo
Else
Me.AllowEdits = True
End If
End Sub

ต่อไปเวลาจะนำโค้ดไปใช้ ก็ใส่ CheckAllowEdits ได้เลยครับ
อาจจะใช้ในเงื่อนไข หลังจากการค้นหาข้อมูลมาแสดงที่ฟอร์ม แล้วเช็คระบบการแก้ไข
หรือ ใช้ในปุ่มแก้ไขข้อมูลได้เลย เมื่อ User กดถ้าเ็นเดือนอื่นๆ มันจะ Undo ข้อมูลกลับทันทีและจะไม่สามารถกดพิมพ์เพิ่มอีกได้


แบบที่ 2 สามารถใช้กับ Formแบบ  Continuous Form ได้ดี
สมมุติตารางชื่อ Mytable
Field ไอดี ชื่อ ID
Field วันที่ ชื่อ Mydate

คิวรี่ ที่จะเป็น Record Source โค้ดจะเป็น
SELECT IIf(Month([Mydate])=Month(Date()) And Year(Date())=Year([Mydate]),1,0) AS CheckMonth, *
FROM Mytable;

เวลาเรานำ ข้อมูลลงมาบน Control ก็นำ Field CheckMonth ลงมาด้วย ตั้งชื่อ textbox ว่า CheckMonth เลย
โดยเราจะสามารถ กำหนดให้ซ่อนไว้ก็ได้ครับ ไม่ต้องแสดง
ต่อไปเราจะสร้างเงื่อนไขในการ ปิดการแก้ไขข้อมูลโดยใช้การจัดรูปแบบตามเงื่อนไข


กำหนดนิพจน์ตามภาพ




วิธีนี้เวลาแสดงในฟอร์มแบบ Continuous Form
ถ้าrecord ไหน CheckMonth = 0 จะถูก Enabled = false ทันที
คือกดแก้ไขไม่ได้เลย ถ้า CheckMonth = 1 ก็จะแก้ไขได้ปกติ


288
ไม่รู้ว่าการแสดงข้อมูลเป็นแบบไหนนะครับ แต่ถ้าทำวิธีง่ายๆ คือสร้างคิวรี่ไว้ตรวจสอบ เพื่อใช้กับเงื่อนไขว่า เป็นข้อมูลของเดือนที่แล้วหรือไม่
ถ้าเป็นข้อมูลของเดือนที่แล้วก็ กำหนดให้Formให้ ห้ามแก้ไข = true ได้ครับ

สร้างตารางไว้ตรวจสอบนี้ มีเก็บ ID ของข้อมูลหลัก และ วันเดือนปี ของข้อมูลหลัก เพื่อนำมาเช็คเดือนว่าเป็นเดือนปัจจุบันหรือไม่

หน้า: 1 ... 13 14 15 [16] 17 18 19 ... 46