แสดงกระทู้

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

หน้า: 1 2 [3] 4 5 6 ... 10
37
พอนำไปใช้กับไฟล์งานที่ทำ ติด error นี้ค่ะ

38
ลองดูตัวอย่างนี้นะครับ

ถ้าไม่เข้าใจตรงโค้ด AddnewSQL กับ UpdateSQL ให้ดูการกำหนดคิวรี่ที่ผมใส่ไว้ให้ด้วยนะครับ
ทั้ง 2 คิวรี่นั้นคือคิวรี่ที่นำไปใช้เขียนโค๊ด โดยมีการกำหนดเงื่อนไขไว้แล้ว คิวรี่ 2 อันนั้น สามารถลบทิ้งได้
เพราะผมสร้างไว้ให้ดูการกำหนดเงื่อนไขเฉยๆ
โดยเงื่อนไขการอัพเดทผมเช็คจาก Field PersonalName นะครับ ถ้าส่วนนี้ไม่เหมือนกันจะอัพเดทใหม่

ตัวอย่างโค๊ด
โค๊ด: [Select]
Private Sub Command0_Click()
'ตัวอย่างโค้ดการนำเข้าข้อมูลโดยมี Dialog ให้เลือกไฟล์เข้ามา
Dim dlg As FileDialog
Dim sql, Deletesql, AddnewSQL, UpdateSQL As String
Dim DB As DAO.Database
Dim DBaddnew As DAO.Database
Dim DBupdate As DAO.Database

Set DB = CurrentDb
Set DBaddnew = CurrentDb
Set DBupdate = 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
End If

'โค้ดสำหรับเพิ่มข้อมูลใหม่ที่ไม่เคยมีรหัสบัตรประชาชน
AddnewSQL = "INSERT INTO tblDataMain ( PersonalID, PersonalName ) " _
& "SELECT TempImport.PersonalID, TempImport.PersonalName " _
& "FROM TempImport WHERE (((TempImport.PersonalID) Not In (select personalID from [tblDataMain])));"

'โค้ดสำหรับอัพเดทข้อมูลใน Field PersonalName ที่มีรหัสบัตรประชาชนตรงกัน
UpdateSQL = "UPDATE tblDataMain INNER JOIN TempImport ON tblDataMain.PersonalID = " _
& "TempImport.PersonalID SET tblDataMain.PersonalName = [TempImport].[PersonalName] " _
& "WHERE (((tblDataMain.PersonalName)<>[TempImport].[PersonalName]) AND ((tblDataMain.PersonalID)=[TempImport].[PersonalID]));"

DBaddnew.Execute AddnewSQL
DBupdate.Execute UpdateSQL

MsgBox "อัพเดทจำนวน " & DBupdate.RecordsAffected & vbCrLf & "เพิ่มใหม่จำนวน " & DBaddnew.RecordsAffected, vbInformation, "Myprogram"
End Sub


ขอบคุณมากๆนะคะ เดี๋ยวจะลองนำไปปรับใช้กับงานจริงที่ทำค่ะ

39
เรียนคุณ

อ้างถึง
ยกตัวอย่าง นาย ก เลขบัตรประชาชน 1234567890123 ข้อมูลเก่า  กกกก อัพเดตใหม่เป็น กก77 ประมาณนี้นะคะ
ตารางชั่วคราวเราก็ควรมีไว้เหมือนเดิม เพื่อใช้ตารางนี้ในการตรวจสอบเงือนไขก่อนนำเข้าสู่ตารางหลักครับ

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

ถ้าโอเคกับขั้นตอนที่ผมกล่าวมา เดี่ยวผมปรับโค๊ดให้ใหม่


ใช่ค่ะแบบนี้เลยค่ะ รบกวนด้วยนะคะ ขอบคุณค่ะ

40
สอบถามการอัพโหลดไฟล์ 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

ใช้แค่ Table เดียวได้ไหมคะ ในการอัพโหลด ต้องการอัพโหลดข้อมูลเช่น เลขที่บัตรประชาชน ข้อมูลการเปลี่ยนแปลง ประมาณนี้นะคะ ยกตัวอย่าง นาย ก เลขบัตรประชาชน 1234567890123 ข้อมูลเก่า  กกกก อัพเดตใหม่เป็น กก77 ประมาณนี้นะคะ ถ้าเลขบัตรประชาชนไหนที่ไม่เคยมีการบันทึกก็ให้บันทึกเข้าไปเลย แต่ในกรณีเคยมีให้อัพเดตเฉพาะข้อมูลที่มีการแก้ไข รบกวนแนะนำด้วยนะคะ ขอบคุณค่ะ

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

42
รบกวนขอสอบถามการ Export file เป็น pdf ใน MS Access ไปไว้ใน Google Drive


จากตัวอย่างโปรแกรมที่แนบมาสามารถ Export file ไปเก็บไว้ใน drive ที่เรากำหนดได้แล้ว ถ้าต้องการให้ไปบันทึกใน Google Drive สามารถทำได้ไหมคะ รบกวนแนะนำด้วยค่ะ ขอบคุณค่ะ





43
อ้างถึง
ถ้าเราจะให้บันทึกลงใน google drive ตามลิงค์ที่เรามี สามารถทำได้ไหมคะ รบกวนแนะนำด้วยค่ะ ขอบคุณค่ะ

แนะนำขึ้นโพสใหม่เลยดีกว่าครับ

ได้ค่ะ ขอบคุณมากๆนะคะ

44
เหมือนมีรูปซ้อนกันสองรูปมีรูปที่เป็นพื้นหลัง 1 และรูปที่เป็นลายเซ็นต์ 1

ผมไม่เห็นภาพครับ อธิบายไม่ถูกเหมือนกัน
หรืออีกวิธีลองคลิกขวาที่รูป โดยที่รูปพื้นหลัง เลือก นำไปไว้ข้างหลังสุด
และ รูปลายเซ็นต์กดเลือกนำไปไว้ข้างหน้าสุด

หรือลองลบรูปที่เป็นพื้นหลังออกไปก่อนครับ ว่าแสดงหรือไม่

ทำได้แล้วค่ะ เป็นกับการเลือกรูปมาวางค่ะ ที่ไม่ได้เพราะวางเป็น ole เลยแก้มาเป็น image รูปแสดงแล้วค่ะ
ขออนุญาตถามอีกข้อนะคะ ถ้าเราจะให้บันทึกลงใน google drive ตามลิงค์ที่เรามี สามารถทำได้ไหมคะ รบกวนแนะนำด้วยค่ะ ขอบคุณค่ะ

45
ไม่น่าจะไม่แสดงนะครับ จากโค้ดถึงมีรูปในหน้ารายงานก็ต้องแสดงอยู่แล้วครับ
ลองเช็คความถูกต้องของการตั้งค่าการแสดงให้ดีๆครับผิดตรงไหนหรือเปล่า
การกำหนด ให้แสดงด้านหลังสุด หรือ ด้านหน้าสุดก็มีส่วนนะครับ
ลองดูหน้ารายงานในมุมมองเหมือนพิมพ์ ดูหรือลองปริ้นดู กด Ctrl + P ว่าตอนพิมพ์ออกมาลายเซ็นต์แสดงหรือไม่

รายงานในมุมมองเหมือนพิมพ์รูปลายเซ็นต์มาปรกติค่ะ แต่ตอนสั่งบันทึกเป็น pdf รูปไม่มา ต้องไปตั้งค่าการแสดงรูปตรงไหนคะ เหมือนมีรูปซ้อนกันสองรูปมีรูปที่เป็นพื้นหลัง 1 และรูปที่เป็นลายเซ็นต์ 1 รบกวนแนะนำด้วยค่ะ ขอบคุณค่ะ

46
ในคิวรี่ ฟอแมท ฟิลล์ TrainingEndDate ก่อนนะครับ
เอาโค้ดนี้ไปวางในฟิลล์นะครับ
Dates: Format([TrainingEndDate],'dd/mm/yyyy')



ทำได้แล้วค่ะ แต่ติดปัญหาตอนบันทึกไฟล์ออกมาเป็น pdf รูปลายเซ็นต์ที่ใส่ไว้ในหน้ารายงาน ไม่มาด้วยค่ะ ข้อมูลอื่นมาครบหมด รบกวนแนะนำด้วยค่ะ ขอบคุณค่ะ

47
ชื่อฟิลล์ผิดครับ
Dates คือฟิลล์  TrainingEndDate อันเดิมของคุณครับ
ที่ผมต้องเปลี่ยนชื่อเป็น Dates เพื่อทำการฟอแมทเป็น Dates: Format([TrainingEndDate],'dd/mm/yyyy')
ลองส่งรูปแสดงชื่อฟิลล์ในคิวรี่ มาดูหน่อย
และโค้ดที่ใส่ไว้ตอน OpenRecord ด้วยครับ

รูปแสดงชื่อฟิลล์ในคิวรี่ค่ะ


และโค้ด
Set rsGroup = CurrentDb.OpenRecordset("SELECT * FROM QueryForReportCertification where Cstr([Dates])='" & CStr(Forms!frmSearchCertificate!txtApplyDate) & "'")

48
ต้องฟอแมทวันที่ให้ตรงกันกับ textbox ที่ใช้ในการค้นหาก่อนครับ

ที่คิวรี่ปรับฟอแมทเป็นแบบนี้ดูครับ
Dates: Format([TrainingEndDate],'dd/mm/yyyy')

และที่ โค้ดใส่แบบนี้
Set rsGroup = CurrentDb.OpenRecordset("SELECT * FROM QueryForReportCertification where Cstr([Dates])='" & CStr(Forms!frmSearchCertificate!txtApplyDate) & "'")

และแก้ฟิลล์ที่ตัวรายงาน ที่เป็นฟิลล์ TrainingEndDate เป็น Dates ทั้งหมด


ถ้าไม่ได้ คงต้องรีโมทไปตรวจสอบให้แล้วละครับ
เพราะต้องเช็คข้อมูลวันที่ที่แสดงใน access ว่าเป็นแบบไหนจะได้ปรับให้เหมือนกัน

ลองแล้วติด error นี้ค่ะ


รบกวนให้คำแนะนำด้วยนะคะ ขอบคุณค่ะ

49
เป็นเพราะ Format วันที่ ไม่ตรงกันหรือเปล่าครับ
ขอดูฟอแมทวันที่จากฐาน SQL Server มาดูหน่อย
(ผมไม่ได้อยู่ตอบมาอีกทีวันจันทร์นะครับ ไปทริปตกปลาทะเล)

ลองรีเช็คเรืองฟอแมทวันที่ให้ตรงกันนะครับ

วันที่ใน database ค่ะ

50
อ้างถึง
ลองทำในตัวอย่างแล้วใช้ได้ เดี๋ยวจะลองนำไปใช้กับงานจริงดูค่ะ

ขอชื่นชมนะครับ มีการสร้างไฟล์ตัวอย่าง และรูปอธิบายแบบนี้
จะทำให้ผู้ตอบเข้าใจขั้นตอนที่ต้องการและ แก้ไขให้ได้อย่างรวดเร็วครับ
เสียเวลาสร้างนิดหน่อย แต่แก้ไขได้ง่ายกว่าครับ
 :miao: :miao:

ขอบคุณสำหรับคำชมค่ะ
ลองนำไปใช้กับของจริงที่ลิงค์จาก Database เป็น SQL Server พอกดปุ่ม Export to pdf ไปแล้ว โปรแกรมนิ่ง ไม่มีการ Export ไฟล์มาให้เลยค่ะ
รบกวนแนะนำด้วยค่ะ ขอบคุณค่ะ

ตัวอย่างโค้ดค่ะ

โค๊ด: [Select]
Private Sub cmdPDF_Click()
Dim rsGroup As DAO.Recordset
  Dim ColumnName As String, myPath As String

  myPath = "\\Servername\h\upload\"    '--------------อยู่บน Host ค่ะ
 
  Set rsGroup = CurrentDb.OpenRecordset("SELECT * FROM QueryForReportCertification where Cstr([dbo_ResultTraining.TrainingEndDate])='" & CStr(Forms!frmSearchCertificate!txtApplyDate) & "'")
 
  Do While Not rsGroup.EOF
  ColumnName = rsGroup!dbo_Reg.EmployeeCode
 
    DoCmd.OpenReport "ReportCertificationNew", acViewPreview, , "dbo_Reg.EmployeeCode='" & ColumnName & "'"
    DoCmd.OutputTo acOutputReport, "ReportCertificationNew", acFormatPDF, _
                            myPath & ColumnName & ".pdf", False
 
DoCmd.Close acReport, "ReportCertificationNew"

 rsGroup.MoveNext
 Loop

 rsGroup.Close
End Sub

51
ลองดูนะครับ
คุณต้องไปสร้าง Floder ชื่อ upload ไว้ Drive C: ก่อนเน้อ
อัพเดทโค้ดให้ใหม่นะครับ ไม่ต้องสร้าง Table เพิ่มและ ลบ Criteria ใน Query ออกไป

โค้ด
โค๊ด: [Select]
Private Sub Command8_Click()
    Dim rsGroup As DAO.Recordset
    Dim ColumnName As String, myPath As String

  myPath = "C:\upload\"
 

  Set rsGroup = CurrentDb.OpenRecordset("SELECT * FROM QueryForReportCertification where Cstr([TrainingEndDate])='" & CStr(Forms!frmSearchCertificate!txtApplyDate) & "'") 
  Do While Not rsGroup.EOF
  ColumnName = rsGroup!EmployeeCode 
    DoCmd.OpenReport "ReportCertificationNew", acViewPreview, , "EmployeeCode='" & ColumnName & "'"
    DoCmd.OutputTo acOutputReport, "ReportCertificationNew", acFormatPDF, _
                            myPath & ColumnName & ".pdf", False 
DoCmd.Close acReport, "ReportCertificationNew"
 rsGroup.MoveNext
 Loop
 rsGroup.Close
End Sub


ขอบคุณมากๆนะคะ ลองทำในตัวอย่างแล้วใช้ได้ เดี๋ยวจะลองนำไปใช้กับงานจริงดูค่ะ

52
รบกวนขอสอบถามการ Export file จาก Report เพื่อ Save file เป็น pdf ตามข้อมูลแต่ละหน้าค่ะ คืออยากจะกด Export to pdf แล้วให้บันทึกข้อมูลไฟล์ตามรหัสพนักงานค่ะ เช่น 11111.pdf, 11112.pdf ตามข้อมูลที่เราดึงมาทั้งหมดค่ะ ปรกติจะเซฟเป็น pdf โดยรวมข้อมูลให้ทั้งหมด แต่อยากให้ save ไฟล์เป็น pdf ตามรหัสพนักงานค่ะ เช่นมี 10 คน ก็ให้ save ทีละไฟล์ รบกวนแนะนำวิธีการด้วยค่ะ พร้อมกันนี้ได้แนบไฟล์ตัวอย่างโปรแกรมที่ได้ทำมาด้วย

ขอบคุณค่ะ








53
แก้ไขปัญหาภาษาไทยได้แล้วค่ะ ตามที่แนะนำ ขอบคุณมากๆนะคะ


เหลือตรงอัพโหลดข้อมูลในกรณีข้อมูลซ้ำ ต้องการให้อัพเดตเฉพาะข้อมูลที่มีการเปลี่ยนแปลง เช่น รหัสบัตรประชาชน 1234567890123 เคยอัพโหลดอยู่แล้ว ถ้ามีการอัพโหลดรหัสนี้เข้าไปอีกที ถ้าข้อมูลมีอยู่แล้ว ไม่ต้องอัพโหลด แต่ถ้ามีการเปลี่ยนแปลงข้อมูลอื่น ให้อัพแต่ข้อมูลที่มีการเปลี่ยนแปลงเข้าไป รบกวนแนะนำด้วยค่ะ ขอบคุณค่ะ

54
อัพโหลดข้อมูลไฟล์ csv ข้อมูลที่เป็นภาษาไทย แสดงข้อมูลเพี้ยนค่ะ รบกวนแนะนำด้วยค่ะ ตามรูป


และอยากตรวจสอบข้อมูลอัพโหลดจากฟิลด์ CardID ด้วยค่ะ ไม่ให้มีการอัพโหลดซ้ำซ้อน แต่ถ้ามีการเปลี่ยนแปลงให้อัพแต่ข้อมูลที่มีการเปลี่ยนแปลง แต่ยึดที่ CardID พร้อมกันนี้ได้แนบไฟล์โปรแกรมและไฟล์ csv ที่ใช้ทดสอบมาด้วยค่ะ รบกวนแนะนำด้วยนะคะ
ขอบคุณค่ะ

หน้า: 1 2 [3] 4 5 6 ... 10