แสดงกระทู้

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 ... 6
1
ผมไม่แน่ใจเหมือนกันครับ ถ้าตารางใหม่ addnew ได้ปกติ
ข้อสันนิษฐาน
   1.การกำหนดประเภทของข้อมูลว่าเหมือนกันหรือไม่(ดูจากตารางใหม่ที่เพิ่งสร้างและเพิ่มได้)
      เพราะบางครั้งเกิดปัญหาการแปลงชนิดข้อมูลไม่ถูกต้องทำให้ไม่สามารถเพิ่มใหม่ได้
   2.ข้อมูลมี primary key แล้วหรือไม่
   3.เช็คการกำหนดค่าซ้ำ(ดูจากตัวที่เพิ่มได้ก็ได้ครัข)

รอน้าๆ ผู้ที่ใช้งาน SQL SERVER โดยตรงมาแชร์ประสบการณ์ตรงส่วนนี้
  :yuush:
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

2
โค๊ด Addnew
โค๊ด: [Select]
AddnewSQL = "INSERT INTO dbo_TestTP ( CardID, TPNo, TPIssueDate, TPExpireDate ) " _
& "SELECT dbo_TempImportTP.CardID, dbo_TempImportTP.TPNo, dbo_TempImportTP.TPIssueDate, dbo_TempImportTP.TPExpireDate " _
& "FROM dbo_TempImportTP WHERE (((dbo_TempImportTP.CardID) Not In (select CardID from [dbo_TestTP])));"

โค๊ด Update
โค๊ด: [Select]
UpdateSQL = "UPDATE dbo_TestTP INNER JOIN dbo_TempImportTP ON dbo_TestTP.CardID = " _
& "dbo_TempImportTP.CardID SET dbo_TestTP.TPNo = [dbo_TempImportTP].[TPNo], dbo_TestTP.TPIssueDate = " _
& "[dbo_TempImportTP].[TPIssueDate], dbo_TestTP.TPExpireDate = [dbo_TempImportTP].[TPExpireDate] " _
& "WHERE (((dbo_TestTP.TPNo)<>[dbo_TempImportTP].[TPNo]) AND ((dbo_TestTP.CardID)=[dbo_TempImportTP].[CardID])) " _
& "OR (((dbo_TestTP.TPIssueDate)<>[dbo_TempImportTP].[TPIssueDate])) OR (((dbo_TestTP.TPExpireDate)<>[dbo_TempImportTP].[TPExpireDate]));"

ปรับเป็นแบบนี้นะครับ เราจะไม่ใช้ And เราจะใช้ OR นะครับ
เช็คฟิลล์ TP7No เพื่อความถูกต้องนะครับว่าที่ถูกต้องคือ TP7No  หรือ TPNo
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

3
อ้างถึง
ชื่อนี้ค่ะ dbo_TempImport
เป็น Database ที่ลิงค์มาจาก SQL Server
หรือจะติดตรงนี้ค่ะ acSpreadsheetTypeExcel8 ต้องไปสร้างหรือกำหนด SpreadsheetType ที่ไหนคะ

ตาราง temp สร้างไว้ที่ front end ได้เลย ไว้วางข้อมูลชั่วคราวเท่านั้น
ไม่ต้องลิ้งมา

โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

4
Deletesql = "DELETE * FROM TempImport;"
ตารางชั่วคราวชื่ออะไรครับ
ตรงสีแดงใส่ชื่อตารางชั่วคราว
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

5
ตรง Tool >> Reference
เพิ่มตัว MS OFFICE XX Object libary ด้วยครับ ตามภาพ
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

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

ถ้าไม่เข้าใจตรงโค้ด 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
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

7
เรียนคุณ

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

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

ถ้าโอเคกับขั้นตอนที่ผมกล่าวมา เดี่ยวผมปรับโค๊ดให้ใหม่
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

8
Map Google Drive in Windows (ตัวอย่างเขาเพิ่มเป็นไดรฟ์ I)

หมายเหตุ ทุกเครื่องที่ลงโปรแกรมแล้วเชื่อมต่อจะเห็นข้อมูลใน Google Drive เหมือนทำ map network drive

โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

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

แนะนำขึ้นโพสใหม่เลยดีกว่าครับ
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

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

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

หรือลองลบรูปที่เป็นพื้นหลังออกไปก่อนครับ ว่าแสดงหรือไม่
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

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


โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

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

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

14
งานที่ทำเป็นการ Link Table MS SQL server มาหรือเปล่าครับ ถ้าใช่ลองสร้าง Query ใส่เงื่อนไขที่Field  [Dates] = = =Forms!frmSearchCertificate!txtApplyDate  แล้ว view ดูข้อมูลได้ไหมครับ
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

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

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

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

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


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

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

ลองรีเช็คเรืองฟอแมทวันที่ให้ตรงกันนะครับ
 
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

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