55
ห้อง MS Access / : ทศนิยม
« เมื่อ: 21 ก.ค. 61 , 13:40:31 »
อาจเป็นเรื่องของการปัดเศษ ยังไงลองอ่านกระทู้นี้ดูครับ
กระทู้ปัดเศษ
กระทู้ปัดเศษ
โพสต์นี้ได้รับคำขอบคุณจาก: Xternity
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.
Function CheckFont(fontName As String, Optional fontSize As Integer) As Boolean
On Error Resume Next
With New StdFont
.Name = fontName
If fontSize > 0 Then .Size = fontSize
CheckFont = (StrComp(fontName, .Name, vbTextCompare) = 0)
fontName = .Name
fontSize = .Size
End With
End Function
<การใช้งาน> CheckFont(ชื่อฟอนต์, ขนาดฟอนต์ (กำหนดหรือไม่ก็ได้))Function ConcatRelated(expression$, domain$, criterial$)
Dim db As DAO.Database
Dim rs As Recordset
Dim SQLCmd As String
Dim ConCat As String
Set db = CurrentDb()
SQLCmd = "SELECT " & expression$ & " FROM " & domain$ & " WHERE " & criterial$
Set rs = db.OpenRecordset(SQLCmd)
If Not rs.EOF Then
rs.MoveFirst
End If
Do While Not rs.EOF
ConCat = ConCat & rs(0) & "-" ' เครื่องหมายคั่น
rs.MoveNext
Loop
If ConCat & "" <> "" Then
ConcatRelated = Left(ConCat, Len(ConCat) - 2)
End If
rs.Close: Set rs = Nothing: Set db = Nothing
End Function
SELECT DISTINCT Table.Job, ConcatRelated("[Name]","[Table]","[Job]='" & [Table].[Job] & "'") AS Name
FROM [Table];
อ.สันติสุข ช่วยขยายความได้ไหมครับ ที่ว่า "เมื่อมีการ Compact ฐานข้อมูลแล้ว ค่าของฟิลด์ Autonumber จะถูกจัดเรียงใหม่ให้ต่อเนื่องกันไปโดยไม่สนใจค่าเดิม" มันจะเกิดขึ้นกรณีไหนบ้างครับ นี่คือความรู้ใหม่ของผมเลยอะครับ เพราะเท่าที่ทราบ การ Compact จะทำให้ฟิลด์ AutoNumber รันลำดับใหม่แค่เรคคอร์ดสุดท้าย ให้ต่อเนื่องกันเท่านั้นเอง ไม่ได้ไปเรียงเรคคอร์ดใหม่ที่มีค่าอยู่แล้วหนิครับ แล้วในฐานข้อมูล Northwind ของทางไมโครซอฟเองก็ใช้ฟิลด์ AutoNumber ในการเชื่อมความสัมพันธ์กันแทบทุกตารางเลยครับ เลยอยากขอความเห็นของอาจารย์หน่อยครับ ว่ากรณีไหนบ้าง?
ปล. ขออภัยหากอ่านความหมายของ อาจารย์ผิดไปครับ
ใช่ครับ หมายถึงถ้ามีการลบกี่เรคอร์ดก็ตามที่มีค่า autonumber เรียงต่อเนื่องกันไปจนถึงเรคอร์ดที่มีค่า autonumber มากสุด หลัง compact ฐานข้อมูลหลักแล้ว (ฐานข้อมูลที่มีเทเบิลนั้นอยู่จริง ไม่ใช่ฐานข้อมูลที่เราสร้าง linked table) มันจะรันค่าของ autonumber ต่อจากค่าที่มากที่สุดใหม่อีกครั้ง ไม่ได้หมายถึงค่าเดิมที่บันทึกอยู่แล้วจะถูกสร้างใหม่ ทีนี้เนื่องจากการที่มันเป็นค่าที่ระบบสร้างขึ้นมาเอง เรคอร์ดที่สัมพันธ์กันจะเชื่อมั่นได้อย่างไรว่าจะอ้างกลับมายังเรคอร์ดเก่า (ที่ถูกลบไปแล้ว) หรือเรคอร์ดใหม่ที่มีเลข autonumber เดียวกับเรคอร์ดเก่า แต่ถ้าเราสร้างเลขเอง อันนี้เราเชื่อได้แน่ว่าเลขใหม่จะไม่ซ้ำกับเลขที่มีอยู่เดิม แต่ปัญหานี้ก็อาจหมดไป ถ้าเราระบุ Cascade delete record ให้กับความสัมพันธ์นั้นด้วยครับ