2
我想要做的几个条件计算depanding的时候,所以我就先用数据类型不匹配读VBA访问记录
CurrentDb.OpenRecordset
拳输出我检查查询如果它的工作原理是在微软的Access创建查询和它的工作,回到了我我想要的答案,所以我在VBA代码应用的SELECT语句,但没有奏效,它给我的错误(类型不匹配)上:
TOTER = CurrentDb.OpenRecordset( “选择” & _ ..est
为什么它完美地工作,而VBA?我的代码中缺少什么? 我把它放在一个函数
GET_TOTER()
,并呼吁从
TABLE_x_NEW()
Option Compare Database
Option Explicit
Public cnn As New ADODB.Connection
Public db As DAO.Database
Public Sub SUb_Main()
Set db = Access.Application.CurrentDb
Set cnn = CurrentProject.Connection
TABLE_x_NEW
End Sub
Private Sub TABLE_x_NEW()
Dim sql As String
Dim SDATA As New ADODB.Recordset
Dim TX As DAO.Recordset
Set TX = db.OpenRecordset("TABLE_x")
sql = "SELECT * FROM TABLE_z"
SDATA.Open sql, cnn, adOpenStatic
If SDATA.RecordCount <> 0 Then
Do Until SDATA.EOF
DoEvents
TX.AddNew
TX!P_ID = SDATA!P_ID
TX!Pdate = SDATA!Pdate
TX!W_TOTER = GET_TOTER(TX!Pdate, TX!P_ID)
TX.Update
SDATA.MoveNext
Loop
End If
End Sub
Private Function GET_TOTER(Pdate As Date, PID As String) As Double
Dim sql As String
Dim SDATA As New ADODB.Recordset
Dim COUN As Long
Dim TOTER As Double
sql = "SELECT DISTINCT (NID) FROM TABLE_A WHERE P_ID='" & PID & "' AND PTYPE IN ('HP','TOS')"
SDATA.Open sql, cnn, adOpenStatic
If SDATA.RecordCount <> 0 Then
COUN = CurrentDb.OpenRecordset("SELECT COUNT(*)FROM TABLE_B WHERE APId = '" & SDATA!NID & "' " & _
"AND MONTH(W_DATE)=" & Month(Pdate) & " AND YEAR(W_DATE)=" & Year(Pdate) & "").Fields(0).Value
If (0 >= COUN >= 3) Then
TOTER = CurrentDb.OpenRecordset("SELECT " & _
"(DAvg(""[W_RATE]"",""TABLE_B"",""[APId] = '" & SDATA!NID & "' AND MONTH([WELL_TEST_DATE])=' & Month(Pdate) & ' AND YEAR([WELL_TEST_DATE])= ' & Year(Pdate) & ' "") " & _
" -DStDev(""[W_RATE]"", ""TABLE_B"", ""[APId] = '" & SDATA!NID & "' AND MONTH([WELL_TEST_DATE])=' & Month(Pdate) & ' AND YEAR([WELL_TEST_DATE])= ' & Year(Pdate) & ' ""))" & _
"/DAvg(""[W_RATE]"",""TABLE_B"",""[APId] = '" & SDATA!NID & "' AND MONTH([WELL_TEST_DATE])=' & Month(Pdate) & ' AND YEAR([WELL_TEST_DATE])= ' & Year(Pdate) & ' "") *100 " & _
" +(20 * (1- COUNT(APId)/3)) + 5 " & _
" FROM TABLE_B" & _
" WHERE Month(W_DATE) = ' & Month(Pdate) & ' AND Year(W_DATE)= ' & Year(Pdate) & ' AND APId = '" & SDATA!NID & "' HAVING COUNT(APId) BETWEEN 0 AND 3")
GET_TOTER = TOTER
ELSE
GET_TOTER=0
End If
SDATA.Close
End If
End Function
我没有注意到我忘了将'.Fields(0).Value'添加到记录集中!谢谢.. –