HoangManh > 13-04-17, 12:03 PM
HoangManh > 13-04-17, 12:05 PM
Private Sub cmdSearch_Click()
Dim lRs As New ADODB.Recordset
Dim lCommand As New ADODB.Command 'コマンドオブジェクト
Dim lsSql As String
DoCmd.RunSQL "DELETE FROM WK_M_HANBAITNK1;"
If fgNullToStr(Me.cboGroupCdS) = vbNullString Then
MsgBox "グループが入力されていません。社員CDを入力して下さい。", vbOKOnly + vbCritical, Me.Caption
Me.cboGroupCdS.SetFocus
Exit Sub
End If
lsSql = "SELECT PKEY, KYOTSUFLG, SYOHINCD, SYOHINNM, SYOHINKANA, TANNI, TNK, GROUPCD, GROUPNM, TEKIYODTST, TEKIYODTED FROM M_HANBAITNK WHERE GROUPCD = ?"
lCommand.ActiveConnection = adoCon
lCommand.CommandText = lsSql
lCommand.Parameters.Append lCommand.CreateParameter("GROUPCD", adVariant, adParamInput)
lCommand.Parameters("GROUPCD").Value = Me.cboGroupCdS
lRs.Open lCommand, , adOpenForwardOnly, adLockReadOnly
Do Until lRs.EOF
lsSql = "INSERT INTO WK_M_HANBAITNK1 ("
lsSql = lsSql & " PKEY, KYOTSUFLG, SYOHINCD, SYOHINNM, SYOHINKANA"
lsSql = lsSql & ", TANNI, TNK, GROUPCD, GROUPNM"
lsSql = lsSql & ", TEKIYODTST, TEKIYODTED "
lsSql = lsSql & ") VALUES ("
lsSql = lsSql & " '" & fgNullToNum(lRs("PKEY")) & "'"
lsSql = lsSql & ", '" & lRs("KYOTSUFLG") & "'"
lsSql = lsSql & ", '" & fgNullToStr(lRs("SYOHINCD")) & "'"
lsSql = lsSql & ", '" & fgNullToStr(lRs("SYOHINNM")) & "'"
lsSql = lsSql & ", '" & fgNullToStr(lRs("SYOHINKANA")) & "'"
lsSql = lsSql & ", '" & fgNullToStr(lRs("TANNI")) & "'"
lsSql = lsSql & ", '" & fgNullToNum(lRs("TNK")) & "'"
lsSql = lsSql & ", '" & fgNullToStr(lRs("GROUPCD")) & "'"
lsSql = lsSql & ", '" & fgNullToStr(lRs("GROUPNM")) & "'"
lsSql = lsSql & ", '" & fgNullToStr(lRs("TEKIYODTST")) & "'"
lsSql = lsSql & ", '" & fgNullToStr(lRs("TEKIYODTED")) & "'"
lsSql = lsSql & ");"
DoCmd.RunSQL lsSql
'CurrentProject.Connection.Execute lsSql
lRs.MoveNext
Loop
Me.Refresh
lRs.Close: Set lRs = Nothing
Set lCommand = Nothing
End Sub
paulsteigel > 13-04-17, 12:27 PM
(13-04-17, 12:05 PM)HoangManh Đã viết:Mã:Private Sub cmdSearch_Click()
Dim lRs As New ADODB.Recordset
Dim lCommand As New ADODB.Command 'コマンドオブジェクト
Dim lsSql As String
[b] DoCmd.RunSQL "DELETE FROM WK_M_HANBAITNK1;"[/b]
If fgNullToStr(Me.cboGroupCdS) = vbNullString Then
MsgBox "グループが入力されていません。社員CDを入力して下さい。", vbOKOnly + vbCritical, Me.Caption
Me.cboGroupCdS.SetFocus
Exit Sub
End If
lsSql = "SELECT PKEY, KYOTSUFLG, SYOHINCD, SYOHINNM, SYOHINKANA, TANNI, TNK, GROUPCD, GROUPNM, TEKIYODTST, TEKIYODTED FROM M_HANBAITNK WHERE GROUPCD = ?"
lCommand.ActiveConnection = adoCon
lCommand.CommandText = lsSql
lCommand.Parameters.Append lCommand.CreateParameter("GROUPCD", adVariant, adParamInput)
lCommand.Parameters("GROUPCD").Value = Me.cboGroupCdS
lRs.Open lCommand, , adOpenForwardOnly, adLockReadOnly
Do Until lRs.EOF
lsSql = "INSERT INTO WK_M_HANBAITNK1 ("
lsSql = lsSql & " PKEY, KYOTSUFLG, SYOHINCD, SYOHINNM, SYOHINKANA"
lsSql = lsSql & ", TANNI, TNK, GROUPCD, GROUPNM"
lsSql = lsSql & ", TEKIYODTST, TEKIYODTED "
lsSql = lsSql & ") VALUES ("
lsSql = lsSql & " '" & fgNullToNum(lRs("PKEY")) & "'"
lsSql = lsSql & ", '" & lRs("KYOTSUFLG") & "'"
lsSql = lsSql & ", '" & fgNullToStr(lRs("SYOHINCD")) & "'"
lsSql = lsSql & ", '" & fgNullToStr(lRs("SYOHINNM")) & "'"
lsSql = lsSql & ", '" & fgNullToStr(lRs("SYOHINKANA")) & "'"
lsSql = lsSql & ", '" & fgNullToStr(lRs("TANNI")) & "'"
lsSql = lsSql & ", '" & fgNullToNum(lRs("TNK")) & "'"
lsSql = lsSql & ", '" & fgNullToStr(lRs("GROUPCD")) & "'"
lsSql = lsSql & ", '" & fgNullToStr(lRs("GROUPNM")) & "'"
lsSql = lsSql & ", '" & fgNullToStr(lRs("TEKIYODTST")) & "'"
lsSql = lsSql & ", '" & fgNullToStr(lRs("TEKIYODTED")) & "'"
lsSql = lsSql & ");"
DoCmd.RunSQL lsSql
'CurrentProject.Connection.Execute lsSql
lRs.MoveNext
Loop
Me.Refresh
lRs.Close: Set lRs = Nothing
Set lCommand = Nothing
End Sub
HoangManh > 13-04-17, 12:36 PM
(13-04-17, 12:27 PM)paulsteigel Đã viết:Dạ cảm ơn anh em đã chạy thử debug nhưng thật ra nói là cảnh báo thì đúng hơn vì nếu đồng ý thì vẫn lưu đựoc vào bảng còn không thì bật ra lỗi 2501. và lỗi ở dòng DoCmd.(13-04-17, 12:05 PM)HoangManh Đã viết:Mã:Private Sub cmdSearch_Click()
Dim lRs As New ADODB.Recordset
Dim lCommand As New ADODB.Command 'コマンドオブジェクト
Dim lsSql As String
[b] DoCmd.RunSQL "DELETE FROM WK_M_HANBAITNK1;"[/b]
If fgNullToStr(Me.cboGroupCdS) = vbNullString Then
MsgBox "グループが入力されていません。社員CDを入力して下さい。", vbOKOnly + vbCritical, Me.Caption
Me.cboGroupCdS.SetFocus
Exit Sub
End If
lsSql = "SELECT PKEY, KYOTSUFLG, SYOHINCD, SYOHINNM, SYOHINKANA, TANNI, TNK, GROUPCD, GROUPNM, TEKIYODTST, TEKIYODTED FROM M_HANBAITNK WHERE GROUPCD = ?"
lCommand.ActiveConnection = adoCon
lCommand.CommandText = lsSql
lCommand.Parameters.Append lCommand.CreateParameter("GROUPCD", adVariant, adParamInput)
lCommand.Parameters("GROUPCD").Value = Me.cboGroupCdS
lRs.Open lCommand, , adOpenForwardOnly, adLockReadOnly
Do Until lRs.EOF
lsSql = "INSERT INTO WK_M_HANBAITNK1 ("
lsSql = lsSql & " PKEY, KYOTSUFLG, SYOHINCD, SYOHINNM, SYOHINKANA"
lsSql = lsSql & ", TANNI, TNK, GROUPCD, GROUPNM"
lsSql = lsSql & ", TEKIYODTST, TEKIYODTED "
lsSql = lsSql & ") VALUES ("
lsSql = lsSql & " '" & fgNullToNum(lRs("PKEY")) & "'"
lsSql = lsSql & ", '" & lRs("KYOTSUFLG") & "'"
lsSql = lsSql & ", '" & fgNullToStr(lRs("SYOHINCD")) & "'"
lsSql = lsSql & ", '" & fgNullToStr(lRs("SYOHINNM")) & "'"
lsSql = lsSql & ", '" & fgNullToStr(lRs("SYOHINKANA")) & "'"
lsSql = lsSql & ", '" & fgNullToStr(lRs("TANNI")) & "'"
lsSql = lsSql & ", '" & fgNullToNum(lRs("TNK")) & "'"
lsSql = lsSql & ", '" & fgNullToStr(lRs("GROUPCD")) & "'"
lsSql = lsSql & ", '" & fgNullToStr(lRs("GROUPNM")) & "'"
lsSql = lsSql & ", '" & fgNullToStr(lRs("TEKIYODTST")) & "'"
lsSql = lsSql & ", '" & fgNullToStr(lRs("TEKIYODTED")) & "'"
lsSql = lsSql & ");"
DoCmd.RunSQL lsSql
'CurrentProject.Connection.Execute lsSql
lRs.MoveNext
Loop
Me.Refresh
lRs.Close: Set lRs = Nothing
Set lCommand = Nothing
End Sub
Bạn nên debug để chạy từng lệnh xem lỗi xuất hiện dòng nào. Theo tôi biết thì khi chạy Docmd.RunSQL thì phải tắt chết độ cảnh bảo của Access đi vì nó là lệnh chạy Query ngoại tuyến.
Nếu bạn dùng currentdb.execute SQL thì sẽ không bị sao cả!
Thân
paulsteigel > 13-04-17, 12:50 PM
(13-04-17, 12:36 PM)HoangManh Đã viết: ....
Dạ cảm ơn anh em đã chạy thử debug nhưng thật ra nói là cảnh báo thì đúng hơn vì nếu đồng ý thì vẫn lưu đựoc vào bảng còn không thì bật ra lỗi 2501. và lỗi ở dòng DoCmd.
HoangManh > 13-04-17, 12:52 PM
(13-04-17, 12:50 PM)paulsteigel Đã viết:(13-04-17, 12:36 PM)HoangManh Đã viết: ....
Dạ cảm ơn anh em đã chạy thử debug nhưng thật ra nói là cảnh báo thì đúng hơn vì nếu đồng ý thì vẫn lưu đựoc vào bảng còn không thì bật ra lỗi 2501. và lỗi ở dòng DoCmd.
Vậy hãy đặt DoCmd.SetWarnings False trước các lệnh chạy Query và bật lại sau khi kết thúc bằng DoCmd.SetWarnings true
paulsteigel > 13-04-17, 01:07 PM
(13-04-17, 12:52 PM)HoangManh Đã viết: Em xin lỗi nhưng anh có thể nói sự khác nhau giưa DoCmd và Curent đựoc ko ạ
HoangManh > 13-04-17, 01:18 PM
(13-04-17, 01:07 PM)paulsteigel Đã viết:(13-04-17, 12:52 PM)HoangManh Đã viết: Em xin lỗi nhưng anh có thể nói sự khác nhau giưa DoCmd và Curent đựoc ko ạ
Tại sao bạn phải xin lỗi, chúng ta trao đổi mà.
Nói một cách nôm na "Docmd là lệnh cho phép gọi các tính năng của Access và không cho phép tương tác".
Dùng DoCmd.RunSQL "SQL" sẽ bảo Access thực hiện lệnh này theo nguyên lý của nó. Vì không cho phép tương tác nên nó sẽ cảnh báo/ Trước/ trong quá trình thực hiện lệnh.
Khi dùng .Execute với Currentdb hoặc Currentproject.Connection ... thì nó cho phép tương tác với các vấn đề phát sinh của SQL.
Nói khác hơn::
Dùng Docmd.RunSQL giống việc bạn bảo một anh bạn nhà bên làm cho tôi một cái chổi, làm thế nào thì tùy bạn, miễn là đưa tôi cái chổi. Anh bạn nhận việc và làm ngay, khi làm sẽ phải rút rơm mái nhà của bạn thì anh ta cảnh báo (nếu bạn bảo cứ làm không phải báo) thì anh ta tự động rút rơm, bện chổi và đưa bạn cái chổi.
Trong khi nếu dùng .Execute, tương tự việc bạn bảo con bạn trong nhà bạn - con bện cho bố cái chổi, nó sẽ hỏi từng thứ 1, rơm đâu ạ, bện thế nào? bện hỏng một mối nó cũng hỏi bạn ngay.
Tôi xin giải thích một cách nôm na như vậy.
tranthanhan1962 > 13-04-17, 02:03 PM
HoangManh > 13-04-17, 02:16 PM