﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-易图难 细图大 汇盛人生</title><link>http://www.cnblogs.com/xyicheng/</link><description>爱在进行时</description><language>zh-cn</language><lastBuildDate>Tue, 14 Oct 2008 11:14:27 GMT</lastBuildDate><pubDate>Tue, 14 Oct 2008 11:14:27 GMT</pubDate><ttl>60</ttl><item><title>终端服务器超出了最大允许连接数的解决办法</title><link>http://www.cnblogs.com/xyicheng/archive/2008/08/05/1260793.html</link><dc:creator>xyicheng</dc:creator><author>xyicheng</author><pubDate>Tue, 05 Aug 2008 03:59:00 GMT</pubDate><guid>http://www.cnblogs.com/xyicheng/archive/2008/08/05/1260793.html</guid><wfw:comment>http://www.cnblogs.com/xyicheng/comments/1260793.html</wfw:comment><comments>http://www.cnblogs.com/xyicheng/archive/2008/08/05/1260793.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/xyicheng/comments/commentRss/1260793.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/xyicheng/services/trackbacks/1260793.html</trackback:ping><description><![CDATA[&nbsp;终端服务器超出了最大允许连接数的解决办法
<hr style="border-right: #eeeeee 1px solid; border-top: #eeeeee 1px solid; border-left: #eeeeee 1px solid; border-bottom: #eeeeee 1px solid" align="center" width="94%" size="1" />
<div>&nbsp;</div>
<div>
<table id="content" style="table-layout: fixed; width: 650px" cellspacing="10" cellpadding="0" width="650" border="0">
    <tr>
            <td>
            <div>
            <div class="g_w_100 g_t_wrap g_t_center g_t_bold g_t_24 g_c_pdin c07" id="blogtitle__fks_K" -Rq9jt8FH1D7GYelOE0w-rFETcnE5HA>终端服务器超出了最大允许连接数的解决办法</div>
            <div class="g_blog_list">
            <div class="g_t_center g_c_pdin g_p_center c07 content" id="blogtext__fks_K" style="width: 760px"  -Rq9jt8FH1D7GYelOE0w-rFETcnE5HA>
            <div>1、首先你可以telnet到此主机上(不管你用哪种方法)，当然如果能直接操作机器更好，不过直接操作就不必用命令行了，用控制台更直观，这里不是我们讲述的问题，略过。<br />
            2、Telnet上去后,先看登陆的用户：<br />
            输入命令：query user <br />
            系统返回：<br />
            USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME <br />
            administrator console&nbsp;&nbsp; 0 运行中 .&nbsp; 2004-10-09 15:37 <br />
            user1 UserMachine1&nbsp;&nbsp; 1 运行中 .&nbsp; 2004-10-09 15:37 <br />
            user2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 12 已断开 无 2004-10-09 15:37 </div>
            <div>此时可以看出的可能根我们的不一样，根据具体情况而定。<br />
            看到吗? ID 0 的用户是本地登陆的,ID 1 和 ID 12是3389登陆的用户,前者在运行中，后者已经断开了,但是断开了仍然占用系统资源和通道，我们要把它踢掉。如下进行操作即可。</div>
            <div>输入命令：logoff 12 </div>
            <div>C:\&gt;query user //再看看 <br />
            USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME <br />
            administrator console 0 运行中 . 2004-10-09 15:37 <br />
            user1 UserMachine1&nbsp;&nbsp; 1 运行中 .&nbsp; 2004-10-09 15:37 </div>
            <div>3、如果服务器关闭了telnet功能（这是默认的），还可以通过SqlServer的xp_cmdshell扩展存储过程，使用格式：master.dbo.xp_cmdshell '命令内容'，其余可参考第二步。此方式要求有访问xp_cmdshell的权限。</div>
            </div>
            </div>
            </div>
            </td>
        </tr>
    </table>
</div>
<img src ="http://www.cnblogs.com/xyicheng/aggbug/1260793.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42984/" target="_blank">[新闻]Silverlight 2正式版SDK可以下载</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>Delphi中的容器类（转）</title><link>http://www.cnblogs.com/xyicheng/archive/2008/05/24/1206420.html</link><dc:creator>xyicheng</dc:creator><author>xyicheng</author><pubDate>Sat, 24 May 2008 07:13:00 GMT</pubDate><guid>http://www.cnblogs.com/xyicheng/archive/2008/05/24/1206420.html</guid><wfw:comment>http://www.cnblogs.com/xyicheng/comments/1206420.html</wfw:comment><comments>http://www.cnblogs.com/xyicheng/archive/2008/05/24/1206420.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/xyicheng/comments/commentRss/1206420.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/xyicheng/services/trackbacks/1206420.html</trackback:ping><description><![CDATA[摘要: Delphi中的容器类作者 陈省从Delphi 5开始VCL中增加了一个新的Contnrs单元，单元中定义了８个新的类，全部都是基于标准的TList 类。 TList 类TList 类实际上就是一个可以存储指针的容器类，提供了一系列的方法和属性来添加，删除，重排，定位，存取和排序容器中的类，它是基于数组的机制来实现的容器，比较类似于C++中的Vector和Java中的ArrayList，TList&nbsp;&nbsp;<a href='http://www.cnblogs.com/xyicheng/archive/2008/05/24/1206420.html'>阅读全文</a><img src ="http://www.cnblogs.com/xyicheng/aggbug/1206420.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42983/" target="_blank">[新闻]Silverlight对Flash 微软打垮Adobe</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>Delphi动态数组介绍(转)</title><link>http://www.cnblogs.com/xyicheng/archive/2008/05/24/1206410.html</link><dc:creator>xyicheng</dc:creator><author>xyicheng</author><pubDate>Sat, 24 May 2008 06:35:00 GMT</pubDate><guid>http://www.cnblogs.com/xyicheng/archive/2008/05/24/1206410.html</guid><wfw:comment>http://www.cnblogs.com/xyicheng/comments/1206410.html</wfw:comment><comments>http://www.cnblogs.com/xyicheng/archive/2008/05/24/1206410.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/xyicheng/comments/commentRss/1206410.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/xyicheng/services/trackbacks/1206410.html</trackback:ping><description><![CDATA[<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%; text-align: center" align="center">
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><font size="3"></font></p>
<font size="3"><span style="font-family: 宋体">&nbsp; &nbsp;&nbsp;从 Delphi4起，开始了内建各种类型的动态数组支持。但是，对我们来说动态数组支持似乎做的不够彻底，因为Delphi竟然连删除、插入、移动连续元素的函数都没有提供，让人使用起来总觉得不够爽！！！ </span><span style="font-family: Wingdings">J</span><span style="font-family: 宋体"> 。作为一名程序员，我们当然要有自己解决问题的能力，下面就让我们简单介绍一下Delphi 下的动态数组。</span></font></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">在Delphi中，数组类型有静态数组（a : array[0..1024] of integer）、动态数组（var a : array of integer）、指针数组（即指向静态数组的指针）和开放数组（仅用于参数传递）。静态数组、指针数组有速度快的好处，动态数组有大小可变的优势，权衡之下就有了折衷的办法，那就是定义的动态数组在必要时转换为指针。</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">动态数组声明之后，只有下面几个函数可供操作：</font></span></p>
<p style="margin: 0cm 0cm 0pt 39pt; text-indent: -18pt; line-height: 150%; tab-stops: list 39.0pt"><span style="font-family: 宋体"><font size="3">1．</font>&nbsp;</span><span style="font-family: 宋体"><font size="3">设置数组大小，可以任意缩减或增加数组大小</font></span></p>
<p style="margin: 0cm 0cm 0pt 39pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">Procedure SetLength(var S ; NewLength : integer);</font></span></p>
<p style="margin: 0cm 0cm 0pt 39pt; text-indent: -18pt; line-height: 150%; tab-stops: list 39.0pt"><span style="font-family: 宋体"><font size="3">2．</font>&nbsp;</span><span style="font-family: 宋体"><font size="3">取出连续元素，复制给另一个数组变量</font></span></p>
<p style="margin: 0cm 0cm 0pt 39pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">Function Copy(s;Index,Count : integer) : array ;</font></span></p>
<p style="margin: 0cm 0cm 0pt 39pt; text-indent: -18pt; line-height: 150%; tab-stops: list 39.0pt"><span style="font-family: 宋体"><font size="3">3．</font>&nbsp;</span><span style="font-family: 宋体"><font size="3">取得数组大小及上下限</font></span></p>
<p style="margin: 0cm 0cm 0pt 39pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">Function Length(s):integer;</font></span></p>
<p style="margin: 0cm 0cm 0pt 39pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">Function High(x):integer;</font></span></p>
<p style="margin: 0cm 0cm 0pt 39pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">Function Low(x):integer;</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">值得注意的是，不加const或var修饰的动态数组会被作为形参传递，而动态数组用const修饰并不意味着你不能修改数组里的元素（不信你可以字自己在程序中试试。还有一点是High函数调用了Length 函数，所以我们在获取数组上限时最好直接用 Length(s) 函数。</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">动态数组在内存空间中占用4个字节.&nbsp;&nbsp; 动态数组在内存中的分配表如下：</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">偏移量&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 内容</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 31.5pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">-8&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 32-bit 引用计数</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 31.5pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">-4&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 32-bit 数组长度</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">0..数组长度 * (元素尺寸) - 1&nbsp;数组元素&nbsp;&nbsp;&nbsp; 元素尺寸=Sizeof(元素类型)</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">根据上面的分配情况，可以得到如下结果：</font></span></p>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">如果我们想要清空一个动态数组只需要把&#8220;数组长度&#8221;和&#8220;引用计数&#8221;清空即可。&#8221;引用上面的一句话就是：&#8220;权衡之下就有了折衷的办法，那就是定义的动态数组在必要时转换为指针。&#8221;下面是清空动态数组的函数：</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">procedure DynArraySetZero(var A);</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">var</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">&nbsp;P: PLongint; //占用4个字节，正好符合 32 位内存排列</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">begin</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">&nbsp;P := PLongint(A); // 指向 A 的地址</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">&nbsp;Dec(P); //P 地址偏移量是 sizeof(A)，指向了数组长度</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">&nbsp;P^ := 0; // 长度清空</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">&nbsp;Dec(P); // 指向引用计数</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">&nbsp;P^ := 0; //计数清空。</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">end;</font></span></p>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">上面的函数就这么简单，而且效率也非常高。</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">下面让我们再来看看怎样删除动态数组中的元素,函数体如下：</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">{************************************</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">&nbsp;A 变量类型&nbsp;， elSize = SizeOf(A) </font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">index 开始删除的位置索引 ，Count 删除的数量</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">****************************************}</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">procedure DynArrayDelete(var A; elSize: Longint; index, Count: Integer);</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">var</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">&nbsp;len, MaxDelete: Integer; </font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">&nbsp;P : PLongint; //4 个字节的长整形指针</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">begin</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">&nbsp;P := PLongint(A);// 取的 A 的地址</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">&nbsp;if P = nil then</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">&nbsp;&nbsp;&nbsp; Exit;</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">&nbsp;{</font></span></p>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">下面这句完全等同于 Dec(P) ; len := P^&nbsp;因为 Dec(P) = Pchar(P) &#8211; 4&nbsp;同样是移动4 字节的偏移量，只不过后者按字节来移动&nbsp;&nbsp;&nbsp; }</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 31.5pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">len := PLongint(PChar(P) - 4)^; // 变量的长度 ，偏移量 -4 </font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">&nbsp;if index &gt;= len then //要删除的位置超出范围，退出</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">&nbsp;&nbsp;&nbsp; Exit;</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">&nbsp;MaxDelete := len - index; // 最多删除的数量</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">&nbsp;Count := Min(Count, MaxDelete); // 取得一个较小值</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">&nbsp;if Count = 0 then // 不要求删除</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">&nbsp;&nbsp;&nbsp; Exit;&nbsp;</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 31.5pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">Dec(len, Count);// 移动到要删除的位置 </font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: -63pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">&nbsp;MoveMemory(PChar(P)+index*elSize , PChar(P)+(index + Count)*elSize , (len-index)*elSize); //移动内存</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">&nbsp;Dec(P);&nbsp;//移出 &#8220;数组长度&#8221;位置</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">&nbsp;Dec(P);&nbsp;//移出&#8220;引用计数&#8221; 位置</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">&nbsp;//重新再分配调整内存,len 新的长度. Sizeof(Longint) * 2 = 2*Dec(P)</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">&nbsp;ReallocMem(P, len * elSize + Sizeof(Longint) * 2);</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">&nbsp;Inc(P); // 指向数组长度</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">&nbsp;P^ := len; // new length </font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">&nbsp;Inc(P); // 指向数组元素，开始的位置</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">&nbsp;PLongint(A) := P;</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">end;</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">&nbsp;</font></span></p>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">对上面的例子，我们需要注意的是 elSize 参数 ，它必须是 SizeOf(DyArray_Name),表示元素所占用的字节数。</font></span></p>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><font size="3"><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp; 相信看了上面的例子后，对于动态数组的拷贝，移动想必也可以自己实现了吧 </span><span style="font-family: Wingdings">J</span></font></p>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">后续：</font></span></p>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><span style="font-family: 宋体"><font size="3">&nbsp;&nbsp;&nbsp; 其实,Delphi 对许多类型的内存分配都很相似，比如 string 类型，其实它和动态数组是很相似的，我们完全可以把它拿来当成动态数组。实质上 string 是 Pchar 的简易版本。不管怎么说，了解一些内存的分配对我们这些开发人员来说还是有一些好处的。</font></span></p>
<img src ="http://www.cnblogs.com/xyicheng/aggbug/1206410.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42983/" target="_blank">[新闻]Silverlight对Flash 微软打垮Adobe</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>为sql server 表数据生成创建的储存过程（生成insert 脚本） (转)</title><link>http://www.cnblogs.com/xyicheng/archive/2008/05/15/1198472.html</link><dc:creator>xyicheng</dc:creator><author>xyicheng</author><pubDate>Thu, 15 May 2008 08:05:00 GMT</pubDate><guid>http://www.cnblogs.com/xyicheng/archive/2008/05/15/1198472.html</guid><wfw:comment>http://www.cnblogs.com/xyicheng/comments/1198472.html</wfw:comment><comments>http://www.cnblogs.com/xyicheng/archive/2008/05/15/1198472.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/xyicheng/comments/commentRss/1198472.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/xyicheng/services/trackbacks/1198472.html</trackback:ping><description><![CDATA[<h2><a id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/wuyisky/archive/2007/08/14/855225.html">为sql server 表数据生成创建的储存过程（生成insert 脚本）</a> </h2>
<div>
<p style="text-align: left" align="left">使用SQL Server 2000自带的&#8220;生成SQL脚本&#8221;工具，可以生成创建表、视图、存储过程等的SQL脚本。那么，能否将表中的数据也生成为SQL脚本，在查询分析器中执行这些脚本后自动将数据导入到SQL Server中呢？答案是肯定的。</p>
<p style="text-align: left" align="left"><span style="color: blue">CREATE PROCEDURE </span>&nbsp;&nbsp;dbo.OutputData&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;@tablename&nbsp;&nbsp; <span style="color: blue">sysname&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;<span style="color: blue">AS&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;<span style="color: blue">declare &nbsp;&nbsp;@column&nbsp;&nbsp; <span style="color: blue">varchar</span>(1000)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;<span style="color: blue">declare &nbsp;&nbsp;@columndata&nbsp;&nbsp; <span style="color: blue">varchar</span>(1000)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;<span style="color: blue">declare &nbsp;&nbsp;@sql&nbsp;&nbsp; <span style="color: blue">varchar</span>(4000)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;<span style="color: blue">declare &nbsp;&nbsp;@xtype&nbsp;&nbsp; <span style="color: blue">tinyint&nbsp; </span>&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;<span style="color: blue">declare &nbsp;&nbsp;@name&nbsp;&nbsp; <span style="color: blue">sysname&nbsp; </span>&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;<span style="color: blue">declare &nbsp;&nbsp;@objectId&nbsp;&nbsp; <span style="color: blue">int&nbsp; </span>&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;<span style="color: blue">declare &nbsp;&nbsp;@objectname&nbsp;&nbsp; <span style="color: blue">sysname&nbsp; </span>&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;<span style="color: blue">declare &nbsp;&nbsp;@ident&nbsp;&nbsp; <span style="color: blue">int&nbsp; </span>&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
</span>&nbsp;<span style="color: blue">set &nbsp;&nbsp;<span style="color: blue">nocount </span>&nbsp;&nbsp;<span style="color: blue">on&nbsp; </span>&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;<span style="color: blue">set &nbsp;&nbsp;@objectId=<span style="color: blue">object_id</span>(@tablename)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;<span style="color: blue">if &nbsp;@objectId&nbsp;&nbsp; <span style="color: blue">is </span>&nbsp;&nbsp;<span style="color: blue">null </span>&nbsp;&nbsp;<span style="color: green">--&nbsp;&nbsp; </span></span><span style="color: green">判断对象是否存在&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; </span>&nbsp;&nbsp; <span style="color: blue">begin&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">print &nbsp;@tablename +&nbsp;'</span>对象不存在'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">return&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;&nbsp;&nbsp; <span style="color: blue">end &nbsp;&nbsp;&nbsp;&nbsp;</span></p>
<p style="text-align: left" align="left">&nbsp;<span style="color: blue">set @objectname=<span style="color: blue">rtrim</span>(<span style="color: blue">object_name</span>(@objectId))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;<span style="color: blue">if @objectname <span style="color: blue">is null or charindex</span>(@objectname,@tablename)=0<br />
</span>&nbsp;&nbsp;&nbsp; <span style="color: blue">begin&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">print &nbsp;@tablename +&nbsp;'</span>对象不在当前数据库中'&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">return&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;&nbsp;&nbsp; <span style="color: blue">end&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;&nbsp; </p>
<p style="text-align: left" align="left">&nbsp;<span style="color: blue">if &nbsp;<span style="color: blue">OBJECTPROPERTY</span>(@objectId,'IsTable')&nbsp;&nbsp; &lt;&nbsp;&nbsp; &gt;&nbsp;&nbsp; 1&nbsp;&nbsp; <span style="color: green">--&nbsp;&nbsp; </span></span><span style="color: green">判断对象是否是表&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;&nbsp;&nbsp; <span style="color: blue">begin&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">print &nbsp;@tablename +&nbsp;'</span>对象不是表'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">return&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;&nbsp;&nbsp; <span style="color: blue">end&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;&nbsp; </p>
<p style="text-align: left" align="left">&nbsp;<span style="color: blue">select &nbsp;&nbsp;@ident=status&amp;0x80&nbsp;&nbsp; <span style="color: blue">from </span>&nbsp;&nbsp;syscolumns&nbsp;&nbsp; <span style="color: blue">where </span>&nbsp;&nbsp;id=@objectid&nbsp;&nbsp; <span style="color: blue">and </span>&nbsp;&nbsp;status&amp;0x80=0x80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&nbsp;&nbsp;&nbsp; </p>
<p style="text-align: left" align="left">&nbsp;<span style="color: blue">if @ident <span style="color: blue">is </span>&nbsp;&nbsp;<span style="color: blue">not </span>&nbsp;&nbsp;<span style="color: blue">null&nbsp; </span>&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;&nbsp;&nbsp; <span style="color: blue">print &nbsp;&nbsp;'SET&nbsp;&nbsp; IDENTITY_INSERT&nbsp;&nbsp; '+ @TableName + '&nbsp;&nbsp; ON'&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<p style="text-align: left" align="left">&nbsp;<span style="color: green">--</span><span style="color: green">定义游标，循环取数据并生成Insert语句<br />
</span>&nbsp;<span style="color: blue">declare &nbsp;syscolumns_cursor&nbsp;<span style="color: blue">cursor for&nbsp; </span>&nbsp;<br />
</span>&nbsp;&nbsp;&nbsp; <span style="color: blue">select &nbsp;&nbsp;c.name,c.xtype&nbsp;&nbsp; <span style="color: blue">from </span>&nbsp;&nbsp;syscolumns&nbsp;&nbsp; c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">where &nbsp;&nbsp;c.id=@objectid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">order &nbsp;&nbsp;<span style="color: blue">by </span>&nbsp;&nbsp;c.colid&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<p style="text-align: left" align="left">&nbsp;<span style="color: green">--</span><span style="color: green">打开游标<br />
</span>&nbsp;<span style="color: blue">open &nbsp;&nbsp;syscolumns_cursor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;<span style="color: blue">set &nbsp;@column=''&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;<span style="color: blue">set &nbsp;@columndata=''&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;<span style="color: blue">fetch &nbsp;&nbsp;<span style="color: blue">next </span>&nbsp;&nbsp;<span style="color: blue">from </span>&nbsp;&nbsp;syscolumns_cursor&nbsp;&nbsp; <span style="color: blue">into </span>&nbsp;&nbsp;@name,@xtype&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;<span style="color: blue">while &nbsp;&nbsp;@@fetch_status&nbsp;&nbsp; &lt;&gt; -1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;&nbsp;&nbsp; <span style="color: blue">begin&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;&nbsp;&nbsp; <span style="color: blue">if &nbsp;&nbsp;@@fetch_status&nbsp;&nbsp; &lt;&gt; -2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">begin&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">if &nbsp;&nbsp;@xtype&nbsp;&nbsp; <span style="color: blue">not </span>&nbsp;&nbsp;<span style="color: blue">in</span>(189,34,35,99,98)&nbsp;&nbsp; <span style="color: green">--timestamp</span></span><span style="color: green">不需处理，image,text,ntext,sql_variant 暂时不处理&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">begin&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">set &nbsp;&nbsp;@column=@column +&nbsp;<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">case &nbsp;&nbsp;<span style="color: blue">when </span>&nbsp;&nbsp;<span style="color: blue">len</span>(@column)=0&nbsp;&nbsp; <span style="color: blue">then </span>''&nbsp;&nbsp;<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">else &nbsp;&nbsp;','<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">end + @name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">set &nbsp;&nbsp;@columndata = @columndata +&nbsp;<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">case &nbsp;&nbsp;<span style="color: blue">when </span>&nbsp;&nbsp;<span style="color: blue">len</span>(@columndata)=0&nbsp;&nbsp; <span style="color: blue">then </span>&nbsp;&nbsp;''&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">else &nbsp;&nbsp;','','','<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">end &nbsp;+&nbsp;<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">case &nbsp;&nbsp;<span style="color: blue">when </span>&nbsp;@xtype&nbsp;&nbsp; <span style="color: blue">in</span>(167,175)&nbsp;<span style="color: blue">then </span>&nbsp;&nbsp;'''''''''+'+@name+'+'''''''''&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: green">--varchar,char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">when &nbsp;&nbsp;@xtype&nbsp;&nbsp; <span style="color: blue">in</span>(231,239)&nbsp;&nbsp; <span style="color: blue">then </span>&nbsp;&nbsp;'''N''''''+'+@name+'+'''''''''&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: green">--nvarchar,nchar&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">when &nbsp;&nbsp;@xtype=61&nbsp;&nbsp; <span style="color: blue">then </span>&nbsp;&nbsp;'''''''''+convert(char(23),'+@name+',121)+'''''''''&nbsp;&nbsp; <span style="color: green">--datetime&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">when &nbsp;&nbsp;@xtype=58&nbsp;&nbsp; <span style="color: blue">then </span>&nbsp;&nbsp;'''''''''+convert(char(16),'+@name+',120)+'''''''''&nbsp;&nbsp; <span style="color: green">--smalldatetime&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span></span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: blue">when &nbsp;&nbsp;@xtype=36&nbsp;&nbsp; <span style="color: blue">then </span>&nbsp;&nbsp;'''''''''+convert(char(36),'+@name+')+'''''''''&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: green">--uniqueidentifier&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">else &nbsp;&nbsp;@name&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">end&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">end&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">end&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;&nbsp;&nbsp; <span style="color: blue">fetch &nbsp;&nbsp;<span style="color: blue">next </span>&nbsp;&nbsp;<span style="color: blue">from </span>&nbsp;&nbsp;syscolumns_cursor&nbsp;&nbsp; <span style="color: blue">into </span>&nbsp;&nbsp;@name,@xtype&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;&nbsp;&nbsp; <span style="color: blue">end&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;<span style="color: blue">close &nbsp;&nbsp;syscolumns_cursor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;<span style="color: blue">deallocate &nbsp;&nbsp;syscolumns_cursor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&nbsp;&nbsp;&nbsp; </p>
<p style="text-align: left" align="left">&nbsp;<span style="color: blue">set &nbsp;@sql='set&nbsp;&nbsp; nocount&nbsp;&nbsp; on&nbsp;&nbsp; select&nbsp;&nbsp; ''insert&nbsp;&nbsp; '+@tablename+'('+@column+')&nbsp;&nbsp; values(''as&nbsp;&nbsp; ''--'','+@columndata+','')''&nbsp;&nbsp; from&nbsp;&nbsp; '+@tablename&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&nbsp;&nbsp; </p>
<p style="text-align: left" align="left">&nbsp;<span style="color: blue">print &nbsp;&nbsp;'--'+@sql&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;<span style="color: blue">exec(@sql)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&nbsp;&nbsp;&nbsp; </p>
<p style="text-align: left" align="left">&nbsp;<span style="color: blue">if &nbsp;&nbsp;@ident&nbsp;&nbsp; <span style="color: blue">is </span>&nbsp;&nbsp;<span style="color: blue">not </span>&nbsp;&nbsp;<span style="color: blue">null&nbsp; </span>&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span>&nbsp;<span style="color: blue">print &nbsp;'SET&nbsp;&nbsp; IDENTITY_INSERT&nbsp;&nbsp; '+@TableName+'&nbsp;&nbsp; OFF'&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<p style="text-align: left" align="left">调用时&nbsp;exec&nbsp;&nbsp; OutputData&nbsp;&nbsp; 'myuser' 其中myUser中当前数据库中存在的表</p>
</div>
<img src ="http://www.cnblogs.com/xyicheng/aggbug/1198472.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42981/" target="_blank">[新闻]IBM扩大研究规模 在上海成立研究院</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>Delphi7 函数</title><link>http://www.cnblogs.com/xyicheng/archive/2008/05/10/1190942.html</link><dc:creator>xyicheng</dc:creator><author>xyicheng</author><pubDate>Sat, 10 May 2008 02:01:00 GMT</pubDate><guid>http://www.cnblogs.com/xyicheng/archive/2008/05/10/1190942.html</guid><wfw:comment>http://www.cnblogs.com/xyicheng/comments/1190942.html</wfw:comment><comments>http://www.cnblogs.com/xyicheng/archive/2008/05/10/1190942.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/xyicheng/comments/commentRss/1190942.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/xyicheng/services/trackbacks/1190942.html</trackback:ping><description><![CDATA[函数由一句或多句代码组成，可以实现某个特定的功能。使用函数可以使代码更加易读、易懂，加快编程速度及减少重复代码。过程与函数类似，过程与函数最重要的区别在于，过程没有返回值，而函数能有返回值。
<p>　　在Delphi 7.0中，已为我们定义好了非常多的函数，大致分类有6种：数据类型转换函数、字符串、数组操作函数、文件、磁盘操作函数、内存、指针操作函数、数学运算函数、日期函数。</p>
<p>　　在Delphi中调用函数，一般情况下可以直接使用函数即可，但由于有一些函数未包含在Uses中列出的单元中(默认单元有Windows,Messages,SysUtils,Variants,Classes,Graphics, Controls,Forms,Dialogs;)，所以需要我们手动添加单元。比如，MidStr函数就未包含在这些单元中，MidStr所属单元在StrUtils中，因此我们将StrUtils添加Uses中即可。</p>
<p>　　在本手册中，凡是未包含在默认列出的单元中的函数，都标明了其所属的单元，使用时应当注意。</p>
<h2>　　一、数据类型转换函数</h2>
<p>　　在我们编写程序当中，根据不同情况，会使用到多种数据类型。当要对不同的类型进行操作时，必须要将不同的类型转换成同样的类型。因此熟练地掌握数据类型的转换是非常重要的。</p>
<h3>　　1.FloatToStr</h3>
<p>　　功能说明：该函数用于将&#8220;浮点型&#8221;转换成&#8220;字符型&#8221;。</p>
<p>　　参考实例：</p>
<p>　　Edit1.Text := FloatToStr(1.981); </p>
<h3>　　2.IntToStr</h3>
<p>　　功能说明：该函数用于将&#8220;整数型&#8221;转换成&#8220;字符型&#8221;。</p>
<p>　　参考实例：</p>
<p>　　S := IntToStr(10);(注：S为String类型变量。)</p>
<h3>　　3.IntToHex</h3>
<p>　　功能说明：该函数用于将&#8220;十进制&#8221;转换成&#8220;十进制&#8221;。该函数有二个参数。第一个参数为要转换的十进制数据，第二个参数是指定使用多少位来显示十六进制数据。</p>
<p>　　参考实例：</p>
<p>　　Edit1.Text := IntToHex('100', 2);</p>
<p>　　执行结果，Edit1.Text等于64。</p>
<p>　　注意：Delphi没有提供专门的&#8220;十六进制&#8221;转换为&#8220;十进制&#8221;的函数。使用StrToInt函数可以实现这个功能。具体代码是：I := StrToInt('S\' + '64'); 这时I等于100。加上一个'S\'即可将&#8220;十六进制&#8221;转换为&#8220;十进制&#8221;。</p>
<h3>　　4.StrToInt</h3>
<p>　　功能说明：该函数用于将&#8220;字符型&#8221;转换成&#8220;整数型&#8221;。</p>
<p>　　参考实例：</p>
<p>　　I := StrToInt('100');</p>
<p>　　注意：不能转换如 StrToInt('ab')或StrToInt('好')这样的类型，因为他们并不存在数字型。</p>
<h3>　　5.StrToFloat</h3>
<p>　　功能说明：该函数用于将&#8220;字符型&#8221;转换成&#8220;浮点型&#8221;。</p>
<p>　　参考实例：</p>
<p>　　N := StrToFloat(Edit1.Text);</p>
<p>　　注意：Edit1.Text中的内容为1.981(凡在Edit控件中显示的文本均为字符串)。N为Double类型，用于保存转换后的浮点型数据。</p>
<h2>　　二、字符串、数组操作函数</h2>
<p>　　对字符串及数组的操作，是每个程序员必须要掌握的。熟练的使用这些函数，在编程时能更加得心应手。</p>
<h3>　　1.Copy</h3>
<p>　　功能说明：该函数用于从字符串中复制指定范围中的字符。该函数有3个参数。第一个参数是数据源(即被复制的字符串)，第二个参数是从字符串某一处开始复制，第三个参数是要复制字符串的长度(即个数)。最后函数返回一个新的字符串(即是我们指定要复制的字符串内容)。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　S: String;</p>
<p>　　 　MyStr: String; // 保存新的字符串</p>
<p>　　begin</p>
<p>　　 　S := 'I Love China!';</p>
<p>　　//下面将获取I Love China中的&#8220;Love&#8221;字符串。</p>
<p>　　MyStr := Copy(S, 3, 4);</p>
<p>　　end;</p>
<p>　　执行结果，MyStr等于&#8220;Love&#8221;，&#8220;Love&#8221;字符串在&#8220;I Love China!&#8221;中第3个位置开始，所以第二个参数为3，&#8220;Love&#8221;一共有4个字符，所以第三个参数为4。</p>
<h3>　　2.Concat</h3>
<p>　　功能说明：连接两个或多个字符串为一个字符串。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　S1, S2: String;</p>
<p>　　begin</p>
<p>　　 　S1 := Concat('A', 'B'); // 连接两个字符串，S1变量等于AB。</p>
<p>　　 　S2 := Concat('Borland', ' Delphi', ' 7.0'); // 连接三个字符，S2变量等于Borland Delphi 7.0。</p>
<p>　　end;</p>
<h3>　　3.Delete</h3>
<p>　　功能说明：删除字符串中指定的字符串。该函数有三个参数。第一个参数为要进行处理的字符串，第二个参数为从何处开始删除，第三个参数为删除的字符个数。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　S: String;</p>
<p>　　begin</p>
<p>　　 　S := 'I Like Reading CPCW.'; </p>
<p>　　 　// 下面的代码将删除S变量中的&#8220;C&#8221;字符。</p>
<p>　　 　Delete(S, 16, 1);</p>
<p>　　end;</p>
<p>　　此时S变量则是I Like Reading PCW.(&#8220;C&#8221;已经不存在了)。</p>
<h3>　　4.High</h3>
<p>　　功能说明：返回数组下标的最大值。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　arrText: array[0..9] of Char;</p>
<p>　　 　i: Integer;</p>
<p>　　begin</p>
<p>　　 　i := High(arrText); // i的值则为9</p>
<p>　　end;</p>
<h3>　　5.Insert</h3>
<p>　　功能说明：插入一个字符(串)。该函数有三个参数。第一个参数为要插入的字符(串)，第二个参数为被插入字符串(源字符串)，第三个参数为从何处插入。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　S: String;</p>
<p>　　begin</p>
<p>　　 　S := 'Wat is your name?';</p>
<p>　　 　// 上面句子中的What单词查一个&#8220;h&#8221;字符，下面使用Insert函数将h添加进去。</p>
<p>　　 　Insert('h', S, 2); // 将&#8220;h&#8221;从第2位处插入。</p>
<p>　　end;</p>
<h3>　　6.LeftStr(所在单元：StrUtils)</h3>
<p>　　功能说明：返回字符串左边指定个数的新字符(串)。该函数有两个参数。第一个参数为完整的字符串，第二个参数为指定个数。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　S, A: String;</p>
<p>　　begin</p>
<p>　　 　S := 'MSN Messenger';</p>
<p>　　 A := LeftStr(S, 3); // 从最左边开始，获取左边的三个字符。因此A变量则等于MSN。</p>
<p>　　end;</p>
<h3>　　7.Length</h3>
<p>　　功能说明：该函数用于统计指定字符串的长度(即个数)。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　nLen1, nLen2: Integer; // 用于保存字符串长度</p>
<p>　　begin</p>
<p>　　 　nLen1 := Length('CPCW');</p>
<p>　　nLen2 := Length('电脑报');</p>
<p>　　end;</p>
<p>　　执行结果，nLen1等于4，nLen2等于6。由于一个汉字相当于两个字符的长度，所以3个汉字的长度为6。</p>
<h3>　　8.Low</h3>
<p>　　功能说明：返回数组下标的最小值。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　arrText: array[1..9] of Char;</p>
<p>　　 　i: Integer;</p>
<p>　　begin</p>
<p>　　 　i:= High(arrText); // i的值则为1</p>
<p>　　end;</p>
<h3>　　9.LowerCase</h3>
<p>　　功能说明：将字符(串)中的英文字符转换为小写。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　S, A: String;</p>
<p>　　begin</p>
<p>　　 　S := 'ABC';</p>
<p>　　 　A := UpperCase(S); // 经过UpperCase函数转换后，A则等于abc。</p>
<p>　　end;</p>
<h3>　　10.MidStr(所在单元：StrUtils)</h3>
<p>　　功能说明：返回指定范围内的字符串。该函数有三个参数。第一个参数为源字符串，第二个参数为起点，第三个参数为结束点。通过第二、第三个参数则可指定要复制字符串的范围。</p>
<p>　　Copy函数与此函数类似。MidStr主要用于处理含有中文字符的字符串。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　S: String;</p>
<p>　　 　H: String;</p>
<p>　　begin</p>
<p>　　 　S := MidStr('China', 1, 2); // S变量为Ch</p>
<p>　　 　H := MidStr('电脑报', 1, 1); // H变量为&#8220;电&#8221;。如果使用Copy函数，则应是H := Copy('电脑报, 1, 2)，否则返回的将不是&#8220;电&#8221;字。因此在使用操作含有中文的字符串时，最好使用MidStr。</p>
<p>　　end;</p>
<h3>　　11.Pos</h3>
<p>　　功能说明：查找字符(串)所在位置。该函数有二个参数。第一个参数为要查找的字符(串)，第二个参数为被查找字符(串)。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　nPos: Integer; // 用于保存查找的字符所在位置</p>
<p>　　begin</p>
<p>　　 　nPos := Pos('Like', 'I Like Reading!');</p>
<p>　　end;</p>
<p>　　此时nPos等于3。如果没有查找到，则nPos为0。</p>
<p>　　注意：Pos函数在查找时是要区分字符大小的。如果要实现不区分大小，那么需要使用UpperCase或LowerCase函数将两个参数的字符(串)转换为&#8220;大写&#8221;或&#8220;小写&#8221;再进行查找。</p>
<p>　　另外还有一个查找字符(串)的函数----AnsiPos，该函数的使用方法与Pos函数完全一样。当你查找的是汉字时，最好使用AnsiPos函数。</p>
<h3>　　12.RightStr(所在单元：StrUtils)</h3>
<p>　　功能说明：返回字符串右边指定个数的新字符(串)。该函数有两个参数。第一个参数为完整的字符串，第二个参数为指定个数。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　S, A: String;</p>
<p>　　begin</p>
<p>　　 　S := 'MSN Messenger';</p>
<p>　　 　A := RightStr(S, 3); // 从最右边开始，获取右边的三个字符。因此A变量则等于ger。</p>
<p>　　end;</p>
<h3>　　13.SetLength</h3>
<p>　　功能说明：设置字符串或动态数组长度。该函数有两个参数。第一个参数为要设置的字符串变量或动态数组变量，第二个参数为指定的长度，其取值范围在0到255之间。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　S: String;</p>
<p>　　 　arrText: array of Char; // 定义一个动态数组</p>
<p>　　begin</p>
<p>　　 　SetLength(S, 10); // 当设置后，S变量只能赋值长度为10的字符串。</p>
<p>　　 　SetLength(arrText, 10); // 只有使用SetLength为动态数组分配内存空间后才能使用动态数组。这句代码的作用相当于arrText: array[0..9] of Char</p>
<p>　　end;</p>
<h3>　　14.StrPCopy</h3>
<p>　　功能说明：将字符串复制到字符数组中。该函数有两个参数。第一个参数为&#8220;目标数组&#8221;，第二个参数为&#8220;字符串&#8221;。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　arrChar: array[0..255] of Char; // 这里声明了长度为256的Char型数组</p>
<p>　　begin</p>
<p>　　 　StrPCopy(arrChar, 'Come on, baby!');</p>
<p>　　end;</p>
<h3>　　15.Trim</h3>
<p>　　功能说明：删除字符串左右两边的空格(无论左右两边有多少个空格均被全部删除)。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　S: String;</p>
<p>　　begin</p>
<p>　　 　S := ' Delphi 7.0 ';</p>
<p>　　 　S := Trim(S);</p>
<p>　　end;</p>
<h3>　　16.TrimLeft</h3>
<p>　　功能说明：删除字符串左边的空格(无论左边有多少个空格均被全部删除)。</p>
<p>　　参考实例：</p>
<p>　　 　S := TrimLeft(' Delphi');</p>
<h3>　　17.TrimRight</h3>
<p>　　功能说明：删除字符串左边的空格(无论左边有多少个空格均被全部删除)。</p>
<p>　　参考实例：</p>
<p>　　 　S := TrimRight('Delphi ');</p>
<h3>　　18.UpperCase</h3>
<p>　　功能说明：将字符(串)中的英文字符转换为大写。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　S, A: String;</p>
<p>　　begin</p>
<p>　　 　S := 'abc';</p>
<p>　　 　A := UpperCase(S); // 经过UpperCase函数转换后，A则等于ABC。</p>
<p>　　end;</p>
<h2>　　三、文件、磁盘操作函数</h2>
<p>　　软件大多都要对文件、磁盘进行操作。熟悉掌握这些函数可以帮助你轻松实现创建、删除、保存文件等功能。</p>
<h3>　　1.Append</h3>
<p>　　功能说明：追加内容到文件中。文件必须要存在。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　S: String;</p>
<p>　　 　F: TextFile;</p>
<p>　　begin</p>
<p>　　 　S := 'This is a book.';</p>
<p>　　AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接，后面可以使用F变量对文件进行操作。 </p>
<p>　　 　Append(F); // 以追加的方式打开文件</p>
<p>　　 　Writeln(F, S); // 将S变量中的内容追加到文本尾后。</p>
<p>　　 　CloseFile(F); // 关闭文件</p>
<p>　　end;</p>
<h3>　　2.AssignFile</h3>
<p>　　功能说明：与指定的文件建立连接。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　F: TextFile; // 声明文本文件类型变量</p>
<p>　　begin</p>
<p>　　 　AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接，后面可以使用F变量对文件进行操作。</p>
<p>　　end;</p>
<h3>　　3.ChDir</h3>
<p>　　功能说明：改变当前目录(文件夹)。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　sDir: String;</p>
<p>　　begin</p>
<p>　　 　sDir := 'C:\Windows';</p>
<p>　　 　ChDir(sDir); // 此时，系统的当前目录则为C:\Windows目录。</p>
<p>　　end;</p>
<h3>　　4.CloseFile</h3>
<p>　　功能说明：关闭文件。当对文件的操作完成后，应该使用CloseFile函数关闭打开的文件。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　S: String;</p>
<p>　　 　AllText: String;</p>
<p>　　 　F: TextFile;</p>
<p>　　begin</p>
<p>　　AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接，后面可以使用F变量对文件进行操作。</p>
<p>　　 　Reset(F); // 打开文件</p>
<p>　　 　while not EOF(F) do begin // 使用While循环，一直判断是否到了文件未尾</p>
<p>　　 　　Readln(F, S); // 读取一行文本</p>
<p>　　 　　AllText := AllText + S;</p>
<p>　　 　end;</p>
<p>　　 　CloseFile(F); // 关闭文件</p>
<p>　　end;</p>
<h3>　　5.DeleteFile</h3>
<p>　　功能说明：删除指定的文件。该函数只有一个参数。此参数为欲删除文件的完整路径。如果删除成功，则返回True。若删除失败、或文件不存在则返回False。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　IsOK: Boolean; // 用于保存删除状态</p>
<p>　　begin</p>
<p>　　 　IsOK := DeleteFile('C:\My Documents\Index.html'); // 函数执着后，将结果返回给IsOK变量。如果IsOK变量为True，则表示文件删除成功。</p>
<p>　　 　if IsOK then ShowMessage('文件删除成功！')</p>
<p>　　 　else ShowMessage('文件删除失败！');</p>
<p>　　end;</p>
<h3>　　6.DirectoryExists</h3>
<p>　　功能说明：检测指定的文件夹否存在。如果存在则返回True，反之则为False。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　IsExists: Boolean;</p>
<p>　　begin</p>
<p>　　 　IsExists := DirectoryExists ('C:\Windows');</p>
<p>　　 　if IsExists then ShowMessage('Windows文件夹存在！')</p>
<p>　　 　else ShowMessage('Windows文件夹不存在！');</p>
<p>　　end;</p>
<h3>　　7.DiskFree</h3>
<p>　　功能说明：获取指定磁盘的剩余空间。该函数只有一个参数。该参数用于指定要获取剩余空间的磁盘号。当参数为0时，表示获取当前磁盘的剩余空间，1为A盘，2为B盘，以此类推。如果返回值为-1，表示指定的磁盘无效。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　FreeSize: Int64;</p>
<p>　　begin</p>
<p>　　 　FreeSize := DiskFree(3); // 获取C盘中的剩余空间。返回的值是以&#8220;字节&#8221;为单位的。</p>
<p>　　end;</p>
<h3>　　8.DiskSize</h3>
<p>　　功能说明：获取指定磁盘的空间。该函数只有一个参数。该参数用于指定要获取磁盘空间的磁盘号。当参数为0时，表示获取当前磁盘的空间，1为A盘，2为B盘，以此类推。如果返回值为-1，表示指定的磁盘无效。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　DiskSize: Int64;</p>
<p>　　begin</p>
<p>　　 　DiskSize:= DiskSize(3); // 获取C盘的空间。返回的值是以&#8220;字节&#8221;为单位的。</p>
<p>　　end;</p>
<h3>　　9.EOF</h3>
<p>　　功能说明：判断文件指针是否移动到了文件未尾。当EOF函数返回值为True时，则不可以使用Readln函数进行读取文件了。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　S: String;</p>
<p>　　 　AllText: String;</p>
<p>　　 　F: TextFile;</p>
<p>　　begin</p>
<p>　　AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接，后面可以使用F变量对文件进行操作。</p>
<p>　　 　Reset(F); // 打开文件</p>
<p>　　 　while not EOF(F) do begin // 使用While循环，一直判断是否到了文件未尾</p>
<p>　　 　　Readln(F, S); // 读取一行文本</p>
<p>　　 　　AllText := AllText + S;</p>
<p>　　 　end;</p>
<p>　　end;</p>
<h3>　　10.Erase</h3>
<p>　　功能说明：删除文件。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　F: File;</p>
<p>　　begin</p>
<p>　　AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接，后面可以使用F变量对文件进行操作。</p>
<p>　　 　Reset(F); // 打开文件</p>
<p>　　 　CloseFile(F); // 关闭文件</p>
<p>　　 　Erase(F); // 删除文件。在删除文件之前必须先关闭文件。</p>
<p>　　end;</p>
<h3>　　11.FileExists</h3>
<p>　　功能说明：检测指定的文件否存在。如果存在则返回True，反之则为False。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　IsExists: Boolean;</p>
<p>　　begin</p>
<p>　　 　IsExists := FileExists('C:\Test.txt');</p>
<p>　　 　if IsExists then ShowMessage('该文件存在！')</p>
<p>　　 　else ShowMessage('该文件不存在！');</p>
<p>　　end;</p>
<h3>　　12.FileSize</h3>
<p>　　功能说明：获取文件大小。返回的结果是字节为单位。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　F: file of Byte;</p>
<p>　　 　nSize: Longint;</p>
<p>　　begin</p>
<p>　　AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接，后面可以使用F变量对文件进行操作。</p>
<p>　　 　Reset(F); // 打开文件</p>
<p>　　 　nSize := FileSize(F); // 获取文件大小。</p>
<p>　　 　CloseFile(F); // 关闭文件</p>
<p>　　end;</p>
<h3>　　13.ForceDirectories</h3>
<p>　　功能说明：创建新的子目录。路径中不存在的目录将一同创建。</p>
<p>　　参考实例：</p>
<p>　　ForceDirectories('C:\Flash\MyFolder'); // 如果Flash文件夹本身不存的话，那么将会先创建Flash文件夹，然后再创建MyFolder文件夹。</p>
<h3>　　14.MkDir</h3>
<p>　　功能说明：创建一个新的子目录(文件夹)。</p>
<p>　　参考实例：</p>
<p>　　MkDir('C:\MyFolder'); // 在C盘根目录中创建了一个名叫MyFolder的文件夹。</p>
<p>　　需要注意的是，如果在本身不存在的目录中创建子目录将会失败。比如C盘根本不存在Flash文件夹，写成MkDir('C:\Flash\MyFolder');这样将不能成功创建MyFolder文件夹。</p>
<h3>　　15.Reset</h3>
<p>　　功能说明：以只读方式打开文件。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　F: TextFile; // 声明文本文件类型变量</p>
<p>　　begin</p>
<p>　　 　AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接，后面可以使用F变量对文件进行操作。</p>
<p>　　 　Reset(F); // 打开文件</p>
<p>　　end;</p>
<h3>　　16.Rewrite</h3>
<p>　　功能说明：以可写方式打开文件。如果文件不存在，将会自动创建。使用该函数，将会覆盖文件中的所有内容。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　F: TextFile; // 声明文本文件类型变量</p>
<p>　　begin</p>
<p>　　 　AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接，后面可以使用F变量对文件进行操作。</p>
<p>　　 　Rewrite(F); // 打开文件。如果文件不存在，将会在C盘中创建MyFile.txt文件。如果文件存在，将会覆盖MyFile.txt中的所有内容。</p>
<p>　　end;</p>
<h3>　　17.Readln</h3>
<p>　　功能说明：读取一行文本。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　S: String;</p>
<p>　　 　F: TextFile;</p>
<p>　　begin</p>
<p>　　AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接，后面可以使用F变量对文件进行操作。</p>
<p>　　 　Reset(F); // 打开文件</p>
<p>　　 　Readln(F, S); // 读取一行文本到S变量中</p>
<p>　　end;</p>
<h3>　　18.Rename</h3>
<p>　　功能说明：更改文件名。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　F: File;</p>
<p>　　begin</p>
<p>　　AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接，后面可以使用F变量对文件进行操作。</p>
<p>　　 　ReName(F, 'C:\NewFile.txt'); // 更名为NewFile.txt</p>
<p>　　end;</p>
<h3>　　19.Writeln</h3>
<p>　　功能说明：写入一行文本。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　S: String;</p>
<p>　　 　F: TextFile;</p>
<p>　　begin</p>
<p>　　 　S := 'This is a book.';</p>
<p>　　AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接，后面可以使用F变量对文件进行操作。</p>
<p>　　 　Rewrite(F); // 创建新文件</p>
<p>　　 　Writeln(F, S); // 将S变量中的内容写入文本中。</p>
<p>　　end;</p>
<h2>　　四、内存、指针操作函数</h2>
<p>　　在编程中，动态数组为我们处理数据带来了很大的方便。Windows API函数也为增强程序的功能提供了强有力的保障。当我们在使用这些动态数组及API函数时，常常需要动态分配内存空间，这样动态数组才能被我们使用，API函数才能正确的返回结果。因此，这些函数是必不可少的。</p>
<h3>　　1.AllocMem</h3>
<p>　　功能说明：分配内存空间并自动初始化为零。如果不需要初始化为零，可以使用GetMem代替AllocMem。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　Buffer: PChar;</p>
<p>　　begin</p>
<p>　　 　Buffer := AllocMem(256); // 分配大小为256个字节的内存空间</p>
<p>　　end;</p>
<h3>　　2.Dispose</h3>
<p>　　功能说明：释放为指针分配的内存空间。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　P: Pinteger; // 声明一个Integer(整型)指针</p>
<p>　　begin</p>
<p>　　 　New(P);</p>
<p>　　 　P^ := 100;</p>
<p>　　 　Dispose(P) // 释放内存</p>
<p>　　end;</p>
<h3>　　3.FreeMem</h3>
<p>　　功能说明：释放分配的内存空间。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　Buffer: Pchar;</p>
<p>　　begin</p>
<p>　　 　GetMem(Buffer, 256); // 分配大小为256个字节的内存空间。</p>
<p>　　 　FreeMem(Buffer); // 释放内存空间</p>
<p>　　end;</p>
<h3>　　4.GetMem</h3>
<p>　　功能说明：分配内存空间。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　Buffer: PChar;</p>
<p>　　begin</p>
<p>　　 　GetMem(Buffer, 256); // 分配大小为256个字节的内存空间。</p>
<p>　　end;</p>
<h3>　　5.New</h3>
<p>　　功能说明：为指针分配内存空间。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　P: PInteger; // 声明一个Integer(整型)指针</p>
<p>　　begin</p>
<p>　　 　New(P); // 分配内存</p>
<p>　　 　P^ := 100; // 赋值</p>
<p>　　end;</p>
<h2>　　五、数学运算函数</h2>
<p>　　我们在编写跟数学紧密相关的程序时，数学运算函数将大有用处。比如图像处理软件，就会大量用到这些数学运算函数。</p>
<p>　　默认情况下，Delphi新建的工程里，没有包含大多数的数学运行函数，因此需要在Uses中加入Math单元。</p>
<h3>　　1.Abs</h3>
<p>　　功能说明：求绝对值。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　r: Single;</p>
<p>　　 　i: Integer;</p>
<p>　　begin</p>
<p>　　 　r := Abs(-2.8); // r等于 2.8 </p>
<p>　　 　i := Abs(-156); // I 等于 156</p>
<p>　　end;</p>
<h3>　　2.Exp</h3>
<p>　　功能说明：Exp返回e的X次幂的值，其中e是一个自然对数基底。</p>
<p>　　参考实例：</p>
<p>　　 　e := Exp(1.0); // e为real型变量</p>
<p>　　end;</p>
<h3>　　3.Floor</h3>
<p>　　功能说明：取得小于等于X的最大的整数。</p>
<p>　　参考实例：</p>
<p>　　Floor(-2.8) = -3</p>
<p>　　Floor(2.8) = 2</p>
<p>　　Floor(-1.0) = -1</p>
<h3>　　4.Int</h3>
<p>　　功能说明：返回参数中的整数部分。</p>
<p>　　参考实例：</p>
<p>　　var </p>
<p>　　 　R: Real;</p>
<p>　　begin</p>
<p>　　 　R := Int(123.456); // R等于 123.0</p>
<p>　　 　R := Int(-123.456); // R等于 -123.0</p>
<p>　　end;</p>
<h3>　　5.Max(所在单元：Math)</h3>
<p>　　功能说明：比较两个数字，并返回最大的一个数字。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　k: Integer;</p>
<p>　　begin</p>
<p>　　 　k := Max(10, 20); // k将为20</p>
<p>　　end;</p>
<h3>　　6.Min(所在单元：Math)</h3>
<p>　　功能说明：比较两个数字，并返回最小的一个数字。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　k: Integer;</p>
<p>　　begin</p>
<p>　　 　k := Min(10, 20); // k将为10</p>
<p>　　end;</p>
<h3>　　7.PI</h3>
<p>　　功能说明：精确计算返回圆周率。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　x Extended;</p>
<p>　　begin</p>
<p>　　 　x := PI; // x等于3.1415926535897932385</p>
<p>　　end;</p>
<h3>　　8.Round</h3>
<p>　　功能说明：对一个实数进行四舍五入。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　I, j: Integer;</p>
<p>　　begin</p>
<p>　　 　i := Round(1.25); // i等于1</p>
<p>　　 　j := Round(1.62); // j等于2 </p>
<p>　　end;</p>
<h3>　　9.Sqr</h3>
<p>　　功能说明：取给定值的平方。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 i: Integer;</p>
<p>　　begin</p>
<p>　　 i := Sqr(3); // i等于9</p>
<p>　　end;</p>
<h2>　　六、日期函数</h2>
<p>　　对日期的处理，一般在有日期限制的共享、商业软件中经常使用到。如果你打算编写一款有日期限制的软件，熟悉使用下面的函数即可以实现。</p>
<h3>　　1.Date</h3>
<p>　　功能说明：返回当前的日期。</p>
<p>　　参考实例：</p>
<p>　　procedure TForm1.Button1Click(Sender: TObject);</p>
<p>　　begin</p>
<p>　　 　Label1.Caption := '今天是：' + DateToStr(Date);</p>
<p>　　end;</p>
<p>　　Label显示为：今天是2005年1月1日。</p>
<h3>　　2.DateToStr</h3>
<p>　　功能说明：将日期型转换为字符型。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　S: String;</p>
<p>　　begin</p>
<p>　　 　S := DateToStr(Date);</p>
<p>　　end;</p>
<h3>　　3.DateTimeToStr</h3>
<p>　　功能说明：将DateTime型转换为字符型。</p>
<p>　　参考实例：</p>
<p>　　var</p>
<p>　　 　S: String;</p>
<p>　　begin</p>
<p>　　 　S := DateTimeToStr(Now);</p>
<p>　　end;</p>
<h3>　　4.DayOfTheMonth(所在单元：DateUtils)</h3>
<p>　　功能说明：获取指定日期的日。</p>
<p>　　参考实例：</p>
<p>　　Label1.Caption := IntToStr(DayOfTheMonth(Now));</p>
<p>　　假设当前日期为2005年1月2日，那么Label将显示为2。</p>
<h3>　　5.DayOfTheWeek(所在单元：DateUtils)</h3>
<p>　　功能说明：根据指定日期，获取星期几。</p>
<p>　　参考实例：</p>
<p>　　Label1.Caption := IntToStr(DayOfTheMonth(Now));</p>
<p>　　假设当前日期为2005年1月2日，那么Label将显示为7。根据返回的值来判断是周几。7表示星期天，1为星期一，依类类推。</p>
<h3>　　6.DayOfTheYear(所在单元：DateUtils)</h3>
<p>　　功能说明：根据指定日期，获取天数。</p>
<p>　　参考实例：</p>
<p>　　Label1.Caption := IntToStr(DayOfTheYear(Now));</p>
<p>　　假设当前日期为2005年1月2日，那么Label将显示为2。表示是2005年的第2天。</p>
<h3>　　7.DayOf(所在单元：DateUtils)</h3>
<p>　　功能说明：根据指定的日期，返回日。</p>
<p>　　参考实例：</p>
<p>　　Label1.Caption := IntToStr(DayOf(Date));</p>
<p>　　假设当前日期为2005年1月2日，那么Label将显示为2。</p>
<h3>　　8.IsLeapYear</h3>
<p>　　功能说明：根据指定的年，判断是否为闰年。可使用YearOf函数获取年。</p>
<p>　　参考实例：</p>
<p>　　procedure TForm1.Button1Click(Sender: TObject);</p>
<p>　　begin</p>
<p>　　 　if IsLeapYear(YearOf(Date)) then ShowMessage('是闰年')</p>
<p>　　 　else ShowMessage('不是闰年');</p>
<p>　　end;</p>
<h3>　　9.MonthOf(所在单元：DateUtils)</h3>
<p>　　功能说明：根据指定的日期，返回月份。</p>
<p>　　参考实例：</p>
<p>　　Label1.Caption := IntToStr(MonthOf(Date));</p>
<p>　　假设当前日期为2005年1月2日，那么Label将显示为1。</p>
<h3>　　10.Now</h3>
<p>　　功能说明：返回当前日期及时间。</p>
<p>　　参考实例：</p>
<p>　　procedure TForm1.Button1Click(Sender: TObject);</p>
<p>　　begin</p>
<p>　　 　Label1.Caption := '现在是：' + DateTimeToStr(Now);</p>
<p>　　end;</p>
<h3>　　11.YearOf(所在单元：DateUtils)</h3>
<p>　　功能说明：根据指定的日期，返回年。</p>
<p>　　参考实例：</p>
<p>　　Label1.Caption := IntToStr(YearOf(Date));</p>
<p>　　假设当前日期为2005年1月2日，那么Label将显示为2005。</p>
<img src ="http://www.cnblogs.com/xyicheng/aggbug/1190942.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42980/" target="_blank">[新闻]eWeek评Google八大“20%项目”</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>Delphi调用外部程序详解(转)</title><link>http://www.cnblogs.com/xyicheng/archive/2008/05/06/1184440.html</link><dc:creator>xyicheng</dc:creator><author>xyicheng</author><pubDate>Tue, 06 May 2008 00:45:00 GMT</pubDate><guid>http://www.cnblogs.com/xyicheng/archive/2008/05/06/1184440.html</guid><wfw:comment>http://www.cnblogs.com/xyicheng/comments/1184440.html</wfw:comment><comments>http://www.cnblogs.com/xyicheng/archive/2008/05/06/1184440.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/xyicheng/comments/commentRss/1184440.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/xyicheng/services/trackbacks/1184440.html</trackback:ping><description><![CDATA[<div class="postTitle"><a class="postTitle2" id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/sonicit/archive/2007/06/26/796632.html">Delphi调用外部程序详解 </a></div>
<p>WinExec主要运行EXE文件。如：WinExec(&#8217;Notepad.exe Readme.txt&#8217;, SW_SHOW);&nbsp; <br />
ShellExecute不仅可以运行EXE文件，也可以运行已经关联的文件。 <br />
首先必须引用shellapi.pas单元：uses ShellAPI;&nbsp; </p>
<p>1.标准用法&nbsp; <br />
　　ShellExecute函数原型及参数含义如下：&nbsp; <br />
　　function ShellExecute(hWnd: HWND; Operation, FileName, Parameters,Directory: PChar; ShowCmd: Integer): HINST; stdcall;&nbsp; <br />
　　●hWnd：用于指定父窗口句柄。当函数调用过程出现错误时，它将作为Windows消息窗口的父窗口。例如，可以将其设置为应用程序主窗口句柄，即Application.Handle，也可以将其设置为桌面窗口句柄（用GetDesktopWindow函数获得）。&nbsp; <br />
　　●Operation：用于指定要进行的操作。其中&#8220;open&#8221;操作表示执行由FileName参数指定的程序，或打开由FileName参数指定的文件或文件夹；&#8220;print&#8221;操作表示打印由FileName参数指定的文件；&#8220;explore&#8221;操作表示浏览由FileName参数指定的文件夹。当参数设为nil时，表示执行默认操作&#8220;open&#8221;。&nbsp; <br />
　　●FileName：用于指定要打开的文件名、要执行的程序文件名或要浏览的文件夹名。&nbsp; <br />
　　●Parameters：若FileName参数是一个可执行程序，则此参数指定命令行参数，否则此参数应为nil或PChar(0)。&nbsp; <br />
　　●Directory：用于指定默认目录。&nbsp; <br />
　　●ShowCmd：若FileName参数是一个可执行程序，则此参数指定程序窗口的初始显示方式，否则此参数应设置为0。&nbsp; <br />
　　若ShellExecute函数调用成功，则返回值为被执行程序的实例句柄。若返回值小于32，则表示出现错误。&nbsp; <br />
　　上述仅仅是ShellExecute函数的标准用法，下面将介绍它的特殊用法。&nbsp; </p>
<p>2.特殊用法&nbsp; <br />
　　如果将FileName参数设置为&#8220;http:&#8221;协议格式，那么该函数将打开默认浏览器并链接到指定的URL地址。若用户机器中安装了多个浏览器，则该函数将根据Windows 9x/NT注册表中http协议处理程序（Protocols Handler）的设置确定启动哪个浏览器。&nbsp; <br />
　　格式一：http://网站域名。&nbsp; <br />
　 如：ShellExecute(handle, &#8216;open&#8217;, http:// ;&nbsp; <a href="http://www.neu.edu.cn&#8217;/">http://www.neu.edu.cn&#8217;/</a>, nil, nil, SW_SHOWNORMAL);&nbsp; <br />
　　格式二：http://网站域名/网页文件名。&nbsp; <br />
　　如：ShellExecute(handle, &#8216;open&#8217;, http:// ;&nbsp; <a href="http://www.neu.edu.cn/default.htm&#8217;,nil,nil">www.neu.edu.cn/default.htm&#8217;,nil,nil</a>,&nbsp; SW_SHOWNORMAL);&nbsp; <br />
　　如果将FileName参数设置为&#8220;mailto:&#8221;协议格式，那么该函数将启动默认邮件客户程序，如Microsoft Outlook（也包括Microsoft Outlook Express）或Netscape Messanger。若用户机器中安装了多个邮件客户程序，则该函数将根据Windows 9x/NT注册表中mailto协议处理程序的设置确定启动哪个邮件客户程序。&nbsp; <br />
　　格式一：mailto:&nbsp; <br />
　　如：ShellExecute(handle,&#8216;open&#8217;, &#8216;mailto:&#8217;, nil, nil, SW_SHOWNORMAL);打开新邮件窗口。&nbsp; <br />
　　格式二：mailto:用户账号@邮件服务器地址&nbsp; <br />
　　如：ShellExecute(handle, &#8216;open&#8217;,&#8216; <a href="mailto:who@mail.neu.edu.cn&#8217;">mailto:who@mail.neu.edu.cn&#8217;</a>, nil, nil, SW_SHOWNORMAL);打开新邮件窗口，并自动填入收件人地址。若指定多个收件人地址，则收件人地址之间必须用分号或逗号分隔开（下同）。&nbsp; <br />
　　格式三：mailto:用户账号@邮件服务器地址?subject=邮件主题＆body=邮件正文&nbsp; <br />
　　如：ShellExecute(handle, &#8216;open&#8217;, &#8216; <a href="mailto:who@mail.neu.edu.cn">mailto:who@mail.neu.edu.cn</a>？subject=Hello＆Body=This is a test&#8217;, nil, nil, SW_SHOWNORMAL);打开新邮件窗口，并自动填入收件人地址、邮件主题和邮件正文。若邮件正文包括多行文本，则必须在每行文本之间加入换行转义字符％0a。&nbsp; <br />
例子(delphi):&nbsp; <br />
在一个应用程序调用c:Project1.exe;&nbsp; <br />
ShellExecute(handle, &#8217;open&#8217;,&#8217;c:Project1.exe&#8217;,&#8217;字串内容&#8217;,nil, SW_SHOWNORMAL);&nbsp; <br />
在Project1.exe里可以调用:&nbsp; <br />
procedure TForm1.FormCreate(Sender: TObject);&nbsp; <br />
var i:integer;&nbsp; <br />
begin&nbsp; <br />
for i:=1 to paramcount do&nbsp; <br />
if ParamStr(i)〈〉&#8217;&#8217; then showmessage(ParamStr(i));&nbsp; <br />
end; </p>
<p>最后的那个参数，为窗口指定可视性方面的一个命令。&nbsp; <br />
请用下述任何一个常数&nbsp; <br />
SW_HIDE 隐藏窗口，活动状态给令一个窗口&nbsp; <br />
SW_MINIMIZE 最小化窗口，活动状态给令一个窗口&nbsp; <br />
SW_RESTORE 用原来的大小和位置显示一个窗口，同时令其进入活动状态&nbsp; <br />
SW_SHOW 用当前的大小和位置显示一个窗口，同时令其进入活动状态&nbsp; <br />
SW_SHOWMAXIMIZED 最大化窗口，并将其激活&nbsp; <br />
SW_SHOWMINIMIZED 最小化窗口，并将其激活&nbsp; <br />
SW_SHOWMINNOACTIVE 最小化一个窗口，同时不改变活动窗口&nbsp; <br />
SW_SHOWNA 用当前的大小和位置显示一个窗口，不改变活动窗口&nbsp; <br />
SW_SHOWNOACTIVATE 用最近的大小和位置显示一个窗口，同时不改变活动窗口&nbsp; <br />
SW_SHOWNORMAL 与SW_RESTORE相同&nbsp;</p>
<img src ="http://www.cnblogs.com/xyicheng/aggbug/1184440.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42979/" target="_blank">[新闻]微软终于发布Silverlight 2正式版</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>Delphi Excel and SqlServer</title><link>http://www.cnblogs.com/xyicheng/archive/2008/04/11/1148147.html</link><dc:creator>xyicheng</dc:creator><author>xyicheng</author><pubDate>Fri, 11 Apr 2008 03:38:00 GMT</pubDate><guid>http://www.cnblogs.com/xyicheng/archive/2008/04/11/1148147.html</guid><wfw:comment>http://www.cnblogs.com/xyicheng/comments/1148147.html</wfw:comment><comments>http://www.cnblogs.com/xyicheng/archive/2008/04/11/1148147.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/xyicheng/comments/commentRss/1148147.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/xyicheng/services/trackbacks/1148147.html</trackback:ping><description><![CDATA[从Excel文件中,导入<nobr oncontextmenu="return false;" onmousemove="kwM(4);" id="clickeyekey4" onmouseover="kwE(event,4, this);" style="color: #6600ff; border-bottom: #6600ff 1px dotted; background-color: transparent; text-decoration: underline" onclick="return kwC(event,4)" onmouseout="kwL(event, this);" target="_1">数据</nobr>到SQL数据库中,很简单,直接用下面的语句: &nbsp; </clk><br />
&nbsp; &nbsp; <br />
&nbsp; /*===================================================================*/ &nbsp; <br />
&nbsp; --如果接受数据导入的表已经存在 &nbsp; <br />
&nbsp; insert &nbsp; into &nbsp; 表 &nbsp; select &nbsp; * &nbsp; from &nbsp; &nbsp; <br />
&nbsp; OPENROWSET('MICROSOFT.JET.OLEDB.4.0' &nbsp; <br />
&nbsp; ,'Excel &nbsp; 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$) &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; --如果导入数据并生成表 &nbsp; <br />
&nbsp; select &nbsp; * &nbsp; into &nbsp; 表 &nbsp; from &nbsp; &nbsp; <br />
&nbsp; OPENROWSET('MICROSOFT.JET.OLEDB.4.0' &nbsp; <br />
&nbsp; ,'Excel &nbsp; 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$) &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; /*===================================================================*/ &nbsp; <br />
&nbsp; --如果从SQL数据库中,导出数据到Excel,如果Excel文件已经存在,而且已经按照要接收的数据创建好表头,就可以简单的用: &nbsp; <br />
&nbsp; insert &nbsp; into &nbsp; OPENROWSET('MICROSOFT.JET.OLEDB.4.0' &nbsp; <br />
&nbsp; ,'Excel &nbsp; 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$) &nbsp; <br />
&nbsp; select &nbsp; * &nbsp; from &nbsp; 表 &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; --如果Excel文件不存在,也可以用BCP来导成类Excel的文件,注意大小写: &nbsp; <br />
&nbsp; --导出表的情况 &nbsp; <br />
<clk>&nbsp; EXEC &nbsp; master..xp_cmdshell &nbsp; 'bcp &nbsp; 数据库名.dbo.表名 &nbsp; out &nbsp; "c:\test.xls" &nbsp; /c &nbsp; -/S"服务器名" &nbsp; /U"用户名" &nbsp; -P"<nobr oncontextmenu="return false;" onmousemove="kwM(3);" id="clickeyekey3" onmouseover="kwE(event,3, this);" style="color: #6600ff; border-bottom: #6600ff 1px dotted; background-color: transparent; text-decoration: underline" onclick="return kwC(event,3)" onmouseout="kwL(event, this);" target="_1">密码</nobr>"' &nbsp; </clk><br />
&nbsp; &nbsp; <br />
&nbsp; --导出查询的情况 &nbsp; <br />
&nbsp; EXEC &nbsp; master..xp_cmdshell &nbsp; 'bcp &nbsp; "SELECT &nbsp; au_fname, &nbsp; au_lname &nbsp; FROM &nbsp; pubs..authors &nbsp; ORDER &nbsp; BY &nbsp; au_lname" &nbsp; queryout &nbsp; "c:\test.xls" &nbsp; /c &nbsp; -/S"服务器名" &nbsp; /U"用户名" &nbsp; -P"密码"' &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; 说明. &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; c:\test.xls &nbsp; &nbsp; 为导入/导出的Excel文件名. &nbsp; <br />
<clk>&nbsp; sheet1$ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 为Excel文件的<nobr oncontextmenu="return false;" onmousemove="kwM(0);" id="clickeyekey0" onmouseover="kwE(event,0, this);" style="color: #6600ff; border-bottom: #6600ff 1px dotted; background-color: transparent; text-decoration: underline" onclick="return kwC(event,0)" onmouseout="kwL(event, this);" target="_1">工作</nobr>表名,一般要加上$才能正常使用. &nbsp; </clk><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; 下面是导出真正Excel文件的方法: &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; /*--数据导出EXCEL &nbsp; <br />
&nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; 导出表中的数据到Excel,包含字段名,文件为真正的Excel文件 &nbsp; <br />
&nbsp; &nbsp; ,如果文件不存在,将自动创建文件 &nbsp; <br />
&nbsp; &nbsp; ,如果表不存在,将自动创建表 &nbsp; <br />
<clk>&nbsp; &nbsp; 基于通用性<nobr oncontextmenu="return false;" onmousemove="kwM(6);" id="clickeyekey6" onmouseover="kwE(event,6, this);" style="color: #6600ff; border-bottom: #6600ff 1px dotted; background-color: transparent; text-decoration: underline" onclick="return kwC(event,6)" onmouseout="kwL(event, this);" target="_1">考虑</nobr>,仅支持导出标准数据类型 &nbsp; </clk><br />
&nbsp; ---*/ &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; /*--调用示例 &nbsp; <br />
&nbsp; &nbsp; <br />
<clk>&nbsp; &nbsp; p_exporttb &nbsp; @tbname='地区<nobr oncontextmenu="return false;" onmousemove="kwM(5);" id="clickeyekey5" onmouseover="kwE(event,5, this);" style="color: #6600ff; border-bottom: #6600ff 1px dotted; background-color: transparent; text-decoration: underline" onclick="return kwC(event,5)" onmouseout="kwL(event, this);" target="_1">资料</nobr>',@path='c:\',@fname='aa.xls' &nbsp; </clk><br />
&nbsp; --*/ &nbsp; <br />
&nbsp; if &nbsp; exists &nbsp; (select &nbsp; * &nbsp; from &nbsp; dbo.sysobjects &nbsp; where &nbsp; id &nbsp; = &nbsp; object_id(N'[dbo].[p_exporttb]') &nbsp; and &nbsp; OBJECTPROPERTY(id, &nbsp; N'IsProcedure') &nbsp; = &nbsp; 1) &nbsp; <br />
&nbsp; drop &nbsp; procedure &nbsp; [dbo].[p_exporttb] &nbsp; <br />
&nbsp; GO &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; create &nbsp; proc &nbsp; p_exporttb &nbsp; <br />
&nbsp; @tbname &nbsp; sysname, &nbsp; &nbsp; &nbsp; &nbsp; --要导出的表名,注意只能是表名/视图名 &nbsp; <br />
&nbsp; @path &nbsp; nvarchar(1000), &nbsp; &nbsp; &nbsp; --文件存放目录 &nbsp; <br />
&nbsp; @fname &nbsp; nvarchar(250)='' &nbsp; &nbsp; --文件名,默认为表名 &nbsp; <br />
&nbsp; as &nbsp; <br />
&nbsp; declare &nbsp; @err &nbsp; int,@src &nbsp; nvarchar(255),@desc &nbsp; nvarchar(255),@out &nbsp; int &nbsp; <br />
&nbsp; declare &nbsp; @obj &nbsp; int,@constr &nbsp; nvarchar(1000),@sql &nbsp; varchar(8000),@fdlist &nbsp; varchar(8000) &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; --参数检测 &nbsp; <br />
&nbsp; if &nbsp; isnull(@fname,'')='' &nbsp; set &nbsp; @fname=@tbname+'.xls' &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; --检查文件是否已经存在 &nbsp; <br />
&nbsp; if &nbsp; right(@path,1)&lt;&gt;'\' &nbsp; set &nbsp; @path=@path+'\' &nbsp; <br />
&nbsp; create &nbsp; table &nbsp; #tb(a &nbsp; bit,b &nbsp; bit,c &nbsp; bit) &nbsp; <br />
&nbsp; set &nbsp; @sql=@path+@fname &nbsp; <br />
&nbsp; insert &nbsp; into &nbsp; #tb &nbsp; exec &nbsp; master..xp_fileexist &nbsp; @sql &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; --数据库创建语句 &nbsp; <br />
&nbsp; set &nbsp; @sql=@path+@fname &nbsp; <br />
&nbsp; if &nbsp; exists(select &nbsp; 1 &nbsp; from &nbsp; #tb &nbsp; where &nbsp; a=1) &nbsp; <br />
&nbsp; &nbsp; set &nbsp; @constr='DRIVER={Microsoft &nbsp; Excel &nbsp; Driver &nbsp; (*.xls)};DSN='''';READONLY=FALSE' &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; +';CREATE_DB="'+@sql+'";DBQ='+@sql &nbsp; <br />
&nbsp; else &nbsp; <br />
&nbsp; &nbsp; set &nbsp; @constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended &nbsp; Properties="Excel &nbsp; 5.0;HDR=YES' &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; +';DATABASE='+@sql+'"' &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; --连接数据库 &nbsp; <br />
&nbsp; exec &nbsp; @err=sp_oacreate &nbsp; 'adodb.connection',@obj &nbsp; out &nbsp; <br />
&nbsp; if &nbsp; @err&lt;&gt;0 &nbsp; goto &nbsp; lberr &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; exec &nbsp; @err=sp_oamethod &nbsp; @obj,'open',null,@constr &nbsp; <br />
&nbsp; if &nbsp; @err&lt;&gt;0 &nbsp; goto &nbsp; lberr &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; --创建表的SQL &nbsp; <br />
&nbsp; select &nbsp; @sql='',@fdlist='' &nbsp; <br />
&nbsp; select &nbsp; @fdlist=@fdlist+','+a.name &nbsp; <br />
&nbsp; &nbsp; ,@sql=@sql+',['+a.name+'] &nbsp; ' &nbsp; <br />
&nbsp; &nbsp; &nbsp; +case &nbsp; when &nbsp; b.name &nbsp; in('char','nchar','varchar','nvarchar') &nbsp; then &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'text('+cast(case &nbsp; when &nbsp; a.length&gt;255 &nbsp; then &nbsp; 255 &nbsp; else &nbsp; a.length &nbsp; end &nbsp; as &nbsp; varchar)+')' &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; when &nbsp; b.name &nbsp; in('tynyint','int','bigint','tinyint') &nbsp; then &nbsp; 'int' &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; when &nbsp; b.name &nbsp; in('smalldatetime','datetime') &nbsp; then &nbsp; 'datetime' &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; when &nbsp; b.name &nbsp; in('money','smallmoney') &nbsp; then &nbsp; 'money' &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; else &nbsp; b.name &nbsp; end &nbsp; <br />
&nbsp; FROM &nbsp; syscolumns &nbsp; a &nbsp; left &nbsp; join &nbsp; systypes &nbsp; b &nbsp; on &nbsp; a.xtype=b.xusertype &nbsp; <br />
&nbsp; where &nbsp; b.name &nbsp; not &nbsp; in('image','text','uniqueidentifier','sql_variant','ntext','varbinary','binary','timestamp') &nbsp; <br />
&nbsp; &nbsp; and &nbsp; object_id(@tbname)=id &nbsp; <br />
&nbsp; select &nbsp; @sql='create &nbsp; table &nbsp; ['+@tbname &nbsp; <br />
&nbsp; &nbsp; +']('+substring(@sql,2,8000)+')' &nbsp; <br />
&nbsp; &nbsp; ,@fdlist=substring(@fdlist,2,8000) &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; exec &nbsp; @err=sp_oamethod &nbsp; @obj,'execute',@out &nbsp; out,@sql &nbsp; <br />
&nbsp; if &nbsp; @err&lt;&gt;0 &nbsp; goto &nbsp; lberr &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; exec &nbsp; @err=sp_oadestroy &nbsp; @obj &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; --导入数据 &nbsp; <br />
&nbsp; set &nbsp; @sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel &nbsp; 5.0;HDR=YES &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; ;DATABASE='+@path+@fname+''',['+@tbname+'$])' &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; exec('insert &nbsp; into &nbsp; '+@sql+'('+@fdlist+') &nbsp; select &nbsp; '+@fdlist+' &nbsp; from &nbsp; '+@tbname) &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; return &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; lberr: &nbsp; <br />
&nbsp; &nbsp; exec &nbsp; sp_oageterrorinfo &nbsp; 0,@src &nbsp; out,@desc &nbsp; out &nbsp; <br />
&nbsp; lbexit: &nbsp; <br />
&nbsp; &nbsp; select &nbsp; cast(@err &nbsp; as &nbsp; varbinary(4)) &nbsp; as &nbsp; 错误号 &nbsp; <br />
&nbsp; &nbsp; &nbsp; ,@src &nbsp; as &nbsp; 错误源,@desc &nbsp; as &nbsp; 错误描述 &nbsp; <br />
&nbsp; &nbsp; select &nbsp; @sql,@constr,@fdlist &nbsp; <br />
&nbsp; go &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; *--数据导出EXCEL &nbsp; <br />
&nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; 导出查询中的数据到Excel,包含字段名,文件为真正的Excel文件 &nbsp; <br />
&nbsp; &nbsp; ,如果文件不存在,将自动创建文件 &nbsp; <br />
&nbsp; &nbsp; ,如果表不存在,将自动创建表 &nbsp; <br />
&nbsp; &nbsp; 基于通用性考虑,仅支持导出标准数据类型 &nbsp; <br />
&nbsp; --*/ &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; /*--调用示例 &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; p_exporttb &nbsp; @sqlstr='select &nbsp; * &nbsp; from &nbsp; 地区资料' &nbsp; <br />
&nbsp; &nbsp; &nbsp; ,@path='c:\',@fname='aa.xls',@sheetname='地区资料' &nbsp; <br />
&nbsp; --*/ &nbsp; <br />
&nbsp; if &nbsp; exists &nbsp; (select &nbsp; * &nbsp; from &nbsp; dbo.sysobjects &nbsp; where &nbsp; id &nbsp; = &nbsp; object_id(N'[dbo].[p_exporttb]') &nbsp; and &nbsp; OBJECTPROPERTY(id, &nbsp; N'IsProcedure') &nbsp; = &nbsp; 1) &nbsp; <br />
&nbsp; drop &nbsp; procedure &nbsp; [dbo].[p_exporttb] &nbsp; <br />
&nbsp; GO &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; create &nbsp; proc &nbsp; p_exporttb &nbsp; <br />
&nbsp; @sqlstr &nbsp; sysname, &nbsp; &nbsp; &nbsp; &nbsp; --查询语句,如果查询语句中使用了order &nbsp; by &nbsp; ,请加上top &nbsp; 100 &nbsp; percent,注意,如果导出表/视图,用上面的存储过程 &nbsp; <br />
&nbsp; @path &nbsp; nvarchar(1000), &nbsp; &nbsp; &nbsp; --文件存放目录 &nbsp; <br />
&nbsp; @fname &nbsp; nvarchar(250), &nbsp; &nbsp; &nbsp; --文件名 &nbsp; <br />
&nbsp; @sheetname &nbsp; varchar(250)='' &nbsp; &nbsp; --要创建的工作表名,默认为文件名 &nbsp; <br />
&nbsp; as &nbsp; &nbsp; <br />
&nbsp; declare &nbsp; @err &nbsp; int,@src &nbsp; nvarchar(255),@desc &nbsp; nvarchar(255),@out &nbsp; int &nbsp; <br />
&nbsp; declare &nbsp; @obj &nbsp; int,@constr &nbsp; nvarchar(1000),@sql &nbsp; varchar(8000),@fdlist &nbsp; varchar(8000) &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; --参数检测 &nbsp; <br />
&nbsp; if &nbsp; isnull(@fname,'')='' &nbsp; set &nbsp; @fname='temp.xls' &nbsp; <br />
&nbsp; if &nbsp; isnull(@sheetname,'')='' &nbsp; set &nbsp; @sheetname=replace(@fname,'.','#') &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; --检查文件是否已经存在 &nbsp; <br />
&nbsp; if &nbsp; right(@path,1)&lt;&gt;'\' &nbsp; set &nbsp; @path=@path+'\' &nbsp; <br />
&nbsp; create &nbsp; table &nbsp; #tb(a &nbsp; bit,b &nbsp; bit,c &nbsp; bit) &nbsp; <br />
&nbsp; set &nbsp; @sql=@path+@fname &nbsp; <br />
&nbsp; insert &nbsp; into &nbsp; #tb &nbsp; exec &nbsp; master..xp_fileexist &nbsp; @sql &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; --数据库创建语句 &nbsp; <br />
&nbsp; set &nbsp; @sql=@path+@fname &nbsp; <br />
&nbsp; if &nbsp; exists(select &nbsp; 1 &nbsp; from &nbsp; #tb &nbsp; where &nbsp; a=1) &nbsp; <br />
&nbsp; &nbsp; set &nbsp; @constr='DRIVER={Microsoft &nbsp; Excel &nbsp; Driver &nbsp; (*.xls)};DSN='''';READONLY=FALSE' &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; +';CREATE_DB="'+@sql+'";DBQ='+@sql &nbsp; <br />
&nbsp; else &nbsp; <br />
&nbsp; &nbsp; set &nbsp; @constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended &nbsp; Properties="Excel &nbsp; 5.0;HDR=YES' &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; +';DATABASE='+@sql+'"' &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; --连接数据库 &nbsp; <br />
&nbsp; exec &nbsp; @err=sp_oacreate &nbsp; 'adodb.connection',@obj &nbsp; out &nbsp; <br />
&nbsp; if &nbsp; @err&lt;&gt;0 &nbsp; goto &nbsp; lberr &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; exec &nbsp; @err=sp_oamethod &nbsp; @obj,'open',null,@constr &nbsp; <br />
&nbsp; if &nbsp; @err&lt;&gt;0 &nbsp; goto &nbsp; lberr &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; --创建表的SQL &nbsp; <br />
&nbsp; declare &nbsp; @tbname &nbsp; sysname &nbsp; <br />
&nbsp; set &nbsp; @tbname='##tmp_'+convert(varchar(38),newid()) &nbsp; <br />
&nbsp; set &nbsp; @sql='select &nbsp; * &nbsp; into &nbsp; ['+@tbname+'] &nbsp; from('+@sqlstr+') &nbsp; a' &nbsp; <br />
&nbsp; exec(@sql) &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; select &nbsp; @sql='',@fdlist='' &nbsp; <br />
&nbsp; select &nbsp; @fdlist=@fdlist+','+a.name &nbsp; <br />
&nbsp; &nbsp; ,@sql=@sql+',['+a.name+'] &nbsp; ' &nbsp; <br />
&nbsp; &nbsp; &nbsp; +case &nbsp; when &nbsp; b.name &nbsp; in('char','nchar','varchar','nvarchar') &nbsp; then &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'text('+cast(case &nbsp; when &nbsp; a.length&gt;255 &nbsp; then &nbsp; 255 &nbsp; else &nbsp; a.length &nbsp; end &nbsp; as &nbsp; varchar)+')' &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; when &nbsp; b.name &nbsp; in('tynyint','int','bigint','tinyint') &nbsp; then &nbsp; 'int' &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; when &nbsp; b.name &nbsp; in('smalldatetime','datetime') &nbsp; then &nbsp; 'datetime' &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; when &nbsp; b.name &nbsp; in('money','smallmoney') &nbsp; then &nbsp; 'money' &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; else &nbsp; b.name &nbsp; end &nbsp; <br />
&nbsp; FROM &nbsp; tempdb..syscolumns &nbsp; a &nbsp; left &nbsp; join &nbsp; tempdb..systypes &nbsp; b &nbsp; on &nbsp; a.xtype=b.xusertype &nbsp; <br />
&nbsp; where &nbsp; b.name &nbsp; not &nbsp; in('image','text','uniqueidentifier','sql_variant','ntext','varbinary','binary','timestamp') &nbsp; <br />
&nbsp; &nbsp; and &nbsp; a.id=(select &nbsp; id &nbsp; from &nbsp; tempdb..sysobjects &nbsp; where &nbsp; name=@tbname) &nbsp; <br />
&nbsp; select &nbsp; @sql='create &nbsp; table &nbsp; ['+@sheetname &nbsp; <br />
&nbsp; &nbsp; +']('+substring(@sql,2,8000)+')' &nbsp; <br />
&nbsp; &nbsp; ,@fdlist=substring(@fdlist,2,8000) &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; exec &nbsp; @err=sp_oamethod &nbsp; @obj,'execute',@out &nbsp; out,@sql &nbsp; <br />
&nbsp; if &nbsp; @err&lt;&gt;0 &nbsp; goto &nbsp; lberr &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; exec &nbsp; @err=sp_oadestroy &nbsp; @obj &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; --导入数据 &nbsp; <br />
&nbsp; set &nbsp; @sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel &nbsp; 5.0;HDR=YES &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; ;DATABASE='+@path+@fname+''',['+@sheetname+'$])' &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; exec('insert &nbsp; into &nbsp; '+@sql+'('+@fdlist+') &nbsp; select &nbsp; '+@fdlist+' &nbsp; from &nbsp; ['+@tbname+']') &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; set &nbsp; @sql='drop &nbsp; table &nbsp; ['+@tbname+']' &nbsp; <br />
&nbsp; exec(@sql) &nbsp; <br />
&nbsp; return &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; lberr: &nbsp; <br />
&nbsp; &nbsp; exec &nbsp; sp_oageterrorinfo &nbsp; 0,@src &nbsp; out,@desc &nbsp; out &nbsp; <br />
&nbsp; lbexit: &nbsp; <br />
&nbsp; &nbsp; select &nbsp; cast(@err &nbsp; as &nbsp; varbinary(4)) &nbsp; as &nbsp; 错误号 &nbsp; <br />
&nbsp; &nbsp; &nbsp; ,@src &nbsp; as &nbsp; 错误源,@desc &nbsp; as &nbsp; 错误描述 &nbsp; <br />
&nbsp; &nbsp; select &nbsp; @sql,@constr,@fdlist &nbsp; <br />
&nbsp; go&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; 
<img src ="http://www.cnblogs.com/xyicheng/aggbug/1148147.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42977/" target="_blank">[新闻]微软首次打破先例 Windows 7不再改名</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>Delphi Excel and SqlServer</title><link>http://www.cnblogs.com/xyicheng/archive/2008/04/11/1148148.html</link><dc:creator>xyicheng</dc:creator><author>xyicheng</author><pubDate>Fri, 11 Apr 2008 03:38:00 GMT</pubDate><guid>http://www.cnblogs.com/xyicheng/archive/2008/04/11/1148148.html</guid><wfw:comment>http://www.cnblogs.com/xyicheng/comments/1148148.html</wfw:comment><comments>http://www.cnblogs.com/xyicheng/archive/2008/04/11/1148148.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/xyicheng/comments/commentRss/1148148.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/xyicheng/services/trackbacks/1148148.html</trackback:ping><description><![CDATA[从Excel文件中,导入<nobr oncontextmenu="return false;" onmousemove="kwM(4);" id="clickeyekey4" onmouseover="kwE(event,4, this);" style="color: #6600ff; border-bottom: #6600ff 1px dotted; background-color: transparent; text-decoration: underline" onclick="return kwC(event,4)" onmouseout="kwL(event, this);" target="_1">数据</nobr>到SQL数据库中,很简单,直接用下面的语句: &nbsp; </clk><br />
&nbsp; &nbsp; <br />
&nbsp; /*===================================================================*/ &nbsp; <br />
&nbsp; --如果接受数据导入的表已经存在 &nbsp; <br />
&nbsp; insert &nbsp; into &nbsp; 表 &nbsp; select &nbsp; * &nbsp; from &nbsp; &nbsp; <br />
&nbsp; OPENROWSET('MICROSOFT.JET.OLEDB.4.0' &nbsp; <br />
&nbsp; ,'Excel &nbsp; 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$) &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; --如果导入数据并生成表 &nbsp; <br />
&nbsp; select &nbsp; * &nbsp; into &nbsp; 表 &nbsp; from &nbsp; &nbsp; <br />
&nbsp; OPENROWSET('MICROSOFT.JET.OLEDB.4.0' &nbsp; <br />
&nbsp; ,'Excel &nbsp; 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$) &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; /*===================================================================*/ &nbsp; <br />
&nbsp; --如果从SQL数据库中,导出数据到Excel,如果Excel文件已经存在,而且已经按照要接收的数据创建好表头,就可以简单的用: &nbsp; <br />
&nbsp; insert &nbsp; into &nbsp; OPENROWSET('MICROSOFT.JET.OLEDB.4.0' &nbsp; <br />
&nbsp; ,'Excel &nbsp; 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$) &nbsp; <br />
&nbsp; select &nbsp; * &nbsp; from &nbsp; 表 &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; --如果Excel文件不存在,也可以用BCP来导成类Excel的文件,注意大小写: &nbsp; <br />
&nbsp; --导出表的情况 &nbsp; <br />
<clk>&nbsp; EXEC &nbsp; master..xp_cmdshell &nbsp; 'bcp &nbsp; 数据库名.dbo.表名 &nbsp; out &nbsp; "c:\test.xls" &nbsp; /c &nbsp; -/S"服务器名" &nbsp; /U"用户名" &nbsp; -P"<nobr oncontextmenu="return false;" onmousemove="kwM(3);" id="clickeyekey3" onmouseover="kwE(event,3, this);" style="color: #6600ff; border-bottom: #6600ff 1px dotted; background-color: transparent; text-decoration: underline" onclick="return kwC(event,3)" onmouseout="kwL(event, this);" target="_1">密码</nobr>"' &nbsp; </clk><br />
&nbsp; &nbsp; <br />
&nbsp; --导出查询的情况 &nbsp; <br />
&nbsp; EXEC &nbsp; master..xp_cmdshell &nbsp; 'bcp &nbsp; "SELECT &nbsp; au_fname, &nbsp; au_lname &nbsp; FROM &nbsp; pubs..authors &nbsp; ORDER &nbsp; BY &nbsp; au_lname" &nbsp; queryout &nbsp; "c:\test.xls" &nbsp; /c &nbsp; -/S"服务器名" &nbsp; /U"用户名" &nbsp; -P"密码"' &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; 说明. &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; c:\test.xls &nbsp; &nbsp; 为导入/导出的Excel文件名. &nbsp; <br />
<clk>&nbsp; sheet1$ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 为Excel文件的<nobr oncontextmenu="return false;" onmousemove="kwM(0);" id="clickeyekey0" onmouseover="kwE(event,0, this);" style="color: #6600ff; border-bottom: #6600ff 1px dotted; background-color: transparent; text-decoration: underline" onclick="return kwC(event,0)" onmouseout="kwL(event, this);" target="_1">工作</nobr>表名,一般要加上$才能正常使用. &nbsp; </clk><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; 下面是导出真正Excel文件的方法: &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; /*--数据导出EXCEL &nbsp; <br />
&nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; 导出表中的数据到Excel,包含字段名,文件为真正的Excel文件 &nbsp; <br />
&nbsp; &nbsp; ,如果文件不存在,将自动创建文件 &nbsp; <br />
&nbsp; &nbsp; ,如果表不存在,将自动创建表 &nbsp; <br />
<clk>&nbsp; &nbsp; 基于通用性<nobr oncontextmenu="return false;" onmousemove="kwM(6);" id="clickeyekey6" onmouseover="kwE(event,6, this);" style="color: #6600ff; border-bottom: #6600ff 1px dotted; background-color: transparent; text-decoration: underline" onclick="return kwC(event,6)" onmouseout="kwL(event, this);" target="_1">考虑</nobr>,仅支持导出标准数据类型 &nbsp; </clk><br />
&nbsp; ---*/ &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; /*--调用示例 &nbsp; <br />
&nbsp; &nbsp; <br />
<clk>&nbsp; &nbsp; p_exporttb &nbsp; @tbname='地区<nobr oncontextmenu="return false;" onmousemove="kwM(5);" id="clickeyekey5" onmouseover="kwE(event,5, this);" style="color: #6600ff; border-bottom: #6600ff 1px dotted; background-color: transparent; text-decoration: underline" onclick="return kwC(event,5)" onmouseout="kwL(event, this);" target="_1">资料</nobr>',@path='c:\',@fname='aa.xls' &nbsp; </clk><br />
&nbsp; --*/ &nbsp; <br />
&nbsp; if &nbsp; exists &nbsp; (select &nbsp; * &nbsp; from &nbsp; dbo.sysobjects &nbsp; where &nbsp; id &nbsp; = &nbsp; object_id(N'[dbo].[p_exporttb]') &nbsp; and &nbsp; OBJECTPROPERTY(id, &nbsp; N'IsProcedure') &nbsp; = &nbsp; 1) &nbsp; <br />
&nbsp; drop &nbsp; procedure &nbsp; [dbo].[p_exporttb] &nbsp; <br />
&nbsp; GO &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; create &nbsp; proc &nbsp; p_exporttb &nbsp; <br />
&nbsp; @tbname &nbsp; sysname, &nbsp; &nbsp; &nbsp; &nbsp; --要导出的表名,注意只能是表名/视图名 &nbsp; <br />
&nbsp; @path &nbsp; nvarchar(1000), &nbsp; &nbsp; &nbsp; --文件存放目录 &nbsp; <br />
&nbsp; @fname &nbsp; nvarchar(250)='' &nbsp; &nbsp; --文件名,默认为表名 &nbsp; <br />
&nbsp; as &nbsp; <br />
&nbsp; declare &nbsp; @err &nbsp; int,@src &nbsp; nvarchar(255),@desc &nbsp; nvarchar(255),@out &nbsp; int &nbsp; <br />
&nbsp; declare &nbsp; @obj &nbsp; int,@constr &nbsp; nvarchar(1000),@sql &nbsp; varchar(8000),@fdlist &nbsp; varchar(8000) &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; --参数检测 &nbsp; <br />
&nbsp; if &nbsp; isnull(@fname,'')='' &nbsp; set &nbsp; @fname=@tbname+'.xls' &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; --检查文件是否已经存在 &nbsp; <br />
&nbsp; if &nbsp; right(@path,1)&lt;&gt;'\' &nbsp; set &nbsp; @path=@path+'\' &nbsp; <br />
&nbsp; create &nbsp; table &nbsp; #tb(a &nbsp; bit,b &nbsp; bit,c &nbsp; bit) &nbsp; <br />
&nbsp; set &nbsp; @sql=@path+@fname &nbsp; <br />
&nbsp; insert &nbsp; into &nbsp; #tb &nbsp; exec &nbsp; master..xp_fileexist &nbsp; @sql &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; --数据库创建语句 &nbsp; <br />
&nbsp; set &nbsp; @sql=@path+@fname &nbsp; <br />
&nbsp; if &nbsp; exists(select &nbsp; 1 &nbsp; from &nbsp; #tb &nbsp; where &nbsp; a=1) &nbsp; <br />
&nbsp; &nbsp; set &nbsp; @constr='DRIVER={Microsoft &nbsp; Excel &nbsp; Driver &nbsp; (*.xls)};DSN='''';READONLY=FALSE' &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; +';CREATE_DB="'+@sql+'";DBQ='+@sql &nbsp; <br />
&nbsp; else &nbsp; <br />
&nbsp; &nbsp; set &nbsp; @constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended &nbsp; Properties="Excel &nbsp; 5.0;HDR=YES' &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; +';DATABASE='+@sql+'"' &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; --连接数据库 &nbsp; <br />
&nbsp; exec &nbsp; @err=sp_oacreate &nbsp; 'adodb.connection',@obj &nbsp; out &nbsp; <br />
&nbsp; if &nbsp; @err&lt;&gt;0 &nbsp; goto &nbsp; lberr &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; exec &nbsp; @err=sp_oamethod &nbsp; @obj,'open',null,@constr &nbsp; <br />
&nbsp; if &nbsp; @err&lt;&gt;0 &nbsp; goto &nbsp; lberr &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; --创建表的SQL &nbsp; <br />
&nbsp; select &nbsp; @sql='',@fdlist='' &nbsp; <br />
&nbsp; select &nbsp; @fdlist=@fdlist+','+a.name &nbsp; <br />
&nbsp; &nbsp; ,@sql=@sql+',['+a.name+'] &nbsp; ' &nbsp; <br />
&nbsp; &nbsp; &nbsp; +case &nbsp; when &nbsp; b.name &nbsp; in('char','nchar','varchar','nvarchar') &nbsp; then &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'text('+cast(case &nbsp; when &nbsp; a.length&gt;255 &nbsp; then &nbsp; 255 &nbsp; else &nbsp; a.length &nbsp; end &nbsp; as &nbsp; varchar)+')' &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; when &nbsp; b.name &nbsp; in('tynyint','int','bigint','tinyint') &nbsp; then &nbsp; 'int' &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; when &nbsp; b.name &nbsp; in('smalldatetime','datetime') &nbsp; then &nbsp; 'datetime' &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; when &nbsp; b.name &nbsp; in('money','smallmoney') &nbsp; then &nbsp; 'money' &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; else &nbsp; b.name &nbsp; end &nbsp; <br />
&nbsp; FROM &nbsp; syscolumns &nbsp; a &nbsp; left &nbsp; join &nbsp; systypes &nbsp; b &nbsp; on &nbsp; a.xtype=b.xusertype &nbsp; <br />
&nbsp; where &nbsp; b.name &nbsp; not &nbsp; in('image','text','uniqueidentifier','sql_variant','ntext','varbinary','binary','timestamp') &nbsp; <br />
&nbsp; &nbsp; and &nbsp; object_id(@tbname)=id &nbsp; <br />
&nbsp; select &nbsp; @sql='create &nbsp; table &nbsp; ['+@tbname &nbsp; <br />
&nbsp; &nbsp; +']('+substring(@sql,2,8000)+')' &nbsp; <br />
&nbsp; &nbsp; ,@fdlist=substring(@fdlist,2,8000) &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; exec &nbsp; @err=sp_oamethod &nbsp; @obj,'execute',@out &nbsp; out,@sql &nbsp; <br />
&nbsp; if &nbsp; @err&lt;&gt;0 &nbsp; goto &nbsp; lberr &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; exec &nbsp; @err=sp_oadestroy &nbsp; @obj &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; --导入数据 &nbsp; <br />
&nbsp; set &nbsp; @sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel &nbsp; 5.0;HDR=YES &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; ;DATABASE='+@path+@fname+''',['+@tbname+'$])' &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; exec('insert &nbsp; into &nbsp; '+@sql+'('+@fdlist+') &nbsp; select &nbsp; '+@fdlist+' &nbsp; from &nbsp; '+@tbname) &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; return &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; lberr: &nbsp; <br />
&nbsp; &nbsp; exec &nbsp; sp_oageterrorinfo &nbsp; 0,@src &nbsp; out,@desc &nbsp; out &nbsp; <br />
&nbsp; lbexit: &nbsp; <br />
&nbsp; &nbsp; select &nbsp; cast(@err &nbsp; as &nbsp; varbinary(4)) &nbsp; as &nbsp; 错误号 &nbsp; <br />
&nbsp; &nbsp; &nbsp; ,@src &nbsp; as &nbsp; 错误源,@desc &nbsp; as &nbsp; 错误描述 &nbsp; <br />
&nbsp; &nbsp; select &nbsp; @sql,@constr,@fdlist &nbsp; <br />
&nbsp; go &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; *--数据导出EXCEL &nbsp; <br />
&nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; 导出查询中的数据到Excel,包含字段名,文件为真正的Excel文件 &nbsp; <br />
&nbsp; &nbsp; ,如果文件不存在,将自动创建文件 &nbsp; <br />
&nbsp; &nbsp; ,如果表不存在,将自动创建表 &nbsp; <br />
&nbsp; &nbsp; 基于通用性考虑,仅支持导出标准数据类型 &nbsp; <br />
&nbsp; --*/ &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; /*--调用示例 &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; p_exporttb &nbsp; @sqlstr='select &nbsp; * &nbsp; from &nbsp; 地区资料' &nbsp; <br />
&nbsp; &nbsp; &nbsp; ,@path='c:\',@fname='aa.xls',@sheetname='地区资料' &nbsp; <br />
&nbsp; --*/ &nbsp; <br />
&nbsp; if &nbsp; exists &nbsp; (select &nbsp; * &nbsp; from &nbsp; dbo.sysobjects &nbsp; where &nbsp; id &nbsp; = &nbsp; object_id(N'[dbo].[p_exporttb]') &nbsp; and &nbsp; OBJECTPROPERTY(id, &nbsp; N'IsProcedure') &nbsp; = &nbsp; 1) &nbsp; <br />
&nbsp; drop &nbsp; procedure &nbsp; [dbo].[p_exporttb] &nbsp; <br />
&nbsp; GO &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; create &nbsp; proc &nbsp; p_exporttb &nbsp; <br />
&nbsp; @sqlstr &nbsp; sysname, &nbsp; &nbsp; &nbsp; &nbsp; --查询语句,如果查询语句中使用了order &nbsp; by &nbsp; ,请加上top &nbsp; 100 &nbsp; percent,注意,如果导出表/视图,用上面的存储过程 &nbsp; <br />
&nbsp; @path &nbsp; nvarchar(1000), &nbsp; &nbsp; &nbsp; --文件存放目录 &nbsp; <br />
&nbsp; @fname &nbsp; nvarchar(250), &nbsp; &nbsp; &nbsp; --文件名 &nbsp; <br />
&nbsp; @sheetname &nbsp; varchar(250)='' &nbsp; &nbsp; --要创建的工作表名,默认为文件名 &nbsp; <br />
&nbsp; as &nbsp; &nbsp; <br />
&nbsp; declare &nbsp; @err &nbsp; int,@src &nbsp; nvarchar(255),@desc &nbsp; nvarchar(255),@out &nbsp; int &nbsp; <br />
&nbsp; declare &nbsp; @obj &nbsp; int,@constr &nbsp; nvarchar(1000),@sql &nbsp; varchar(8000),@fdlist &nbsp; varchar(8000) &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; --参数检测 &nbsp; <br />
&nbsp; if &nbsp; isnull(@fname,'')='' &nbsp; set &nbsp; @fname='temp.xls' &nbsp; <br />
&nbsp; if &nbsp; isnull(@sheetname,'')='' &nbsp; set &nbsp; @sheetname=replace(@fname,'.','#') &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; --检查文件是否已经存在 &nbsp; <br />
&nbsp; if &nbsp; right(@path,1)&lt;&gt;'\' &nbsp; set &nbsp; @path=@path+'\' &nbsp; <br />
&nbsp; create &nbsp; table &nbsp; #tb(a &nbsp; bit,b &nbsp; bit,c &nbsp; bit) &nbsp; <br />
&nbsp; set &nbsp; @sql=@path+@fname &nbsp; <br />
&nbsp; insert &nbsp; into &nbsp; #tb &nbsp; exec &nbsp; master..xp_fileexist &nbsp; @sql &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; --数据库创建语句 &nbsp; <br />
&nbsp; set &nbsp; @sql=@path+@fname &nbsp; <br />
&nbsp; if &nbsp; exists(select &nbsp; 1 &nbsp; from &nbsp; #tb &nbsp; where &nbsp; a=1) &nbsp; <br />
&nbsp; &nbsp; set &nbsp; @constr='DRIVER={Microsoft &nbsp; Excel &nbsp; Driver &nbsp; (*.xls)};DSN='''';READONLY=FALSE' &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; +';CREATE_DB="'+@sql+'";DBQ='+@sql &nbsp; <br />
&nbsp; else &nbsp; <br />
&nbsp; &nbsp; set &nbsp; @constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended &nbsp; Properties="Excel &nbsp; 5.0;HDR=YES' &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; +';DATABASE='+@sql+'"' &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; --连接数据库 &nbsp; <br />
&nbsp; exec &nbsp; @err=sp_oacreate &nbsp; 'adodb.connection',@obj &nbsp; out &nbsp; <br />
&nbsp; if &nbsp; @err&lt;&gt;0 &nbsp; goto &nbsp; lberr &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; exec &nbsp; @err=sp_oamethod &nbsp; @obj,'open',null,@constr &nbsp; <br />
&nbsp; if &nbsp; @err&lt;&gt;0 &nbsp; goto &nbsp; lberr &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; --创建表的SQL &nbsp; <br />
&nbsp; declare &nbsp; @tbname &nbsp; sysname &nbsp; <br />
&nbsp; set &nbsp; @tbname='##tmp_'+convert(varchar(38),newid()) &nbsp; <br />
&nbsp; set &nbsp; @sql='select &nbsp; * &nbsp; into &nbsp; ['+@tbname+'] &nbsp; from('+@sqlstr+') &nbsp; a' &nbsp; <br />
&nbsp; exec(@sql) &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; select &nbsp; @sql='',@fdlist='' &nbsp; <br />
&nbsp; select &nbsp; @fdlist=@fdlist+','+a.name &nbsp; <br />
&nbsp; &nbsp; ,@sql=@sql+',['+a.name+'] &nbsp; ' &nbsp; <br />
&nbsp; &nbsp; &nbsp; +case &nbsp; when &nbsp; b.name &nbsp; in('char','nchar','varchar','nvarchar') &nbsp; then &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'text('+cast(case &nbsp; when &nbsp; a.length&gt;255 &nbsp; then &nbsp; 255 &nbsp; else &nbsp; a.length &nbsp; end &nbsp; as &nbsp; varchar)+')' &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; when &nbsp; b.name &nbsp; in('tynyint','int','bigint','tinyint') &nbsp; then &nbsp; 'int' &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; when &nbsp; b.name &nbsp; in('smalldatetime','datetime') &nbsp; then &nbsp; 'datetime' &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; when &nbsp; b.name &nbsp; in('money','smallmoney') &nbsp; then &nbsp; 'money' &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; else &nbsp; b.name &nbsp; end &nbsp; <br />
&nbsp; FROM &nbsp; tempdb..syscolumns &nbsp; a &nbsp; left &nbsp; join &nbsp; tempdb..systypes &nbsp; b &nbsp; on &nbsp; a.xtype=b.xusertype &nbsp; <br />
&nbsp; where &nbsp; b.name &nbsp; not &nbsp; in('image','text','uniqueidentifier','sql_variant','ntext','varbinary','binary','timestamp') &nbsp; <br />
&nbsp; &nbsp; and &nbsp; a.id=(select &nbsp; id &nbsp; from &nbsp; tempdb..sysobjects &nbsp; where &nbsp; name=@tbname) &nbsp; <br />
&nbsp; select &nbsp; @sql='create &nbsp; table &nbsp; ['+@sheetname &nbsp; <br />
&nbsp; &nbsp; +']('+substring(@sql,2,8000)+')' &nbsp; <br />
&nbsp; &nbsp; ,@fdlist=substring(@fdlist,2,8000) &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; exec &nbsp; @err=sp_oamethod &nbsp; @obj,'execute',@out &nbsp; out,@sql &nbsp; <br />
&nbsp; if &nbsp; @err&lt;&gt;0 &nbsp; goto &nbsp; lberr &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; exec &nbsp; @err=sp_oadestroy &nbsp; @obj &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; --导入数据 &nbsp; <br />
&nbsp; set &nbsp; @sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel &nbsp; 5.0;HDR=YES &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; ;DATABASE='+@path+@fname+''',['+@sheetname+'$])' &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; exec('insert &nbsp; into &nbsp; '+@sql+'('+@fdlist+') &nbsp; select &nbsp; '+@fdlist+' &nbsp; from &nbsp; ['+@tbname+']') &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; set &nbsp; @sql='drop &nbsp; table &nbsp; ['+@tbname+']' &nbsp; <br />
&nbsp; exec(@sql) &nbsp; <br />
&nbsp; return &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; lberr: &nbsp; <br />
&nbsp; &nbsp; exec &nbsp; sp_oageterrorinfo &nbsp; 0,@src &nbsp; out,@desc &nbsp; out &nbsp; <br />
&nbsp; lbexit: &nbsp; <br />
&nbsp; &nbsp; select &nbsp; cast(@err &nbsp; as &nbsp; varbinary(4)) &nbsp; as &nbsp; 错误号 &nbsp; <br />
&nbsp; &nbsp; &nbsp; ,@src &nbsp; as &nbsp; 错误源,@desc &nbsp; as &nbsp; 错误描述 &nbsp; <br />
&nbsp; &nbsp; select &nbsp; @sql,@constr,@fdlist &nbsp; <br />
&nbsp; go&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; 
<img src ="http://www.cnblogs.com/xyicheng/aggbug/1148148.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42977/" target="_blank">[新闻]微软首次打破先例 Windows 7不再改名</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>在asp.net中控制回车键 </title><link>http://www.cnblogs.com/xyicheng/archive/2008/03/26/1122890.html</link><dc:creator>xyicheng</dc:creator><author>xyicheng</author><pubDate>Wed, 26 Mar 2008 04:49:00 GMT</pubDate><guid>http://www.cnblogs.com/xyicheng/archive/2008/03/26/1122890.html</guid><wfw:comment>http://www.cnblogs.com/xyicheng/comments/1122890.html</wfw:comment><comments>http://www.cnblogs.com/xyicheng/archive/2008/03/26/1122890.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/xyicheng/comments/commentRss/1122890.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/xyicheng/services/trackbacks/1122890.html</trackback:ping><description><![CDATA[<div class="postTitle"><a class="postTitle2" id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/xxz0618/archive/2006/12/28/605645.html">在asp.net中控制回车键</a> <br />
<font face="Verdana">http://www.cnblogs.com/xxz0618/archive/2006/12/28/605645.html</font></div>
<p>在asp.net网页中，使用服务器button按钮，默认第一个button响应回车键的点击事件。很多时候，第一个按钮这不是<br />
用户在点击回车后想做事情。一般来说，回车键是完成输入工作后提交数据如、关闭当前弹出窗口、输入关键字后回车进行搜索。</p>
<p>在网页中设置回车键的解决方法是使用javascript的document.onkeydown()方法捕捉键盘点击事件，<br />
使用event.keyCode来获取用户点击的键位。<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">function&nbsp;document.onkeydown()<br />
<img id="Codehighlighter1_30_142_Open_Image" onclick="this.style.display='none'; Codehighlighter1_30_142_Open_Text.style.display='none'; Codehighlighter1_30_142_Closed_Image.style.display='inline'; Codehighlighter1_30_142_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_30_142_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_30_142_Closed_Text.style.display='none'; Codehighlighter1_30_142_Open_Image.style.display='inline'; Codehighlighter1_30_142_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_30_142_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_30_142_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #0000ff">event</span><span style="color: #000000">.keyCode&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">13</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_58_140_Open_Image" onclick="this.style.display='none'; Codehighlighter1_58_140_Open_Text.style.display='none'; Codehighlighter1_58_140_Closed_Image.style.display='inline'; Codehighlighter1_58_140_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_58_140_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_58_140_Closed_Text.style.display='none'; Codehighlighter1_58_140_Open_Image.style.display='inline'; Codehighlighter1_58_140_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;</span><span id="Codehighlighter1_58_140_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_58_140_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;button.click();</span><span style="color: #008000">//</span><span style="color: #008000">点击回车键调用button的点击事件</span><span style="color: #008000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">event</span><span style="color: #000000">.returnValue&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;</span><span style="color: #008000">//</span><span style="color: #008000">取消回车键的默认操作</span><span style="color: #008000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<p><br />
如果button按钮为服务器端的按钮，则更改如下：<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">function&nbsp;document.onkeydown()<br />
<img id="Codehighlighter1_30_213_Open_Image" onclick="this.style.display='none'; Codehighlighter1_30_213_Open_Text.style.display='none'; Codehighlighter1_30_213_Closed_Image.style.display='inline'; Codehighlighter1_30_213_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_30_213_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_30_213_Closed_Text.style.display='none'; Codehighlighter1_30_213_Open_Image.style.display='inline'; Codehighlighter1_30_213_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_30_213_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_30_213_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">使用document.getElementById获取到按钮对象</span><span style="color: #008000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;var&nbsp;button&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.getElementById(</span><span style="color: #000000">'</span><span style="color: #000000">&lt;=serverButton.ClientID%&gt;</span><span style="color: #000000">'</span><span style="color: #000000">);<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #0000ff">event</span><span style="color: #000000">.keyCode&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">13</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_161_211_Open_Image" onclick="this.style.display='none'; Codehighlighter1_161_211_Open_Text.style.display='none'; Codehighlighter1_161_211_Closed_Image.style.display='inline'; Codehighlighter1_161_211_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_161_211_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_161_211_Closed_Text.style.display='none'; Codehighlighter1_161_211_Open_Image.style.display='inline'; Codehighlighter1_161_211_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;</span><span id="Codehighlighter1_161_211_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_161_211_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;button.click();<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">event</span><span style="color: #000000">.returnValue&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<p><br />
如果按钮在用户控件中，上面的方法可以放在用户控件中使用。<br />
一定要取消回车键的默认操作，否则默认的按钮还会在执行了button按钮后继续执行。</p>
<p>&nbsp;</p>
<img src ="http://www.cnblogs.com/xyicheng/aggbug/1122890.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42976/" target="_blank">[新闻]亚马逊EC2云计算计划支持Windows操作系统</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>在Javascript中Eval函数的使用 （转-收）</title><link>http://www.cnblogs.com/xyicheng/archive/2008/03/26/1122886.html</link><dc:creator>xyicheng</dc:creator><author>xyicheng</author><pubDate>Wed, 26 Mar 2008 04:48:00 GMT</pubDate><guid>http://www.cnblogs.com/xyicheng/archive/2008/03/26/1122886.html</guid><wfw:comment>http://www.cnblogs.com/xyicheng/comments/1122886.html</wfw:comment><comments>http://www.cnblogs.com/xyicheng/archive/2008/03/26/1122886.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/xyicheng/comments/commentRss/1122886.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/xyicheng/services/trackbacks/1122886.html</trackback:ping><description><![CDATA[<a class="postTitle2" id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/xxz0618/archive/2007/09/28/909378.html">在Javascript中Eval函数的使用</a> <br />
<p dir="ltr">转自<font face="Verdana">http://www.cnblogs.com/xxz0618/archive/2006/12/28/605645.html</font><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JavaScript有许多小窍门来使编程更加容易。其中之一就是eval()函数，这个函数可以把一个字符串当作一个JavaScript表达式一样去执行它。举个小例子</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; widt