Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从access数据库创建非常大的excel文件?_Excel_Ms Access_Coldfusion - Fatal编程技术网

如何从access数据库创建非常大的excel文件?

如何从access数据库创建非常大的excel文件?,excel,ms-access,coldfusion,Excel,Ms Access,Coldfusion,我现在有一个问题,我认为我的cold fusion代码试图在从access数据库中提取记录后创建一个非常大的excel文件。我相信它超时了,并给出了一个500,零的错误。冷聚变将需要处理大约180000多条记录。有没有一种有效的方法 下面是它的大致情况: <cfquery datasource="datasource" > Drop Table Person </cfquery> <cfquery datasource="datasource" >

我现在有一个问题,我认为我的cold fusion代码试图在从access数据库中提取记录后创建一个非常大的excel文件。我相信它超时了,并给出了一个500,零的错误。冷聚变将需要处理大约180000多条记录。有没有一种有效的方法

下面是它的大致情况:

    <cfquery datasource="datasource" >
Drop Table Person
</cfquery> 

<cfquery datasource="datasource" >
Update1rowtble
</cfquery>


<cfset Clist=  "FNAME,LNAME,etc..">

<cfquery name="q" datasource="datasource" >
R2A</cfquery>



<cffile action="WRITE" file="filepath" output='#toString(queryToXL(Q,Clist))#' addnewline="No" fixnewline="No">

 <cfquery name="q" datasource="source" >
R3
</cfquery>

<cffile action="WRITE" file="filepath2" output='#toString(queryToXL(Q,Clist))#' addnewline="No" fixnewline="No">

落桌人
Update1rowtble
R2A
R3

谢谢

旁观者眼里出西施

如果只是构建一个csv或html文件,并将其作为xls文件流式传输到浏览器,则需要确保写入一行数据并刷新响应缓冲区,以保持与浏览器的连接处于活动状态

然而,如果您正在内存中构建一个巨大的excel文件并试图将其发送下来,那么您可能需要对UI进行一些更改


也就是说,让UI排队请求报告/文件。然后让浏览器离开,让用户稍后回来检查它。您甚至可以每隔一段时间对队列进行一次ajax检查。对于服务器端,让一个非web进程创建文件,并在作业完成时通知队列。

高效在旁观者眼中

如果只是构建一个csv或html文件,并将其作为xls文件流式传输到浏览器,则需要确保写入一行数据并刷新响应缓冲区,以保持与浏览器的连接处于活动状态

然而,如果您正在内存中构建一个巨大的excel文件并试图将其发送下来,那么您可能需要对UI进行一些更改


也就是说,让UI排队请求报告/文件。然后让浏览器离开,让用户稍后回来检查它。您甚至可以每隔一段时间对队列进行一次ajax检查。对于服务器端,让一个非web进程创建文件,并在作业完成时通知队列。

最简单的方法是从access数据库内部创建一个小的VBscript函数,并执行以下代码

Sub example()
    DoCmd.TransferSpreadsheet acExport, , "tableName", path
End Sub
您基本上可以使用上述语句将任何表格导出到任何excel文件。。。 如果要将多个表添加到同一工作表中,只需在同一路径上再次运行同一命令,即可将该表添加到不同的excel选项卡中


享受:)

最简单的方法是从access数据库内部创建一个小的VBscript函数,并执行以下代码

Sub example()
    DoCmd.TransferSpreadsheet acExport, , "tableName", path
End Sub
您基本上可以使用上述语句将任何表格导出到任何excel文件。。。 如果要将多个表添加到同一工作表中,只需在同一路径上再次运行同一命令,即可将该表添加到不同的excel选项卡中


享受:)

如果它只是一个CSV文件,您还可以尝试使用IN子句将数据直接插入到文件中(从MS Access查询中)


您没有提到此导出的频率。但180K似乎有很多可供访问的记录。考虑到它是一个桌面数据库,我不知道它将如何处理这种大小的导出。。无论您如何分割它。

如果它只是一个CSV文件,您也可以尝试使用IN子句将数据直接插入到文件中(从MS Access查询中)


您没有提到此导出的频率。但180K似乎有很多可供访问的记录。考虑到它是一个桌面数据库,我不知道它将如何处理这种大小的导出。。无论您如何分割它。

记住建议的内容,另一个帮助可能是导出到csv并将其命名为.xls。大多数版本的excel都能很好地处理这一问题。

记住建议的内容,另外一个帮助可能是导出到csv并将其命名为.xls。大多数版本的excel都能很好地处理这一点。

希望这不会暴露我的无知-但我如何从coldfusion页面开始呢?@tylercomp您将无法从coldfusion页面开始。实际上,您希望使用更标准的SQL数据库(mysql、sqlite)而不是Access(IMHO)。我猜这并不能真正回答你的问题。。。但是,如果你能够访问“访问”(意料之外的双关语)的话,这是一种方法,希望这不会暴露我的无知——但我如何从coldfusion页面开始呢?@tylercomp你无法从coldfusion页面开始。实际上,您希望使用更标准的SQL数据库(mysql、sqlite)而不是Access(IMHO)。我猜这并不能真正回答你的问题。。。但是,如果您能够访问“access”(意料之外的双关语)@tylercomp,那么这是一种方法。MS access实际上是180K行的来源,还是您通过链接服务器(MS SQL)检索数据?@tylercomp-这只是一个普通的CSV文件吗?不清楚queryToXL()函数的作用是什么.a.cfm文件-我相信这就是要写入excel的信息的格式file@tylercomp-否,您正在生成的文件。你说的是Excel,但很可能只是Excel可以打开的东西。例如CSV或html文件。@tylercomp-MS Access实际上是180K行的来源,还是通过链接服务器(MS SQL)检索数据?@tylercomp-这只是一个普通的CSV文件吗?不清楚queryToXL()函数的作用是什么.a.cfm文件-我相信这就是要写入excel的信息的格式file@tylercomp-否,您正在生成的文件。你说的是Excel,但很可能只是Excel可以打开的东西。例如CSV或html文件。您应该查看日志,找出500错误的原因。这听起来不仅仅是一个简单的超时。。也许代码正在耗尽可用的资源?因此,你可能必须找到一种不同的做事方式;)我当然希望你没有循环180K ti