Welcome!

You will be redirected in 30 seconds or close now.

ColdFusion Authors: Yakov Fain, Jeremy Geelan, Maureen O'Gara, Nancy Y. Nee, Tad Anderson

Related Topics: ColdFusion

ColdFusion: Article

Generic SQL Table Export

Generic SQL Table Export

In my last article (CFDJ, Vol. 1, issue 6) I presented Array_Table, a universal browser-based table viewer and query engine. Array_Table allows you to browse, edit and query any Microsoft SQL Server table. It's 100% dynamic so it works with any database.

Many readers and clients loved the new capability and ease it offered. And they wanted more, of course.

Feeling Trapped?
Most data-driven Web sites are located on remote servers. If you use a server-based database like Microsoft SQL Server, it's difficult to retrieve table data locally. Downloading entire tables for use with your desktop software or to keep a local backup seems impossible. In addition, your end users may periodically need to download data from the data-driven sites you create.

Freedom At Last!
We're going to add generic table export capability to Array_Table. It'll allow you to generate a common, popular and generic text file that can be used in almost any desktop application or database. Array_Export will create a text file and optionally e-mail it to you. With this functionality you'll have the freedom to actually get to your data. You can see Array_Table and Array_Export in action at www. arrayone.com/Table/.Do_it! To present your users with a list of available tables, I created Table_List.cfm (see Figure 1).

This form shows you a list of all the tables in a data source with the option to view the data or query the table. I've added a choice, "Export", to the table list. This is the only necessary addition to Table_List.cfm (see Listing 1) and it's simply a hot link to the table export program. Here's the code.... <a href="Export/Export_Menu.cfm?TableName=#Table_List.Name#">Export</a>

All of the export files are being stored and called from a subfolder, "Export". This keeps your files neat and provides one point of reference if you have to modify any export-related code.

When you click on "Export", the Export_menu.cfm script is called and you're presented with the export menu (see Figure 2 and Listing 2).

The table you selected is automatically passed to the export menu. Now you have the option of exporting the data to a comma- or tab-delimited file, with or without field names in the file header.

If you enter your e-mail address, Array_Export will e-mail the exported data file to you.

How'd He Do That?
It's easier than you think. Array_Export.cfm calls Export.Cfm (see Listing 3). Export.Cfm passes the tablename along with your export selections from the menu to the main ColdFusion script, Table_Export.cfm (see Listing 4). This script handles all the export functionality. Let's examine Export.Cfm.

<!--- Export.CFM - Passes logon and user choice parameters to the export engine, Table_Export.CFM. --->
<!--- Set export file name --->
<cfset Dir_Name = #getdirectory
frompath(gettemplatepath())#>
<cfset FileName = "#Dir_Name#\Data\#TableName##DateFormat("#Now()#","mmddyyyy")#.txt">
<!--- Call export engine --->
<cf_Table_Export
DSN="Demo"
Username="Guest"
Password="Guest"
Table="#TableName#"
FileName="#FileName#"
Delimiter="#Form.Delimiter#"
ColumnHeader="#Form.ColumnHeader#"
Email="#Form.Email#">

Export.cfm sets the directory where the exported data file will be stored. Then it sets the name of the exported file to be the file name plus the current date. So if you were exporting a table called "Sales" on December 6, 1999, the exported file name would be "Sales12061999.txt". Export.cfm then calls Table_Export.

cfm and passes all the necessary parameters, such as tablename and filename.

Table_Export.Cfm There are four steps in exporting the table:

1. Query the table to retrieve all of the rows. 3. Write the data out to a text file in delimited text.
4. Mail the exported file to the user.
Step 1. Query the table.

<cfquery name="Export" datasource="Demo" username="Guest" password="Guest">
Select * from #Attributes.Table#
</cfquery>
<cfif Export.RecordCount EQ 0>
There are no records to export
<cfabort>
</cfif>

Simply query the table for all records. If there are none, display a message to the user and abort. If there are, we go to the second step.

Step 2. Get a list of all fields.

<cfquery name="Field_List" datasource="Demo" username="Guest" password="Guest">
SELECT syscolumns.Name
FROM sysobjects , syscolumns
WHERE syscolumns.id = sysobjects.ID
AND upper(sysobjects.Name) = '#Attributes.Table#'
</cfquery>
<!--- Put field list into an array --->
<cfset x = "">
<cfloop query="Field_List">
<cfset x = x & Field_List.Name>
<cfif Field_List.CurrentRow NEQ Field_List.RecordCount>
<cfset x = x & Attributes.Delimiter>
</cfif>
</cfloop>

Here we query the SQL Server system tables (see December 1999 article) to retrieve the list of fieldnames in the table. We need the field list so we can export the data and separate it by fields. The variable x will hold the list of fields, each fieldname separated by a comma.

<Cffile> is the perfect tag for creating and editing text files. Using the action="write" option, ColdFusion will create the text file if it doesn't already exist.

<!--- Create export file --->
<cffile action="WRITE" file="#Attri-butes.FileName#" output=""
addnewline="No">

Once the file is created, you can write the field list header to it (if the user chose to add fieldnames to the file).

<cffile action="APPEND" file="#Attributes.FileName#" output="#x##Chr(13)##Chr(10)#" addnewline="No">

Here, the variable x, which now holds the list of fields, is used.

Step 3. Write the data out to a text file in delimited text.

To make it easier to loop through the list of fields, I prefer to use arrays. The following command converts the fieldlist to an array called FL.

<cfset FL = ListToArray(x, #Attributes. Delimiter#)>

A simple nested (double) loop can now be used to loop through all the records in the table and output all the data. During the loop a single line of data is created in the variable D. It contains all data from all fields as well as the field delimiter character. After the data line is built, it can be written to the text file using <cffile> with the action="append". Append adds new lines to the file without erasing any existing data.

<!--- Loop through the export query which contains all data rows --->
<cfloop query="Export">
<cfset d = "">
<!--- Now loop through the field list and build the row export data --->
<cfloop index="n" from="1" to="#ArrayLen(FL)#">
<cfset S = SetVariable("S", "#FL[n]#")>
<cfset d = d & Trim(#Evaluate(S)#)>
<cfif n NEQ ArrayLen(FL)>
<cfset d = d & Attributes.Delimiter>
</cfif>
</cfloop>
<!--- Write record to text file --->
<cffile action="APPEND" file="#Attributes.FileName#"
input="#d##Chr(13)##Chr(10)#"
addnewline="no">
</cfloop>

Step 4. Mail the exported file to the user.

After the export loop completes the file, a new export file will be sitting on the server. If the user entered an e-mail address on the Export_menu.cfm form, the file will automatically be e-mailed to them. It doesn't get any easier than this.

Extension Cord, Please
Now you have a scalable, dynamic tool to view, query and export data from any table. With the new data export capability it's easy to bring data back to your desktop for backup or manipulation. Since the export generates pure text files, the data can be used in virtually any application. The possibilities are still endless.

More Stories By David Schwartz

David Schwartz is the president of Array Software Inc., a New Jersey-based software company. Array creates global data-driven Internet and intranet Web sites using ColdFusion, Oracle, MS SQL Server and Java. David has been developing turnkey custom database software for 14 years.

Comments (0)

Share your thoughts on this story.

Add your comment
You must be signed in to add a comment. Sign-in | Register

In accordance with our Comment Policy, we encourage comments that are on topic, relevant and to-the-point. We will remove comments that include profanity, personal attacks, racial slurs, threats of violence, or other inappropriate material that violates our Terms and Conditions, and will block users who make repeated violations. We ask all readers to expect diversity of opinion and to treat one another with dignity and respect.


IoT & Smart Cities Stories
Intel is an American multinational corporation and technology company headquartered in Santa Clara, California, in the Silicon Valley. It is the world's second largest and second highest valued semiconductor chip maker based on revenue after being overtaken by Samsung, and is the inventor of the x86 series of microprocessors, the processors found in most personal computers (PCs). Intel supplies processors for computer system manufacturers such as Apple, Lenovo, HP, and Dell. Intel also manufactu...
Darktrace is the world's leading AI company for cyber security. Created by mathematicians from the University of Cambridge, Darktrace's Enterprise Immune System is the first non-consumer application of machine learning to work at scale, across all network types, from physical, virtualized, and cloud, through to IoT and industrial control systems. Installed as a self-configuring cyber defense platform, Darktrace continuously learns what is ‘normal' for all devices and users, updating its understa...
At CloudEXPO Silicon Valley, June 24-26, 2019, Digital Transformation (DX) is a major focus with expanded DevOpsSUMMIT and FinTechEXPO programs within the DXWorldEXPO agenda. Successful transformation requires a laser focus on being data-driven and on using all the tools available that enable transformation if they plan to survive over the long term. A total of 88% of Fortune 500 companies from a generation ago are now out of business. Only 12% still survive. Similar percentages are found throug...
OpsRamp is an enterprise IT operation platform provided by US-based OpsRamp, Inc. It provides SaaS services through support for increasingly complex cloud and hybrid computing environments from system operation to service management. The OpsRamp platform is a SaaS-based, multi-tenant solution that enables enterprise IT organizations and cloud service providers like JBS the flexibility and control they need to manage and monitor today's hybrid, multi-cloud infrastructure, applications, and wor...
The Master of Science in Artificial Intelligence (MSAI) provides a comprehensive framework of theory and practice in the emerging field of AI. The program delivers the foundational knowledge needed to explore both key contextual areas and complex technical applications of AI systems. Curriculum incorporates elements of data science, robotics, and machine learning-enabling you to pursue a holistic and interdisciplinary course of study while preparing for a position in AI research, operations, ...
CloudEXPO has been the M&A capital for Cloud companies for more than a decade with memorable acquisition news stories which came out of CloudEXPO expo floor. DevOpsSUMMIT New York faculty member Greg Bledsoe shared his views on IBM's Red Hat acquisition live from NASDAQ floor. Acquisition news was announced during CloudEXPO New York which took place November 12-13, 2019 in New York City.
Codete accelerates their clients growth through technological expertise and experience. Codite team works with organizations to meet the challenges that digitalization presents. Their clients include digital start-ups as well as established enterprises in the IT industry. To stay competitive in a highly innovative IT industry, strong R&D departments and bold spin-off initiatives is a must. Codete Data Science and Software Architects teams help corporate clients to stay up to date with the mod...
Tapping into blockchain revolution early enough translates into a substantial business competitiveness advantage. Codete comprehensively develops custom, blockchain-based business solutions, founded on the most advanced cryptographic innovations, and striking a balance point between complexity of the technologies used in quickly-changing stack building, business impact, and cost-effectiveness. Codete researches and provides business consultancy in the field of single most thrilling innovative te...
Atmosera delivers modern cloud services that maximize the advantages of cloud-based infrastructures. Offering private, hybrid, and public cloud solutions, Atmosera works closely with customers to engineer, deploy, and operate cloud architectures with advanced services that deliver strategic business outcomes. Atmosera's expertise simplifies the process of cloud transformation and our 20+ years of experience managing complex IT environments provides our customers with the confidence and trust tha...
With the introduction of IoT and Smart Living in every aspect of our lives, one question has become relevant: What are the security implications? To answer this, first we have to look and explore the security models of the technologies that IoT is founded upon. In his session at @ThingsExpo, Nevi Kaja, a Research Engineer at Ford Motor Company, discussed some of the security challenges of the IoT infrastructure and related how these aspects impact Smart Living. The material was delivered interac...