ongke0711 > 29-03-17, 05:03 PM
(29-03-17, 01:46 PM)HoangManh Đã viết: Trong loại subquery, bạn sẽ không thể quay trở lại nhiều hơn một kỷ lục. Để trả lại một hồ sơ duy nhất, hãy thay đổi câu lệnh SELECT của subquery.)
Dạ xin lỗi anh em cũng mới . bị sếp chỉ đâu đánh đây. dữ liệu thì toàn tiếng nhật . em mới làm quen với access nên nhiều cái cũng không hiểu. Anh có tài liệu hay hữong dấn gì về vba trong access ko ạ. xếp thì bảo là dùng vba . chứ không dùng query không. em thì nếu làm ra đựoc bằng query như anh nói thì tốt quá nhưng gặp lỗi này nên không biết sửa thế nào ạ
HoangManh > 29-03-17, 06:35 PM
(29-03-17, 05:03 PM)ongke0711 Đã viết:(29-03-17, 01:46 PM)HoangManh Đã viết: Trong loại subquery, bạn sẽ không thể quay trở lại nhiều hơn một kỷ lục. Để trả lại một hồ sơ duy nhất, hãy thay đổi câu lệnh SELECT của subquery.)
Dạ xin lỗi anh em cũng mới . bị sếp chỉ đâu đánh đây. dữ liệu thì toàn tiếng nhật . em mới làm quen với access nên nhiều cái cũng không hiểu. Anh có tài liệu hay hữong dấn gì về vba trong access ko ạ. xếp thì bảo là dùng vba . chứ không dùng query không. em thì nếu làm ra đựoc bằng query như anh nói thì tốt quá nhưng gặp lỗi này nên không biết sửa thế nào ạ
Bạn bỏ 2 điều kiện WHERE của bạn khỏi Query1 đi (HAICHI_STATE và SHIKYUU_KAKUNIN). Bạn đưa các điều kiện này vô Query 2 hoặc 3 xem thử.
Còn về dùng toàn bằng code VBA để xử lý thì từ từ ngâm cứu tiếp.
ongke0711 > 29-03-17, 10:10 PM
HoangManh > 30-03-17, 07:38 AM
(29-03-17, 10:10 PM)ongke0711 Đã viết: Câu lệnh của Subquery là SELECT TOP 1 (trả về 1 record thôi) mà query này trả về nhiều hơn 1 dòng nên báo lỗi "At most...".Dạ em cảm ơn ạ. dạ Sép em muốnlaf không dùng query chỉ dùng query.Dùng sql để gọi dữ liệu sau đó. dùng hàm để tính rồi insert into vào bảng mới gồm manv ten nv ngayvaolam ngayvaolamupdate ạ
Vậy có nghĩa là có record bị trùng lập trong table [dbo_View_GROP_配置勤怠検索ALL]. Bạn phải tìm và loại bỏ dòng bị trùng lập này.
-> SYAIN_NO: 551464; SAGYOU_YMD: 23/12/2007
Còn về việc dùng VBA thì tôi chưa hiểu ý xếp bạn lắm. Nếu bạn đưa qui trình chạy các query này dưới một Form giao diện người dùng thì cũng là dùng code VBA để gọi các query này chạy ngầm rồi đưa ra kết quả rồi còn gì. Còn nếu muốn thiết kế hàm để xử lý thì lại là chuyện khác.
ongke0711 > 30-03-17, 11:45 PM
Option Explicit
Const conJetDate = "\#mm\/dd\/yyyy\#"
Private Sub Command0_Click()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strSQL As String, strAppend As String
Dim stSYAIN As String
Dim dtSAGYOU As Date
strSQL = "SELECT dbo_View_GROPALL.SYAIN_NO, dbo_View_GROPALL.SAGYOU_YMD, DateDiff('m',(SELECT TOP 1 [SAGYOU_YMD] FROM dbo_View_GROPALL AS Q " & _
"WHERE Q.SAGYOU_YMD < dbo_View_GROPALL.SAGYOU_YMD And Q.SYAIN_NO = dbo_View_GROPALL.SYAIN_NO " & _
"ORDER BY Q.SAGYOU_YMD DESC),dbo_View_GROPALL.SAGYOU_YMD) -1 AS KhoangCachThang " & _
"FROM dbo_View_GROPALL " & _
"WHERE ((((SELECT TOP 1 SAGYOU_YMD FROM dbo_View_GROPALL AS Q " & _
"WHERE Q.SAGYOU_YMD < dbo_View_GROPALL.SAGYOU_YMD)) Is Not Null)) " & _
"ORDER BY dbo_View_GROPALL.SYAIN_NO, dbo_View_GROPALL.SAGYOU_YMD"
Set db = CurrentDb
Set rs = db.OpenRecordset(strSQL, dbOpenSnapshot)
db.Execute "DELETE * FROM tblDSNVNghi6Thang_Temp" 'Xoa table tam
With rs
rs.MoveFirst
Do Until rs.EOF
If rs!KhoangCachThang >= 6 Then
stSYAIN = !SYAIN_NO
dtSAGYOU = !SAGYOU_YMD
strAppend = "INSERT INTO tblDSNVNghi6Thang_Temp (SYAIN_NO,SAGYOU_YMD) VALUES (" & stSYAIN & "," & Format(dtSAGYOU, conJetDate) & ")"
db.Execute strAppend, dbFailOnError
End If
rs.MoveNext
Loop
End With
End Sub
HoangManh > 31-03-17, 09:45 AM
(30-03-17, 11:45 PM)ongke0711 Đã viết: Muốn chuyển thành code VBA thì bạn chuyển query thành các câu lệnh SQL rồi chạy thôi.
Tôi đổi tên table có tiếng Nhật trong code VBA vì máy tôi ko cài ngôn ngữ này.
Mã PHP:Option Explicit
Const conJetDate = "\#mm\/dd\/yyyy\#"
Private Sub Command0_Click()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strSQL As String, strAppend As String
Dim stSYAIN As String
Dim dtSAGYOU As Date
strSQL = "SELECT dbo_View_GROPALL.SYAIN_NO, dbo_View_GROPALL.SAGYOU_YMD, DateDiff('m',(SELECT TOP 1 [SAGYOU_YMD] FROM dbo_View_GROPALL AS Q " & _
"WHERE Q.SAGYOU_YMD < dbo_View_GROPALL.SAGYOU_YMD And Q.SYAIN_NO = dbo_View_GROPALL.SYAIN_NO " & _
"ORDER BY Q.SAGYOU_YMD DESC),dbo_View_GROPALL.SAGYOU_YMD) -1 AS KhoangCachThang " & _
"FROM dbo_View_GROPALL " & _
"WHERE ((((SELECT TOP 1 SAGYOU_YMD FROM dbo_View_GROPALL AS Q " & _
"WHERE Q.SAGYOU_YMD < dbo_View_GROPALL.SAGYOU_YMD)) Is Not Null)) " & _
"ORDER BY dbo_View_GROPALL.SYAIN_NO, dbo_View_GROPALL.SAGYOU_YMD"
Set db = CurrentDb
Set rs = db.OpenRecordset(strSQL, dbOpenSnapshot)
db.Execute "DELETE * FROM tblDSNVNghi6Thang_Temp" 'Xoa table tam
With rs
rs.MoveFirst
Do Until rs.EOF
If rs!KhoangCachThang >= 6 Then
stSYAIN = !SYAIN_NO
dtSAGYOU = !SAGYOU_YMD
strAppend = "INSERT INTO tblDSNVNghi6Thang_Temp (SYAIN_NO,SAGYOU_YMD) VALUES (" & stSYAIN & "," & Format(dtSAGYOU, conJetDate) & ")"
db.Execute strAppend, dbFailOnError
End If
rs.MoveNext
Loop
End With
End Sub
link demo: http://www.mediafire.com/file/7uiyi7gre9...8v2%29.mdb
lsSql1 = "SELECT WK_配置勤怠検索_ALL.SYAIN_NO,WK_配置勤怠検索_ALL.SAGYOU_YMDの最大, DateDiff('m',(SELECT TOP 1 [SAGYOU_YMDの最大] FROM WK_配置勤怠検索_ALL AS Q "
lsSql1 = lsSql1 & "WHERE Q.SAGYOU_YMDの最大 < WK_配置勤怠検索_ALL.SAGYOU_YMDの最大 And Q.SYAIN_NO = WK_配置勤怠検索_ALL.SYAIN_NO "
lsSql1 = lsSql1 & "ORDER BY Q.SAGYOU_YMD DESC),dbo_View_GROPALL.SAGYOU_YMD) -1 AS KhoangCachThang "
lsSql1 = lsSql1 & "FROM WK_配置勤怠検索_ALL "
lsSql1 = lsSql1 & "WHERE ((((SELECT TOP 1 SAGYOU_YMDの最大 FROM WK_配置勤怠検索_ALL AS Q "
lsSql1 = lsSql1 & "WHERE Q.SAGYOU_YMDの最大 < WK_配置勤怠検索_ALL.SAGYOU_YMDの最大)) Is Not Null)) "
lsSql1 = lsSql1 & "WHERE SYAIN_NO = '" & ID & "' "
lsSql1 = lsSql1 & "ORDER BY WK_配置勤怠検索_ALL.SYAIN_NO, WK_配置勤怠検索_ALL.SAGYOU_YMDの最大"
ongke0711 > 31-03-17, 10:11 AM
lsSql1 = "SELECT WK_配置勤怠検索_ALL.SYAIN_NO,WK_配置勤怠検索_ALL.SAGYOU_YMDの最大, DateDiff('m',(SELECT TOP 1 [SAGYOU_YMDの最大] FROM WK_配置勤怠検索_ALL AS Q "
lsSql1 = lsSql1 & "WHERE Q.SAGYOU_YMDの最大 < WK_配置勤怠検索_ALL.SAGYOU_YMDの最大 And Q.SYAIN_NO = WK_配置勤怠検索_ALL.SYAIN_NO "
lsSql1 = lsSql1 & "ORDER BY Q.SAGYOU_YMD DESC),dbo_View_GROPALL.SAGYOU_YMD) -1 AS KhoangCachThang "
lsSql1 = lsSql1 & "FROM WK_配置勤怠検索_ALL "
lsSql1 = lsSql1 & "WHERE ((((SELECT TOP 1 SAGYOU_YMDの最大 FROM WK_配置勤怠検索_ALL AS Q "
lsSql1 = lsSql1 & "WHERE SYAIN_NO = '" & ID & "' AND Q.SAGYOU_YMDの最大 < WK_配置勤怠検索_ALL.SAGYOU_YMDの最大)) Is Not Null)) "
lsSql1 = lsSql1 & "ORDER BY WK_配置勤怠検索_ALL.SYAIN_NO, WK_配置勤怠検索_ALL.SAGYOU_YMDの最大"