แสดงกระทู้

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
55
ห้อง MS Access / : Export ข้อมูลจาก MS Access
« เมื่อ: 08 มิ.ย. 63 , 11:07:15 »
Short Text กับ nvarchar(255) ไม่น่าจะเป็นปัญหาครับ เพราะ nvarchar(255) จะเก็บตัวอักษรได้**อาจจะ**น้อยกว่า 255  แต่ให้ไปดูว่าใน Specification นั้น เอาฟิลด์นี้ออกมากี่ตัวอักษรมากกว่า
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

56
ห้อง MS Access / : Export ข้อมูลจาก MS Access
« เมื่อ: 05 มิ.ย. 63 , 22:39:30 »
- ตรวจการกำหนดประเภทข้อมูลและความยาวของฟิลด์ข้อมูลที่เราตั้งเอาไว้ใน "QueryExportToSQLSERVER Export Specification" เพราะเมื่อเปลี่ยนฐานข้อมูลจาก Access ไปเป็นตัวอื่น สิ่งต่างๆข้างต้นอาจแตกต่างไป

- เปลี่ยนจาก
Const myPath As String = "C:\Exportfile\Test.csv"
ไปเป็น
Dim myPath As String
myPath = "C:\Exportfile\Test" & txtDivision & txtLoacation & ".csv"
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

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


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

58
ไม่ได้ครับ ต้องรันบน Full Version หรือ Runtime Version เท่านั้นครับ
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

59
งั้นก็ไม่เกี่ยวกับ Access แล้วมั้งครับ  ถ้าเกี่ยวกับ DLL จริงตามข้อความใน Error   คุณไปเช็คในโปรแกรมว่าเรียกใช้ DLL ตัวไหนบ้าง เครื่องนั้นอาจไม่ได้มี DLL ตัวนั้นครับ
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

60
ให้ทำการ Compile โค้ดถ้ายังไม่ได้ทำ  Access อาจจะแสดง error ที่แฝงอยู่  ถ้าไม่มี error แล้ว ต่อไปก็ให้เช็คดูที่ Before Update property ของฟอร์มหรือคอนโทรลตัวไหนสักอัน โดยเฉพาะฟอร์มหรือคอนโทรลที่ทำงานเป็นตัวแรกๆเมื่อเริ่มโปรแกรม ให้ดูว่าเรียกแมคโครผิด หรือใส่อะไรผิดหรือไม่ หรือโค้ดภายในของ Before Update event นั้นมีอะไรที่เกี่ยวกับ DLL หรือไม่ และ DLL นั้นทำงานได้จริงหรือเปล่า Declare DLL แบบ 32 หรือ 64 bit ตามรุ่นของ Runtime Access ที่ใช้หรือไม่
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

61
มาช้าไป เล่าให้ฟังแล้วกันนะครับ
ผมเพิ่งย้ายจาก ms access ไปใช้ sql server ใช้อยู่ซักพัก แล้วเปลี่ยนไปใช้ mysql เมื่อไม่นานมานี้ เพราะ online สะดวกกว่า ผมพบว่า sql server ค่อนข้างหนัก และช้า ขนาดผ่าน lan ยังช้ากว่า mysql ที่ออนไลน์

จากที่ได้ลองใช้ sql server อยู่ซักพัก
ต้องระวังคือ ทุกตารางต้องมี pk หลังจากการ export ไป sqlserver pk จะหาย
ชนิดข้อมูลก็จะถูกแปลง ซึ่งบางชนิดมันไม่ตรงกับที่เราต้องการ ต้องตรวจสอบและเปลี่ยนใหม่ เช่นพวก autonumber / yesno / currency
- join ต้องเป็นชนิดข้อมูลเดียวกัน ตัวเลขก็ต้องตัวเลข (ควรใช้เป็นตัวเลข เป็น text ไม่แนะนำ)
- type mismatch ส่วนใหญ่คือ ชนิดข้อมูลไม่ตรงกัน
- การดึงข้อมูลมาแสดง ต้องดึง pk มาด้วยเสมอ
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

62
อันนี้ต้องขอความรู้จากอาจารย์สันติสุข
แต่ถ้าได้แล้วก็ดีเลยครับ
 :shout: :shout:
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

63
พอดีผมไม่มี SQL เทสที่เครื่อง แต่ถ้าเราใช้การแปลง เป็น Cstr ในกรณีเป็นข้อความ หรือพวก Cint  กรณีเป็นตัวเลข ก่อนนำไป Join กันว่าจะช่วยได้ไหม เช่น

โค๊ด: [Select]
SELECT Employee.ID, Employee.EmployeeCode, Employee.EmployeeName, CStr([EmployeeDivision]) AS EmployeeDivision1, CStr([EmployeeLocation]) AS EmployeeLocation1 FROM Employee WHERE (((CStr([EmployeeDivision]))=[forms]![Form1]![comboDivision]) AND ((CStr([EmployeeLocation]))=[forms]![Form1]![comboLocation]));
โดยในซัพฟอร์ม ตรงControlSource ใส่ EmployeeLocation1 กับ EmployeeDivision1 แทน
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

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

65
ลองดูครับแก้การ Join เป็น text แล้ว
ส่วนที่ต้องแก้คือ จำนวนคอลัมน์  ของ  comboDivision และ comboLocation จาก 2 แก้เป็น 1
ความกว้างคอลัมน์ จาก 0ซม.;5ซม. แก้เป็น 5ซม.



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

66
อ่อ เป็น varchar หรือครับที่มันไม่ยอมแสดงเพราะ Join Table Field number กับ text มันเลยไม่แสดง
เดี่ยวพรุ่งนี้ผมแก้ตัวอย่างให้นะ
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

67
ขนาดที่ใหญ่ขึ้นทุกครั้งที่มีการแก้ไข ไม่ได้เกี่ยวอะไรกับการทำ Linked-Table ครับ แต่เพราะ Access ไม่ได้เคลียร์พื้นที่ของเก่าของส่วนต่างๆ(ฟอร์ม,รายงาน,...)คืนให้ OS  ถ้าทำอัตโนมัติ(ซึ่งก็ทำได้)อาจจะเสียเวลาทุกครั้งที่ปิดไฟล์ เราสั่งให้ Access กระชับขนาดไฟล์ได้ด้วยปุ่ม Compact and Repair ครับ  ส่วนทำอัตโนมัติ ให้คลิกเลือก Compact on Close ใน Access Option  แต่จากขนาดไฟล์ที่แสดงมาให้ดู ถือว่าเล็กมากๆนะครับ

สำหรับการเปิดไฟล์โดยไม่ใช้ Linked-Table ก็ทำได้โดยใช้ ADO object model (ตัวนี้ผมไม่ได้ใช้)  แทนการใช้ DAO object model ที่ใช้เป็นส่วนใหญ่ใน Access  แต่ทำไปทำไมครับ มีเหตุผลไหม
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

68
ห้อง MS Access / : Error : Could not delete from specified tables
« เมื่อ: 16 เม.ย. 63 , 18:54:02 »
ตอนทำ Linked Table เข้ามาใน Access เขาจะถามหา Primary Key ของแต่ละเทเบิล ซึ่งก็กำหนดให้เหมือนกับ Primary Key ของเทเบิลนั้นๆที่อยู่ใน MySQL ตรงนี้ไม่ทราบได้กำหนดไว้หรือไม่
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

69
ห้อง MS Access / : Error : Could not delete from specified tables
« เมื่อ: 16 เม.ย. 63 , 12:27:57 »
ลองเปลี่ยนเป็น .... modifieddate = #"  & format$(now(), "dd/mmm/yyyy hh:mm:ss") & "# " & _
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

70
ห้อง MS Access / : การสร้างหน้า Login ใน MS Access
« เมื่อ: 15 เม.ย. 63 , 15:33:52 »
ปรับใหม่ให้แบบนี้นะครับ ใช้การสร้าง Combobox แล้วกำหนดให้แสดงรายการแทน PK
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

71
ห้อง MS Access / : การสร้างหน้า Login ใน MS Access
« เมื่อ: 15 เม.ย. 63 , 09:00:07 »
ตรง Subform ใส่โค้ดนี้ที่ RecordSource ตามนี้ครับ
โค๊ด: [Select]
SELECT Employee.ID, Employee.EmployeeCode, Employee.EmployeeName, Employee.EmployeeDivision, Employee.EmployeeLocation FROM Employee WHERE (((Employee.EmployeeDivision)=forms!form1!comboDivision) And ((Employee.EmployeeLocation)=forms!form1!comboLocation));
โพสต์นี้ได้รับคำขอบคุณจาก: mtaccess

72
ห้อง MS Access / : การสร้างหน้า Login ใน MS Access
« เมื่อ: 14 เม.ย. 63 , 14:56:55 »
จากตัวอย่างที่ผมทำให้ดูทำได้หรือไม่ครับ ?
ถ้าส่วนอื่นๆ ผมไม่เห็นขั้นตอนการกำหนดค่า
คงต้อง Remote ไปดูครับ
ใช้ Anydesk ครับ
ส่งมาทางข้อความได้เลยครับ

ทำได้แล้วค่ะ ลองไป Copy code จากตัวอย่างที่ส่งมาแล้วไปแก้ไข สามารถใช้ได้แล้วค่ะ ขอบคุณมากๆนะคะ

สาเหตุที่เกิด ERROR นั้นเพราะ มีการใช้คำสั่ง Docmd.close เพื่อปิดฟอร์ม หน้าจอล๊อกอิน ครับ
ต่อมาพอเราต้องการอ้างอิง ข้อมูลจาก textbox หรือ combobox ของฟอร์มล๊อกอิน ก็ไม่สามารถทำได้แล้วเพราะเราสั่งปิดฟอร์มไปแล้วครับ

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

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