我的数据库包含超过4,000,000个术中温度读数(4354499 x 8)。因此,数据库太大而无法复制和粘贴。
变量:
caseID - 外科病例的唯一标识符。如果一名患者在不同的日子进行多次手术,每次手术都会有不同的病例ID
温度 - 温度值
时间 - 记录温度的时间
在整个手术过程中每15秒钟进行一次温度读数,因此具有500多个温度读数的病例是常态。每个外科病例都有自己的唯一标识符(caseID),但caseID对于所有500个读数都是相同的。
我需要的是一种自动提取每种情况的温度读数的方法。它可以采用以下任何格式:
答案 0 :(得分:1)
在最基本的形式中,您正在寻找的是一些像这样的VBA代码:
Public Function DumpTempsByCaseToExcel() As Boolean
Dim cdb As DAO.Database, rst As DAO.Recordset, qdf As DAO.QueryDef
Const OutPath = "C:\Users\Gord\Desktop\"
Const DataTableName = "Temperatures"
Const TempQueryDefName = "zzzTempQuery"
Set cdb = CurrentDb
Set rst = cdb.OpenRecordset("SELECT DISTINCT caseID FROM [" & DataTableName & "]", dbOpenSnapshot)
Do While Not rst.EOF
On Error Resume Next
cdb.QueryDefs.Delete TempQueryDefName
On Error GoTo DumpTempsByCaseToExcel_Error
Set qdf = cdb.CreateQueryDef(TempQueryDefName, "SELECT * FROM [" & DataTableName & "] WHERE caseID=""" & rst!caseID & """")
Set qdf = Nothing
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, TempQueryDefName, OutPath & rst!caseID & ".xlsx"
rst.MoveNext
Loop
rst.Close
Set rst = Nothing
Set cdb = Nothing
DumpTempsByCaseToExcel = True
Exit Function
DumpTempsByCaseToExcel_Error:
MsgBox Err.Description, vbCritical, "Runtime error " & Err.Number
DumpTempsByCaseToExcel = False
End Function
假设:
您的[caseID]值是字母数字。如果它们是数字,那么你将不得不在构建WHERE子句的代码中使用引号。
您的[caseID]值可用作有效的Windows文件名。如果它们包含在Windows fimenames中无效的字符,那么您必须使用类似Replace()
函数的内容删除它们或将它们映射到其他内容。
您的目标文件夹为空,或者至少不包含与您要创建的文件同名的文件。写为的示例代码可能覆盖现有文件。