รบกวนทุกท่านเช็ค VBA DoCmd.RunSQL ให้ผมหน่อยครับ



0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

13 เม.ย. 63 , 00:08:59
อ่าน 403 ครั้ง

Tatchawin

สวัสดีครับ จะรบกวนทุกท่านเช็ค Code SQL ให้ผมหน่อยครับ ผมจะให้ INSERT เข้าไปที่ qryLean โดย SELECT ข้อมูลจาก qryHRDWH เมื่อ qryHRDWH.Selection = -1 แต่มันขึ้นว่า 'Run Time Error 3346': Number of query value and destination fields are not the same. ผมก็พยายามเชคว่ามันครบหรือเปล่า มันก็ครบนะครับ ก็เลยงงๆว่ามันผิดอะไรกันแน่ ยังไงช่วยแก้ให้ทีนะครับ

ขอบคุณครับ



Private Sub cmdRun_Click()
    Me.Requery
    If IsNull(Me.txtSCGEmployeeID) Then
        Me.txtSelection.Value = 0
    Else
        DoCmd.RunSQL "INSERT INTO qryLean([SCGEmployeeID],[NamePrefixThai],[FirstNameThai],[LastNameThai],[NamePrefixEng],[FirstNameEng],[LastNameEng]," & _
        "[NickName],[Position],[SubShift],[Shift],[SubSection],[Section],[SubDepartment],[Department],[SubDivision],[Division],[SubCompany],[Company],[Birthdate]," & _
        "[SCGHiringDate],[SystemDateTime],[ImagePath],[Selection])" & _
        "SELECT qryHRDWH.SCGEmployeeID, qryHRDWH.NamePrefixThai, qryHRDWH.FirstNameThai, qryHRDWH.LastNameThai, qryHRDWH.NamePrefixEng" _
        & "qryHRDWH.FirstNameEng, qryHRDWH.LastNameEng, qryHRDWH.NickName, qryHRDWH.Position, qryHRDWH.SubShift, qryHRDWH.Shift, qryHRDWH.SubSection" _
        & "qryHRDWH.Section, qryHRDWH.SubDepartment, qryHRDWH.Department, qryHRDWH.SubDivision, qryHRDWH.Division, qryHRDWH.SubCompany, qryHRDWH.Company" _
        & "qryHRDWH.Birthdate, qryHRDWH.SCGHiringDate, qryHRDWH.SystemDateTime, qryHRDWH.ImagePath, qryHRDWH.Selection" & _
        " FROM qryHRDWH Where qryHRDWH.Selection = -1"
       
'        DoCmd.RunSQL "Delete * from tblProductJan2020 where tblProductJan2020.Select=-1"
       
    End If
End Sub

 

13 เม.ย. 63 , 08:20:46
ตอบกลับ #1

PNR

: รบกวนทุกท่านเช็ค VBA DoCmd.RunSQL ให้ผมหน่อยครับ
« ตอบกลับ #1 เมื่อ: 13 เม.ย. 63 , 08:20:46 »
 DoCmd.RunSQL "INSERT INTO qryLean([SCGEmployeeID],[NamePrefixThai],[FirstNameThai],[LastNameThai],[NamePrefixEng],[FirstNameEng],[LastNameEng]," & _
        "[NickName],[Position],[SubShift],[Shift],[SubSection],[Section],[SubDepartment],[Department],[SubDivision],[Division],[SubCompany],[Company],[Birthdate]," & _
        "[SCGHiringDate],[SystemDateTime],[ImagePath],[Selection])" & _
        "SELECT qryHRDWH.SCGEmployeeID, qryHRDWH.NamePrefixThai, qryHRDWH.FirstNameThai, qryHRDWH.LastNameThai, qryHRDWH.NamePrefixEng" _
        & "qryHRDWH.FirstNameEng, qryHRDWH.LastNameEng, qryHRDWH.NickName, qryHRDWH.Position, qryHRDWH.SubShift, qryHRDWH.Shift, qryHRDWH.SubSection" _
        & "qryHRDWH.Section, qryHRDWH.SubDepartment, qryHRDWH.Department, qryHRDWH.SubDivision, qryHRDWH.Division, qryHRDWH.SubCompany, qryHRDWH.Company" _
        & "qryHRDWH.Birthdate, qryHRDWH.SCGHiringDate, qryHRDWH.SystemDateTime, qryHRDWH.ImagePath, qryHRDWH.Selection" & _
        "
FROM qryHRDWH Where qryHRDWH.Selection = -1"

ต่อประโยคผิดเปล่าครับ
มันต้อง ................" _
 แล้วก็ & "............."
หรือเปล่า
เรียนเพื่อนสมาชิกและอาจารย์ทุกท่าน
ผมไม่ใช่อาจารย์และไม่ใช่ผู้ที่แตกฉานใน Access นะครับ
แค่ผู้หนึ่งที่แชร์ความรู้เท่าที่มี ถ้าหากอาจารย์ทุกท่านเห็นว่ายังไม่ถูกต้อง
กรุณาโพสตอบกระทู้ส่วนเนื้อหาที่น่าจะถูกต้องกว่าให้ด้วยเพื่อเป็นวิทยาทาน
 
โพสต์นี้ได้รับคำขอบคุณจาก: Tatchawin

13 เม.ย. 63 , 09:55:21
ตอบกลับ #2

chai

: รบกวนทุกท่านเช็ค VBA DoCmd.RunSQL ให้ผมหน่อยครับ
« ตอบกลับ #2 เมื่อ: 13 เม.ย. 63 , 09:55:21 »
ต่อประโยคผิด คอมมา(,) ใส่ไม่ครบ

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

13 เม.ย. 63 , 09:57:39
ตอบกลับ #3

PNR

: รบกวนทุกท่านเช็ค VBA DoCmd.RunSQL ให้ผมหน่อยครับ
« ตอบกลับ #3 เมื่อ: 13 เม.ย. 63 , 09:57:39 »
ต่อประโยคผิด คอมมา(,) ใส่ไม่ครบ

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

13 เม.ย. 63 , 10:05:22
ตอบกลับ #4

chai

: รบกวนทุกท่านเช็ค VBA DoCmd.RunSQL ให้ผมหน่อยครับ
« ตอบกลับ #4 เมื่อ: 13 เม.ย. 63 , 10:05:22 »
ไม่เว้นวรรค เวลาต่อประโยคบางช่วง ทีเหลือให้ท่านอื่นคอมเมนต์ต่อครับ ยิ่งดูยิ่งผิดปกติ
« แก้ไขครั้งสุดท้าย: 13 เม.ย. 63 , 10:32:37 โดย chai »

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

13 เม.ย. 63 , 13:11:47
ตอบกลับ #5

Tatchawin

: รบกวนทุกท่านเช็ค VBA DoCmd.RunSQL ให้ผมหน่อยครับ
« ตอบกลับ #5 เมื่อ: 13 เม.ย. 63 , 13:11:47 »
ขอบคุณทุกท่านครับ เดี๋ยวผมไปแก้อีกที
ขอถามเพิ่มครับ ตรงบรรทัดนี้

    If IsNull(Me.txtSCGEmployeeID) Then
        Me.txtSelection.Value = 0


เนื่องจากปุ่มนี้อยู่ใน Subform ถ้าผมทำปุ่มไว้ข้างนอก Mainform ให้อ้างมาถึง Subform ได้
ผมจะเขียน Code เพื่ออ้างอิงมาที่ Subform นี้ได้อย่างไรครับ

ขอบคุณครับ

 

14 เม.ย. 63 , 14:35:47
ตอบกลับ #6

PNR

: รบกวนทุกท่านเช็ค VBA DoCmd.RunSQL ให้ผมหน่อยครับ
« ตอบกลับ #6 เมื่อ: 14 เม.ย. 63 , 14:35:47 »
ขอบคุณทุกท่านครับ เดี๋ยวผมไปแก้อีกที
ขอถามเพิ่มครับ ตรงบรรทัดนี้

    If IsNull(Me.txtSCGEmployeeID) Then
        Me.txtSelection.Value = 0


เนื่องจากปุ่มนี้อยู่ใน Subform ถ้าผมทำปุ่มไว้ข้างนอก Mainform ให้อ้างมาถึง Subform ได้
ผมจะเขียน Code เพื่ออ้างอิงมาที่ Subform นี้ได้อย่างไรครับ
ขอบคุณครับ

if IsNull(Me.txtSCGEmployeeID) Then
        Forms![ชื่อMainform]![ชื่อSubform].Form!txtSelectionValue = 0
end if
เรียนเพื่อนสมาชิกและอาจารย์ทุกท่าน
ผมไม่ใช่อาจารย์และไม่ใช่ผู้ที่แตกฉานใน Access นะครับ
แค่ผู้หนึ่งที่แชร์ความรู้เท่าที่มี ถ้าหากอาจารย์ทุกท่านเห็นว่ายังไม่ถูกต้อง
กรุณาโพสตอบกระทู้ส่วนเนื้อหาที่น่าจะถูกต้องกว่าให้ด้วยเพื่อเป็นวิทยาทาน
 
โพสต์นี้ได้รับคำขอบคุณจาก: Tatchawin

18 เม.ย. 63 , 12:02:32
ตอบกลับ #7

Tatchawin

: รบกวนทุกท่านเช็ค VBA DoCmd.RunSQL ให้ผมหน่อยครับ
« ตอบกลับ #7 เมื่อ: 18 เม.ย. 63 , 12:02:32 »
สอบถามเพิ่มอีกนิดนึงครับ
ตรง DoCmd.RunSQL "INSERT INTO table.... ถ้าผมต้องการทำ combo box รายชื่อตารางทั้งหมดขึ้นมาเพื่อให้ผู้ใช้เลือก Insert ข้อมูลลงตารางที่เลือก ผมควรจะเขียนโค้ดอย่างไรให้ Insert ลงตามตารางที่ผู้ใช้เลือกบน Combo box ครับ

ขอบคุณมากครับ

 

20 เม.ย. 63 , 08:34:40
ตอบกลับ #8

PNR

: รบกวนทุกท่านเช็ค VBA DoCmd.RunSQL ให้ผมหน่อยครับ
« ตอบกลับ #8 เมื่อ: 20 เม.ย. 63 , 08:34:40 »
แก้เป็นแบบนี้นะครับ

Private Sub Command6_Click()
Dim strTable, SQL As String
strTable = cbUpdateTable
SQL = "INSERT INTO " & strTable & " ( Field1, Field2, Field3 ) values (text1, text2, text3);"
DoCmd.SetWarnings False
DoCmd.RunSQL SQL
DoCmd.SetWarnings True
MsgBox "นำเข้าไปยังตาราง " & cbUpdateTable & " เรียบร้อยแล้ว"
End Sub


แก้ไขใหม่ครับ เขียนอ้างอิงต้องอ้างอิงจากtextbox บนฟอร์ม
« แก้ไขครั้งสุดท้าย: 20 เม.ย. 63 , 09:47:45 โดย PNR »
เรียนเพื่อนสมาชิกและอาจารย์ทุกท่าน
ผมไม่ใช่อาจารย์และไม่ใช่ผู้ที่แตกฉานใน Access นะครับ
แค่ผู้หนึ่งที่แชร์ความรู้เท่าที่มี ถ้าหากอาจารย์ทุกท่านเห็นว่ายังไม่ถูกต้อง
กรุณาโพสตอบกระทู้ส่วนเนื้อหาที่น่าจะถูกต้องกว่าให้ด้วยเพื่อเป็นวิทยาทาน
 
โพสต์นี้ได้รับคำขอบคุณจาก: Tatchawin

21 เม.ย. 63 , 13:50:38
ตอบกลับ #9

Tatchawin

: รบกวนทุกท่านเช็ค VBA DoCmd.RunSQL ให้ผมหน่อยครับ
« ตอบกลับ #9 เมื่อ: 21 เม.ย. 63 , 13:50:38 »
ขอบคุณมากครับ ทำได้แล้วครับ แต่ขอรบกวนอีกสักข้อได้ไหมครับ ผมพยายามแล้ว แต่งงมาก


จากภาพ ผมต้องการให้สามารถ Filter แบบ Multiple ได้หลายๆเดือน โดย filter ข้อมูลที่อยู่บน subform "frmqryHRDWH" ตามเดือน(SortMonthNum)โดยสั่งจาก Mainform ที่ชื่อ frmSelect ผมก็เขียนโค้ดได้ประมาณนี้

Private Sub cmdSearch2_Click()
    Call Search
End Sub
Sub Search()
Dim varItem As Variant
Dim strSearch As String
Dim Task As String

Me.FilterOn = True
For Each varItem In Me!lstMonthSort.ItemsSelected
    strSearch = strSearch & "," & Me!lstMonthSort.ItemData(varItem)
Next varItem
'MsgBox (strSearch)
If Len(strSearch) = 0 Then
    Task = "select * from qryHRDWH"
Else
    strSearch = Right(strSearch, Len(strSearch) - 1)
    'MsgBox (strSearch)
    Task = "select * from qryHRDWH where ([SortMonthNum] in (" & strSearch & "))"
End If
    DoCmd.ApplyFilter Task
End Sub

แต่สิ่งที่เกิดขึ้นคือ Error ตัวนี้ครับ


ผมคิดว่าน่าจะผิดตรง DoCmd.ApplyFilter Task น่าจะต้องอ้างอิงไปยัง Subform แต่ไม่รู้จะแก้ยังไง รบกวนช่วยแก้ทีนะครับ

รบกวนอีกครั้งครับ ขอบคุณมากครับ :D
« แก้ไขครั้งสุดท้าย: 21 เม.ย. 63 , 13:57:28 โดย Tatchawin »

 

21 เม.ย. 63 , 16:04:43
ตอบกลับ #10

PNR

: รบกวนทุกท่านเช็ค VBA DoCmd.RunSQL ให้ผมหน่อยครับ
« ตอบกลับ #10 เมื่อ: 21 เม.ย. 63 , 16:04:43 »
ลองดัดแปลงเป็นแบบนี้ดูครับ
จากตัวอย่าง Field SortMonthNum เป็น Number นะครับ

โค๊ด: [Select]
Sub Search()
Dim strSearch As String
For Each varItem In Me!lstMonthSort.ItemsSelected
strSearch = strSearch & " Or SortMonthNum=" & "" & Me!lstMonthSort.ItemData(varItem) & ""
Next varItem
If Len(strSearch) = 0 Then
Me.frmqryHRDWH.Form.FilterOn = False
Else

strSearch = Right(strSearch, Len(strSearch) - 3)
Me.frmqryHRDWH.Form.Filter = strSearch
Me.frmqryHRDWH.Form.FilterOn = True
End If
End Sub
เรียนเพื่อนสมาชิกและอาจารย์ทุกท่าน
ผมไม่ใช่อาจารย์และไม่ใช่ผู้ที่แตกฉานใน Access นะครับ
แค่ผู้หนึ่งที่แชร์ความรู้เท่าที่มี ถ้าหากอาจารย์ทุกท่านเห็นว่ายังไม่ถูกต้อง
กรุณาโพสตอบกระทู้ส่วนเนื้อหาที่น่าจะถูกต้องกว่าให้ด้วยเพื่อเป็นวิทยาทาน
 
โพสต์นี้ได้รับคำขอบคุณจาก: Tatchawin

21 เม.ย. 63 , 16:28:28
ตอบกลับ #11

Tatchawin

: รบกวนทุกท่านเช็ค VBA DoCmd.RunSQL ให้ผมหน่อยครับ
« ตอบกลับ #11 เมื่อ: 21 เม.ย. 63 , 16:28:28 »
ขอบคุณมากๆเลยครับ ทำได้แล้ว ผมลองแก้ไปแก้มาตะกี้ ก่อนโพสท่านสักแปป แบบนี้ก็ได้เหมือนกัน :D :)

Sub Search()
Dim varItem As Variant
Dim strSearch As String
Dim Task As String

Me.FilterOn = True
For Each varItem In Me!lstMonthSort.ItemsSelected
    strSearch = strSearch & "," & Me!lstMonthSort.ItemData(varItem)
Next varItem
'MsgBox (strSearch)
If Len(strSearch) = 0 Then
    Task = "select * from qryHRDWH"
    Forms!frmSelect!frmqryHRDWH.Form.RecordSource = Task
Else
    strSearch = Right(strSearch, Len(strSearch) - 1)
    'MsgBox (strSearch)
    Task = "select * from qryHRDWH where ([SortMonthNum] in (" & strSearch & "))"
    Forms!frmSelect!frmqryHRDWH.Form.RecordSource = Task
End If
End Sub

 


บอร์ดเรียนรู้ Access สำหรับคนไทย