19
ห้อง MS Access / : Auto number ไม่ทำงานบน Form
« เมื่อ: 14 พ.ค. 64 , 22:34:04 »กดเลื่อนไป New Record ยังครับ เครื่องหมาย |> ด้านล่างฟอร์มกดแล้วค่ะก็ยังเป็นเลขเดิม
โพสต์นี้ได้รับคำขอบคุณจาก: sjs
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.
กดเลื่อนไป New Record ยังครับ เครื่องหมาย |> ด้านล่างฟอร์มกดแล้วค่ะก็ยังเป็นเลขเดิม
สอบถามการอัพโหลดไฟล์ Excel ใน MS Access ค่ะ อยากจะ อัพโหลดไฟล์ ได้โดยให้มีการตรวจสอบจากเลขที่บัตรประชาชน โดยเช็คว่า ถ้ามีข้อมูลที่เคยอัพโหลดอยู่แล้ว ให้อัพโหลดเฉพาะข้อมูลที่มีการเปลี่ยนแปลง ข้อมูลไหนไม่มีก็อัพโหลดเข้าตามปรกติ รบกวนแนะนำด้วยนะคะ ขอบคุณค่ะ
ถ้าทำแบบง่ายก็คือ
1.ให้นำเข้าข้อมูลตามบัตรประชาชนทั้งหมดเข้ามาก่อนไปยังตารางสำรอง สมมุติชื่อว่า TempImport นะครับ
2.ใช้การสร้างคิวรี่ โดยกำหนดให้เลือกเอาเฉพาะ รหัสที่ไม่มีในตารางหลัก สมมุติชื่อว่า tblDataMain นะครับ
3.มี Field เก็บเลขบัตรประชาชนชื่อเดียวกันคือ PersonalID
ผมสมมุติมีปุ่มที่ใช้สำหรับนำเข้า 1 ปุ่ม และให้แก้ไขชื่อตารางทั้งสองตามสีแดงที่ผมใส่ไว้ให้ตรงด้วยนะครับ
Private Sub Command0_Click()
'ตัวอย่างโค้ดการนำเข้าข้อมูลโดยมี Dialog ให้เลือกไฟล์เข้ามา
Dim dlg As FileDialog
Dim sql, Deletesql As String
Dim DB As DAO.Database
Set DB = CurrentDb
If MsgBox("คุณต้องการนำเข้าข้อมูลใหม่หรือไม่", vbQuestion + vbYesNo, "ระบบสอบถาม") = vbYes Then
Set dlg = Application.FileDialog(msoFileDialogFilePicker)
With dlg
.Title = "Select the Excel file to import"
.AllowMultiSelect = False
.Filters.Clear
.Filters.Add "Excel Files", "*.xls*", 1
.Filters.Add "All Files", "*.*", 2
If .Show = -1 Then
StrFileName = .SelectedItems(1)
Deletesql = "DELETE * FROM TempImport;" 'สั่งให้ลบข้อมูลของตารางสำรองให้หมดก่อนเพื่อรอรับข้อมูลนำเข้าใหม่ที่จะเข้ามา
DB.Execute Deletesql
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, "TempImport", StrFileName, True 'นำเข้าไปยังตารางชื่อ TempImport
Else
Exit Sub
End If
End With
'หลังจากนำเข้ามาเสร็จให้ทำการ Append ข้อมูลที่ รหัสประจำตัวประชาชนไม่ซ้ำกัน ไปยังตารางหลักของเรา
sql = "INSERT INTO tblDataMain SELECT * FROM TempImport WHERE (((TempImport.PersonalID) Not In (select [PersonalID] from [tblDataMain])));"
DB.Execute sql
If DB.RecordsAffected <= 0 Then
MsgBox "ไม่มีข้อมูลที่นำเข้า."
Else
MsgBox "นำเข้าจำนวน " & DB.RecordsAffected & " เรคคอร์ด", vbInformation, "Myprogram"
End If
Set DB = Nothing
End If
End Sub
Option Compare Database
Private Sub SLBoss1_Click()
Call unOption
Me.SLBoss1 = True
Me.Image11.Picture = CurrentProject.Path & "\Pics\" & "card_30021.jpg"
End Sub
Private Sub SLBoss2_Click()
Call unOption
Me.SLBoss2 = True
Me.Image11.Picture = CurrentProject.Path & "\Pics\" & "card_30017.jpg"
End Sub
Private Sub SLBoss3_Click()
Call unOption
Me.SLBoss3 = True
Me.Image11.Picture = CurrentProject.Path & "\Pics\" & "card_30015.jpg"
End Sub
Private Sub SLBoss4_Click()
Call unOption
Me.SLBoss4 = True
Me.Image11.Picture = CurrentProject.Path & "\Pics\" & "card_30011.jpg"
End Sub
Private Sub SLBoss5_Click()
Call unOption
Me.SLBoss5 = True
Me.Image11.Picture = CurrentProject.Path & "\Pics\" & "card_30006.jpg"
End Sub
Sub unOption()
'ชุดคำสั่งเพี่อให้ตัวเลือกทั้งหมดถูกยกเลิก
Dim ctl As Control
For Each ctl In Me.Controls
Select Case ctl.ControlType
Case acOptionGroup, acOptionButton
ctl.Value = Null
Case acCheckBox
ctl.Value = False
End Select
Next
Set ctl = Nothing
End Sub
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
ที่ปุ่มใส่โค้ดเพื่อเรียกใช้งานPrivate Sub Command0_Click()
concatenateString
End Sub
Sub FieldNames()
Dim rst, rstOut, strTable As Recordset
Dim f As Field
Dim SQL, RecordName As String
Set rst = CurrentDb.OpenRecordset("tbTarang1")
Set rstOut = CurrentDb.OpenRecordset("tbfild1")
rst.MoveFirst
Do Until rst.EOF
RecordName = rst!fname
Set strTable = CurrentDb.OpenRecordset(RecordName)
For Each f In strTable.Fields
rstOut.AddNew
rstOut![tarang] = RecordName
rstOut![fild] = f.Name
rstOut.Update
Next
rst.MoveNext
Loop
rst.Close: Set rst = Nothing
rstOut.Close: Set rstOut = Nothing
strTable.Close: Set strTable = Nothing
End Sub
ผมพิมพ์คำว่า เอนก Access มันแก้ไขให้เอง เป็น อเนก
ปกติก็ไปแก้ที่การตั้งค่า แต่พอเป็น Access คั้งแต่ 2010 ขึ้นไป แก้ที่ตรงไหนครับ
ผมลองไปที่ ตั้งค่า > ฐานข้อมูลปัจจุบัน > ตัวเลือกการแก้ไขชื่อัตโนมัติ คลิกที่กล่องคำสั่งออก
แล้วปิดโปรแกรม เปิดใหม่ แต่มันไม่หายครับ ใครรู้ช่วยหน่อยครับ