<?xml version="1.0" encoding="gb2312"?>
<rss version="2.0">
<channel>
<title><![CDATA[一天一点]]></title>
        <image>
        <title>http://hi.baidu.com</title>
        <link>http://hi.baidu.com</link>
        <url>http://img.baidu.com/img/logo-hi.gif</url>
        </image>
<description><![CDATA[　　一天进步一点点，坚持下去我的梦想一定可以实现．]]></description>
<link>http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE</link>
<language>zh-cn</language>
<generator>www.baidu.com</generator>
<ttl>5</ttl>


<item>
        <title><![CDATA[Delphi 中将对象作为参数传递的使用 举例分析]]></title>
        <link><![CDATA[http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/cd1dda1e88507dfd1ad57650.html]]></link>
        <description><![CDATA[
		
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 84.35pt; text-align: left; mso-char-indent-count: 7.0; mso-pagination: widow-orphan" align="left"><strong style="mso-bidi-font-weight: normal"><span style="font-size: 12pt;  mso-bidi- mso-font-kerning: 0pt"><span></span></span></strong> </p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan" align="left"><span style="font-size: 12pt; color: #ff6000;  mso-bidi- mso-font-kerning: 0pt"> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan" align="left"><span style=" mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">下面的单击事件，将要调用一个以对象为参数的方法，并将结果显示出来。<span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan" align="left"><span style="color: #ff6000;  mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">procedure TForm1.btn1Click(Sender: TObject);<br>
</span><span style=" mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">var<br>
  lStrings: TStrings;<br>
begin<br>
  lStrings:= TStringList.Create;<br>
  try<br>
&nbsp;&nbsp;&nbsp;  lStrings.Add('chen');<br>
&nbsp;&nbsp;&nbsp;  GetOperatorAllDeptIDs(lStrings);<br>
&nbsp;&nbsp;&nbsp;  ShowMessage(lStrings.Text);<br>
  finally<br>
&nbsp;&nbsp;&nbsp;  lStrings.Free;<br>
  end;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan" align="left"><span style=" mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt"> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan" align="left"><span style="color: fuchsia;  mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">调用方法一：</span><span style=" mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt"></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan" align="left"><span style="color: #ff6000;  mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">function GetOperatorAllDeptIDs( AStrings: TStrings):String;<br>
</span><span style=" mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">begin<br>
 //</span><span style=" mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">注释<span> AStrings:= TStringList.Create;<br>
  AStrings. Add('zhi');<br>
end;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan" align="left"><span style="color: fuchsia;  mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">返回结果为：<span>chen<span style="mso-spacerun: yes">  </span>zhi</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan" align="left"><span style="color: fuchsia;  mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">分析：</span><span style="color: red;  mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">此时传递的<span>AStrings </span>为<span>lStrings</span>对象的对象引用副本，即也指向对象<span>lStrings</span>，所以当执行<span>AStrings. Add('zhi');</span>时操作为<span>lStrings</span>对象添加&lsquo;<span>zhi</span>&rsquo;。<span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan" align="left"><span style="color: red;  mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt"> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan" align="left"><span style="color: fuchsia;  mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">调用方法二：</span><span style=" mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt"></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan" align="left"><span style="color: #ff6000;  mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">function GetOperatorAllDeptIDs( var AStrings: TStrings):String;<br>
</span><span style=" mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">begin<br>
 //</span><span style=" mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">注释<span> AStrings:= TStringList.Create;<br>
  AStrings. Add('zhi');<br>
end;</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan" align="left"><span style="color: fuchsia;  mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">返回结果为：<span>chen<span style="mso-spacerun: yes">  </span>zhi</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="color: fuchsia;  mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">分析：</span><span style="color: red;  mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">此时传递的<span>AStrings </span>为<span>lStrings</span>对象的对象引用，当执行<span>AStrings. Add('zhi');</span>时操作的对象为<span>lStrings</span>对象。<span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan" align="left"><span style=" mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt"> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan" align="left"><span style="color: fuchsia;  mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">调用方法三：</span><span style=" mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt"></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan" align="left"><span style="color: #ff6000;  mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">function GetOperatorAllDeptIDs( AStrings: TStrings):String;<br>
</span><span style=" mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">begin<br>
  AStrings:= TStringList.Create;<br>
  AStrings. Add('zhi');<br>
end;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan" align="left"><span style="color: fuchsia;  mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">返回结果为：<span>chen </span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan" align="left"><span style="color: fuchsia;  mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">分析：</span><span style="color: red;  mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">此时传递的<span>AStrings </span>为<span>lStrings</span>对象引用的副本，当方法中执行<span>AStrings:= TStringList.Create;</span>又将对象引用副本 的引用指向了此时新建的一个对象，所以此时对<span>AStrings</span>的任何操作已经不会影响<span>lStrings</span>对象。<span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan" align="left"><span style="color: red;  mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt"> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan" align="left"><span style="color: fuchsia;  mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">调用方法四：</span><span style=" mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt"></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan" align="left"><span style="color: #ff6000;  mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">function GetOperatorAllDeptIDs( var AStrings: TStrings):String;<br>
</span><span style=" mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">begin<br>
  AStrings:= TStringList.Create;<br>
  AStrings. Add('zhi');<br>
end;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: left; mso-pagination: widow-orphan" align="left"><span style="color: fuchsia;  mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">返回结果为：<span>zhi</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="color: fuchsia;  mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">分析：</span><span style="color: red;  mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">此时传递的<span>AStrings </span>为<span>lStrings</span>对象的对象引用，当方法中执行<span>AStrings:= TStringList.Create;</span>时，<span> lStrings</span>这个对象引用指向了新建的<span>AStrings</span>对象。所以，<span>lString</span>的值为&rsquo;<span>Zhi</span>&rsquo;</span><span style=" mso-bidi- mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt"></span></p> <a href="http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/cd1dda1e88507dfd1ad57650.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/category/%D7%D4%BC%BA%D0%B4%B5%C4%D1%A7%CF%B0%D7%DC%BD%E1">自己写的学习总结</a>&nbsp;<a href="http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/cd1dda1e88507dfd1ad57650.html#comment">查看评论</a>]]></description>
        <pubDate>2009-07-24  13:40</pubDate>
        <category><![CDATA[自己写的学习总结]]></category>
        <author><![CDATA[歪梨小丫]]></author>
		<guid>http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/cd1dda1e88507dfd1ad57650.html</guid>
</item>

<item>
        <title><![CDATA[insert select的语句和select into语句的区别?]]></title>
        <link><![CDATA[http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/37002ab13ed8ed53082302d7.html]]></link>
        <description><![CDATA[
		
		select into 和 insert into select 两种表复制语句 <br>
第一句（select into from）要求目标表（destTbl）不存在，因为在插入时会自动创建。 <br>
<br>
第二句（insert into select from）要求目标表（destTbl）存在，由于目标表已经存在，所以我们除了插入源表（srcTbl）的字段外，还可以插入常量. 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/category/Sql%20Server">Sql Server</a>&nbsp;<a href="http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/37002ab13ed8ed53082302d7.html#comment">查看评论</a>]]></description>
        <pubDate>2009-01-15  17:21</pubDate>
        <category><![CDATA[Sql Server]]></category>
        <author><![CDATA[歪梨小丫]]></author>
		<guid>http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/37002ab13ed8ed53082302d7.html</guid>
</item>

<item>
        <title><![CDATA[先进制造环境下BOM的存储结构与表现形式研究与实现（续３）]]></title>
        <link><![CDATA[http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/53f68af514c60722bd310944.html]]></link>
        <description><![CDATA[
		
		<strong> 2.6 汇总反查式</strong>
<p>&nbsp;&nbsp;&nbsp;  汇总反查式主要对多层反查式的结果进行汇总，说明总用量是多少，哪些部件用到该零/部件，其输出格式见多层反查式。</p>
<p><strong>&nbsp;&nbsp;&nbsp;  2.7 矩阵式</strong></p>
<p>&nbsp;&nbsp;&nbsp;  矩阵式是对具有大量通用零件的产品系列进行数据合并后得到的一种BOM输出格式。可在多个产品结构之间进行多层次、横向查询。用来描述某零件在哪些产品中用到，用量是多少等。由于该清单没有描述产品结构的装配关系，因此不能用于多层产品的制造过程，这种输出格式结构复杂，由于涉及到分类统计，查询性能较低。其输出内容对应表7，表7中的&ldquo;一&rdquo;符号表示某零/部件在该产品中不存在。</p>
<p align="center"><img style="width: 356px; height: 400px" src="http://www.e-works.net.cn/fileupload/images/128638664889843750_new.jpg" width="356" height="400"></p>
<p align="center">&nbsp;&nbsp;&nbsp;  表7 矩阵式</p>
<p><strong>&nbsp;&nbsp;&nbsp;  2.8 对比式</strong></p>
<p>&nbsp;&nbsp;&nbsp;  对比式是在矩阵式查询的基础上，对两种(或两种以上)产品(或部件)的结构进行比较，输出公共的零件或部件的用量，一般只输出相同的结构，不输出差异部分。这种清单可以比较不同产品之间所需要的零/部件的比例。其输出格式见矩阵式，在此不再赘述。</p>
<p><strong>&nbsp;&nbsp;&nbsp;  3 SQL脚本应用实例</strong></p>
<p>&nbsp;&nbsp;&nbsp;  某减速器制造企业的EPR软件是基于Oracle大型数据库软件设计开发的，其中BOM管理模块的数据库信息模型采用混合式存储结构。由于oracle数据库提供了树型结构查询方法(包括正向单级、正向多级、反向单级与反向多级等)，因此能满足BOM各种输出格式查询功能。具体SQL查询语句实现如表8所示。</p>
<p align="center"><img style="width: 402px; height: 804px" src="http://www.e-works.net.cn/fileupload/images/128638665068281250_new.jpg" width="402" height="804"></p>
<p align="center">&nbsp;&nbsp;&nbsp;  表8 各种BOM输出格式与SQL语句查询实现</p>
<p>&nbsp;&nbsp;&nbsp;  <strong>4 结语</strong></p>
<p>&nbsp;&nbsp;&nbsp;  本文从数据库存储冗余度、查询性能及查询实现功能等角度研究了BOM多种存储结构类型的优点和缺点，给出了实用的混合式BOM存储结构信息模型，该模型不但能查询给定产品的所有零/部件，能通过递归算法查询产生一个完整的产品结构树或部件子树，还能进行正反向单级或多级查询某零/部件的直接或间接上级部件等，基于该模型研究了某减速器产品的BOM的多种输出格式及用途。通过一个PDM软件的应用实例，用Oracle数据库的SQL脚本实现了BOM的多种输出格式。如果将这些封装到数据库包中的SQL语句的存储过程或函数供外部调用，将大大降低BOM管理中间组件的复杂性，减少网络的传输量，并提高ERP或PDM系统有关BOM数据的安全性。</p> <a href="http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/53f68af514c60722bd310944.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/53f68af514c60722bd310944.html#comment">查看评论</a>]]></description>
        <pubDate>2009-01-12  15:24</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[歪梨小丫]]></author>
		<guid>http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/53f68af514c60722bd310944.html</guid>
</item>

<item>
        <title><![CDATA[先进制造环境下BOM的存储结构与表现形式研究与实现（续２）]]></title>
        <link><![CDATA[http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/c0332d13e41ffcd7f6039e44.html]]></link>
        <description><![CDATA[
		
		<strong>2.2 多级展开式</strong>
<p>&nbsp;&nbsp;&nbsp;  多级展开式也称为缩行式。该格式是按照产品制造的方式来描述产品结构的。即从最高层零/部件(产品)开始按照子件所在的层次逐级向后缩排，同一层次的所有零/部件信息都显示在同一列上，各子件所处的位置一目了然，这是一种完整的产品树型结构。这种输出格式结构复杂，由于涉及到递归算法，查询性能较低，适合于产品结构配置及物料需求计划的分解，其输出内容对应表3。</p>
<p align="center"><img style="width: 353px; height: 287px" src="http://www.e-works.net.cn/fileupload/images/128638663463437500_new.jpg" width="353" height="287"></p>
<p align="center">&nbsp;&nbsp;&nbsp;  表3 多级展开式</p>
<p><strong>&nbsp;&nbsp;&nbsp;  2.3 顺序汇总式</strong></p>
<p>&nbsp;&nbsp;&nbsp;  顺序汇总式直接对组成最终产品结构的最底层零件进行汇总，反映了一个最终产品所需的各种零件总数，不反映产品的结构关系。如果某一零件用于多个装配部件，该格式将适合确定合适的采购总量。由于不反映产品的结构关系，该格式适合用来核算产品的成本、采购等活动。这种输出格式结构简单，查询方便。其输出内容对应表4。</p>
<p align="center"><img style="width: 354px; height: 245px" src="http://www.e-works.net.cn/fileupload/images/128638663720625000_new.jpg" width="354" height="245"></p>
<p align="center">&nbsp;&nbsp;&nbsp;  表4 顺序汇总式</p>
<p><strong>&nbsp;&nbsp;&nbsp;  2.4 单层反查式</strong></p>
<p>&nbsp;&nbsp;&nbsp;  单层反查式也称为单行跟踪式。其原理是在产品结构中，根据子件向上查询直接父件(上层)，不包括间接父件，该格式主要用来描述某一零/部件被用于何处。这种输出格式结构简单，查询性能较高，其输出内容对应表5，表5中括号内数字表示部件或装配件。</p>
<p align="center"><img style="width: 346px; height: 269px" src="http://www.e-works.net.cn/fileupload/images/128638664441093750_new.jpg" width="346" height="269"></p>
<p align="center">&nbsp;&nbsp;&nbsp;  表5单层反查式</p>
<p><strong>&nbsp;&nbsp;&nbsp;  2.5 多层反查式</strong></p>
<p>&nbsp;&nbsp;&nbsp;  多层反查式也称为缩行跟踪式。其原理是在产品结构中，根据子件逐层向上查询父件(上层)，而且最终能查询到顶层父件，将所有直接或间接用到该子件的部件全部列出。该清单主要用于评价工程设计变化的效果及决定生成某零/部件需求的上层物料。这种输出格式结构复杂，由于涉及到递归算法，查询性能较低。表6中描述了零件编号9、19及36的多层反查输出格式。</p>
<p align="center"><img style="width: 349px; height: 179px" src="http://www.e-works.net.cn/fileupload/images/128638664724062500_new.jpg" width="349" height="179"></p>
<p align="center">&nbsp;&nbsp;&nbsp;  表6 多层反查式</p> <a href="http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/c0332d13e41ffcd7f6039e44.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/c0332d13e41ffcd7f6039e44.html#comment">查看评论</a>]]></description>
        <pubDate>2009-01-12  15:23</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[歪梨小丫]]></author>
		<guid>http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/c0332d13e41ffcd7f6039e44.html</guid>
</item>

<item>
        <title><![CDATA[先进制造环境下BOM的存储结构与表现形式研究与实现（续１）]]></title>
        <link><![CDATA[http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/b97dabf4ff9a55e87709d77b.html]]></link>
        <description><![CDATA[
		
		<strong>  2 BOM的表现形式</strong>
<p>&nbsp;&nbsp;&nbsp;  在PDM系统与EPR系统的BOM应用中，表现形式是通过输出格式来描述的。其常见的输出格式有如下几种，如单级展开式、多级展开式、顺序汇总式、单层反查式、多层反查式、汇总反查式、矩阵式和对比式等8种，结合图2a、图2b所示的两个一级圆柱齿轮减速器产品结构(注意图中方框中的含义，如&ldquo;输人轴组件：021(1)&rdquo;表示零/部件名称为输人轴组件，其编码为021，属于02产品，装配数量为1个)，各种输出格式描述如下。</p>
<p align="center"><img style="width: 306px; height: 376px" src="http://www.e-works.net.cn/fileupload/images/128638663226562500_new.jpg" width="306" height="376"></p>
<p align="center">&nbsp;&nbsp;&nbsp;  图2 两种一级圆柱齿轮减速器产品结构简图</p>
<p><strong>&nbsp;&nbsp;&nbsp;  2.1 单级展开式</strong></p>
<p>&nbsp;&nbsp;&nbsp;  单级展开式显示某一部件的所有下属零/部件及装配数量关系，一个完整的产品是由若干部件构成的，因此采用多个单级展开能完整表达产品的树结构。这种输出格式结构简单，查询性能高，其输出内容对应表2。</p>
<p align="center"><img style="width: 347px; height: 287px" src="http://www.e-works.net.cn/fileupload/images/128638663359687500_new.jpg" width="347" height="287"></p>
<p align="center"> </p> <a href="http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/b97dabf4ff9a55e87709d77b.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/b97dabf4ff9a55e87709d77b.html#comment">查看评论</a>]]></description>
        <pubDate>2009-01-12  15:22</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[歪梨小丫]]></author>
		<guid>http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/b97dabf4ff9a55e87709d77b.html</guid>
</item>

<item>
        <title><![CDATA[先进制造环境下BOM的存储结构与表现形式研究与实现]]></title>
        <link><![CDATA[http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/a12364cee4ca620493457e7a.html]]></link>
        <description><![CDATA[
		
		 物料清单(BinfoMaterail，BOM)是产品结构的描述性文件，它反映了产品部件、子部件、零件直至原材料之间的结构关系，以及每个装配部件所需要的各子部件的数量，BOM有时也称为产品结构树。
<p>&nbsp;&nbsp;&nbsp;  在制造业企业产品全生命周期的不同阶段内，BOM与各个部门紧密联系，呈现出不同的表现形式，称为产品结构多视图技术。如设计部门应用产品数据管理(Product Data Management，PDM)与CAD系统进行集成产生设计BOM，并进行产品配置管理，使产品设计系列化、标准化及通用化；计划部门则在企业资源计划(EnterPrise Resources，Planing，ERP)系统的支持下利用计划BOM来迅速查找零件是否属于采购件(包括供应商信息)、外协件(包括外协单位信息)、标准件，还是自制件(包括材料、生产车间等信息)，以便为安排生产做准备；制造部门依据制造BOM的零件类型(轴类、箱体类等)组织生产；销售部门依据销售BOM作为报价参考；财务部门依据成本BOM计算成本等等。其中设计BOM用来描述产品结构的来源，其他类型BOM是在设计BOM的基础上经过转化而来的。BOM是PDM系统与ERP系统集成的重要接口，研究BOM的存储结构及表现形式有重要的现实意义。</p>
<p> <strong>&nbsp;&nbsp;  1 BOM存储结构的类型</strong></p>
<p>&nbsp;&nbsp;&nbsp;  目前国内对BOM存储结构的描述较多，常见的有多层式、单层式两种方式。以图1所示的减速器产品简化结构示例来描述这两种格式的存储结构的信息模型与实例如表1所示。</p>
<p align="center"><img style="width: 620px; height: 539.37px" src="http://www.e-works.net.cn/fileupload/images/128638662468750000_new.jpg" width="569" height="504"></p>
<p align="center">&nbsp;&nbsp;&nbsp;  表1 三种BOM存储结构及实例</p>
<p align="center"><img style="width: 196px; height: 107px" src="http://www.e-works.net.cn/fileupload/images/128638662652656250_new.jpg" width="196" height="107"></p>
<p align="center">&nbsp;&nbsp;&nbsp;  图1 某减速器产品结构简图</p>
<p>&nbsp;&nbsp;&nbsp;  从表1可知，多层式BOM结构采用&ldquo;单父一多子&rdquo;的数据结构，其中最底层零件的层次用&ldquo;L&rdquo;符号表示，以下同。该结构特点是详细描述了某产品的结构，各个零/部件的储存都要记录一次对应的产品信息，容易获取属于某产品的所有零/部件信息，查询算法简单，查询效率高；但缺点是数据存储冗余大，对于同版本同一产品的零/部件要重复定义，如部件B重复定义了两次。虽然给出了某零/部件的层次关系，但无法给出零/部件的上下级关系，只知道它属于哪一个产品，同一产品的相同层次的相同零/部件无法分清其上级部件，无法用于制定象装配作业计划及物料需求计划等与产品结构树有关的活动。</p>
<p>&nbsp;&nbsp;&nbsp;  单层式BOM结构采用&ldquo;单父一单子&rdquo;的数据结构，只记录各个父项与子项之间的对应关系，最高级父项编码为空，其对应的子项为产品。这种存储结构与多层式BOM相比不但减少了数据存储的冗余，而且明确定义了各个零/部件的上下级关系，通过递归算法查询可以得到一个完整的产品结构树。但缺点是如果其他产品也有该零/部件，则可能存在数据存储冗余，如产品M也有部件B，但组成部件B的零件E数量为1，而不是2，则该结构无法描述这一规定，而且也不能直接查询出某零/部件所属的产品。</p>
<p>&nbsp;&nbsp;&nbsp;  分析多层式BOM结构和单层式BOM结构的优缺点后，将两种存储结构优点结合，得到混合式BOM存储结构，如表1所示。该结构在单层式BOM结构的基础上增加了产品编码项，BOM表具有一对多的自反关系，可以解决单层式BOM存储结构的缺点。该存储结构具有如下的优点：能查询某个产品的所有零/部件组成；能通过递归算法查询产生一个完整的产品结构树或部件树；能正反向单级或多级反查某零/部件的直接或间接上级；能快速查询某零/部件的所有所属产品等等，而这些功能正是ERP系统与PDM系统所必备的。</p> <a href="http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/a12364cee4ca620493457e7a.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/a12364cee4ca620493457e7a.html#comment">查看评论</a>]]></description>
        <pubDate>2009-01-12  15:21</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[歪梨小丫]]></author>
		<guid>http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/a12364cee4ca620493457e7a.html</guid>
</item>

<item>
        <title><![CDATA[如何在一个流程中间环节，产生多个任务分派给不同人员]]></title>
        <link><![CDATA[http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/8227bd4c99b9a6fed62afcfa.html]]></link>
        <description><![CDATA[
		
		<p><font face="verdana, arial, helvetica" size="2">procedure TMainForm.FlowBroker1CreateFlowOutFlowTasks(Sender: TObject; Command: TFlowOutCommand);<br>
var<br>
&nbsp;&nbsp; lFlowTask: TFlowTask;<br>
&nbsp;&nbsp; //ContextCurrent:TContextCurrent;<br>
&nbsp;&nbsp; lOrgURL: TOrgURL;<br>
&nbsp;&nbsp; Person: TPerson;<br>
begin<br>
<br>
&nbsp;&nbsp; if&nbsp;&nbsp; DataSetBroker1.DataSet.RecordCount=0 then<br>
&nbsp;&nbsp;&nbsp; begin<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Business.Forms.Dialogs.ShowMessage('流转时检测到项目数据集为零');<br>
&nbsp;&nbsp;&nbsp; end<br>
&nbsp;&nbsp; else<br>
&nbsp;&nbsp;&nbsp; begin<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lflowTask:=Command.FlowTasks.FindFlowTask(FlowBroker1.FlowControl.CurrentProcUnit.SuccedentUnits[0]);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lFlowTask.Executors.Clear;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DataSetBroker1.DataSet.First;<br>
//DataSetBroker1.DataSet有n条记录，将产n个任务<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while not DataSetBroker1.DataSet.eof do<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Person:=OrgSys.OrgSystem.FindPerson(DataSetBroker1.DataSet.FieldByName('YJSHR').AsString);<br>
//接受任务的人员ID<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lOrgURL:=TOrgURL.Create('YPJCBM','YPZR',Person.ID);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lflowTask.Executors.Add(lOrgURl);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dialogs.ShowMessage('增加任务到' +DataSetBroker1.DataSet.FieldByName('YJSHR').AsString +' 成功');<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DataSetBroker1.DataSet.Next;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Command.UserModify := False;<br>
&nbsp;&nbsp;&nbsp; end<br>
end;</font></p> <a href="http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/8227bd4c99b9a6fed62afcfa.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/category/Justep%20Business">Justep Business</a>&nbsp;<a href="http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/8227bd4c99b9a6fed62afcfa.html#comment">查看评论</a>]]></description>
        <pubDate>2008-12-28  14:48</pubDate>
        <category><![CDATA[Justep Business]]></category>
        <author><![CDATA[歪梨小丫]]></author>
		<guid>http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/8227bd4c99b9a6fed62afcfa.html</guid>
</item>

<item>
        <title><![CDATA[java 配置问题]]></title>
        <link><![CDATA[http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/d8ea94fa1354bf19a9d311a2.html]]></link>
        <description><![CDATA[
		
		java的安装
<div class="wr" ><span class="red"><img height="16" src="http://img.baidu.com/img/iknow/icn_point.gif" width="16" align="absMiddle"> 悬赏分：20</span> - <span class="gray">解决时间：2008-5-20 12:52</span></div>
<div class="f14 wr" ><cd></cd>我是一个java初学者，我下了jdk-6u5-windows-i586-p.exe，在安装的第一步，我选了安第一个&ldquo;开发工具&rdquo;，但安完测试的时候，javac显示不是内部命令，但java命令又行，是什么原因，我该怎么安装呢，正确的安装后有那些文件，希望大家不吝赐教。</div>
<div class="f14 wr" > </div>
<div class="gray wr" align="right">提问者： <a href="http://passport.baidu.com/?business&amp;aid=6&amp;un=will000000#2" target="_blank">will000000</a> - <a href="http://www.baidu.com/search/zhidao_help.html#n5" target="_blank">试用期 一级</a></div>
<div class="rg_4"> </div>
<div class="rg_5"> </div>
<div class="rg_1"> </div>
<div class="mb12 bai">
<div class="rr_1"> </div>
<div class="rr_2"> </div>
<div class="rr_3"> </div>
<div class="rr">
<div class="t1">
<div class="ico">
<div class="ibest"> </div>
</div>
最佳答案</div>
<div class="bc0" style="padding-right: 0pt; padding-left: 0pt; padding-bottom: 5px; padding-top: 5px">
<div class="wr">
<div class="f14 p90 pl10" ><ca></ca>我正在学java，看到很多博客上都有关于java环境变量的设置，我也不厌其烦的重写一变，借此了解一下整个系统的环境变量。 <br>
<br>
JAVA_HOME,CLASSPATH,PATH. <br>
<br>
只有这三个java环境变量。 <br>
<br>
JAVA_HOME指向的是JDK的安装路径，如C:\j2sdk1.4.2_09，在这路径下你应该能够找到bin、lib等目录。当然，你愿意放哪里，就放哪里。我的是放在c盘根目录 <br>
<br>
JAVA_HOME=C:\j2sdk1.4.2_09; <br>
<br>
PATH环境变量,目的是为了指向JDK的bin目录，这里面放的是各种编译执行命令。 <br>
<br>
我的设置是： <br>
<br>
PATH=C:\j2sdk1.4.2_09\bin;C:\j2sdk1.4.2_09\jre\bin; <br>
<br>
需要说明，系统中本身就有PATH环境变量，只要把C:\j2sdk1.4.2_09\bin;C:\j2sdk1.4.2_09\jre\bin;直接放到后面即可，中间有分号间隔。 <br>
<br>
如果你的JAVA_HOME是别的目录，就对照着该吧。 <br>
<br>
CLASSPATH最重要。 <br>
<br>
CLASSPATH=.;C:\j2sdk1.4.2_09\lib;C:\j2sdk1.4.2_09\lib\tools.jar;这时我的设置。这是类的路径。前面加上点和分号，意为首先在当前目录查找，以后你自己编写类的时候自然明白这点。 <br>
<br>
那么为什么要设置环境变量，以前编写c语言的时候怎么不设置呢？ <br>
<br>
由于WINDOWS默认的搜索顺序，先搜索当前目录的，再搜索系统目录的，再搜索PATH环境变量设定的。你在编写java程序时，在一个指定目录，这里没有编译执行命令，而系统目录里面，也没有编译执行命令。所以放在环境变量里面， 从这里你应该可以看出，环境变量是干什么用的了。简单说就是告诉操作系统到那里去找指定的文件。你要是把系统目录给改了，看你用dos命令还好不好使。 <br>
<br>
配置完后，在命令提示符下，键入java -version,如果出现java的一些信息，说明配置成功 <br>
<br>
<br>
J2SDK和TOMCAT的安装及配置 <br>
作者： ∣来源：JavaResearch∣原文地址∣2005-5-8 <br>
经常看到jsp的初学者问tomcat下如何配置jsp、servlet的问题，于是总结了一下如何tomcat下配置jsp、servlet，希望对那些初学者有所帮助。 <br>
第一步：下载j2sdk和tomcat：到sun官方站点 <br>
最新的jdk为1.5，tomcat为5.5，建议jdk1.4以上，tomcat4.0以上 <br>
第二步：安装和配置你的j2sdk和tomcat：执行j2sdk和tomcat的安装程序，然后设置按照路径进行安装即可。 <br>
1.安装j2sdk以后，需要配置一下环境变量，在我的电脑-&gt;属性-&gt;高级-&gt;环境变量-&gt;系统变量中添加以下环境变量(假定你的j2sdk安装在c:\j2sdk1.4.2）： <br>
JAVA_HOME=c:\j2sdk1.4.2 <br>
classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;（.;一定不能少，因为它代表当前路径) <br>
path=%JAVA_HOME%\bin <br>
<br>
接着可以写一个简单的java程序来测试J2SDK是否已安装成功： <br>
public class Test{ <br>
public static void main(String args[]){ <br>
System.out.println(&quot;This is a test program.&quot;); <br>
} <br>
} <br>
将上面的这段程序保存为文件名为Test.java的文件。 <br>
然后打开命令提示符窗口，cd到你的Test.java所在目录，然后键入下面的命令 <br>
javac Test.java <br>
java Test <br>
此时如果看到打印出来This is a test program.的话说明安装成功了，如果没有打印出这句话，你需要仔细检查一下你的配置情况。 <br>
<br>
2.安装Tomcat后，在我的电脑-&gt;属性-&gt;高级-&gt;环境变量-&gt;系统变量中添加以下环境变量(假定你的tomcat安装在c:\tomcat）： <br>
CATALINA_HOME：c:\tomcat <br>
CATALINA_BASE：c:\tomcat <br>
TOMCAT_HOME: C:\Tomcat <br>
然后修改环境变量中的classpath，把tomat安装目录下的common\lib下的servlet.jar追加到classpath中去，修改后的classpath如下： <br>
classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\common\lib\servlet.jar; <br>
接着可以启动tomcat，在IE中访问<a href="http://localhost:8080/" target="_blank">http://localhost:8080</a>，如果看到tomcat的欢迎页面的话说明安装成功了。 <br>
第三步：建立自己的jsp app目录 <br>
1.到Tomcat的安装目录的webapps目录，可以看到ROOT，examples, tomcat-docs之类Tomcat自带的的目录； <br>
2.在webapps目录下新建一个目录，起名叫myapp； <br>
3.myapp下新建一个目录WEB-INF，注意，目录名称是区分大小写的； <br>
4.WEB-INF下新建一个文件web.xml，内容如下： <br>
&lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?&gt; <br>
<br>
&lt;!DOCTYPE web-app <br>
PUBLIC &quot;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&quot; <br>
&quot;<a href="http://java.sun.com/dtd/web-app_2_3.dtd" target="_blank">http://java.sun.com/dtd/web-app_2_3.dtd</a>&quot;&gt; <br>
<br>
&lt;web-app&gt; <br>
&lt;display-name&gt;My Web Application&lt;/display-name&gt; <br>
&lt;description&gt; <br>
A application for test. <br>
&lt;/description&gt; <br>
&lt;/web-app&gt; <br>
5.在myapp下新建一个测试的jsp页面，文件名为index.jsp，文件内容如下： <br>
&lt;html&gt;&lt;body&gt;&lt;center&gt; <br>
Now time is: &lt;%=new java.util.Date()%&gt; <br>
&lt;/center&gt;&lt;/body&gt;&lt;/html&gt; <br>
6.重启Tomcat <br>
7.打开浏览器，输入<a href="http://localhost:8080/myapp/index.jsp" target="_blank">http://localhost:8080/myapp/index.jsp</a> 看到当前时间的话说明就成功了。 <br>
第四步：建立自己的Servlet： <br>
写入你的第一个Servlet <br>
import java.io.*; <br>
import javax.servlet.*; <br>
import javax.servlet.http.*; <br>
public class HelloWorld extends HttpServlet <br>
{ <br>
public void doGet(HttpServletRequest request,HttpServletResponse response)th <br>
rows ServletException,IOException <br>
{ <br>
response.setContentType(&quot;text/html&quot;); <br>
PrintWriter out = response.getWriter(); <br>
out.println(&quot;&lt;html&gt;&lt;head&gt;&lt;title&gt;&quot;); <br>
out.println(&quot;This is my first Servlet&quot;); <br>
out.println(&quot;&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&quot;); <br>
out.println(&quot;&lt;h1&gt;Hello,World!&lt;/h1&gt;&quot;); <br>
out.println(&quot;&lt;/body&gt;&lt;/html&gt;&quot;); <br>
<br>
} <br>
} <br>
然后照样用javac HelloWorld.java来编译这个文件，如果出现无法import javax.servl <br>
et.* <br>
那么就是应该把C:\Tomcat\common\lib里面的servlet.jar文件拷贝到C:\JDK\jre\lib\e <br>
xt中，再次编译，就没有问题了！ <br>
然后在Tomcat目录里面的C:\Tomcat\webapps\ROOT里面按如下的文件结构： <br>
ROOT\index.html <br>
ROOT\welcom.jsp <br>
ROOT\WEB-INF\lib\MyServlet.jar（如果你的servlet的.class打成了.jar文件，则放在 <br>
lib下面) <br>
ROOT\WEB-INF\classes\HelloWorld.class(把上面生成的HelloWorld.class文件放在这个 <br>
里面) <br>
然后在浏览器中输入<a href="http://localhost:8080/servlet/HelloWorld" target="_blank">http://localhost:8080/servlet/HelloWorld</a>,于是Server众望所归的报错了:Error 404--Not Found <br>
怎么回事呢？ <br>
Servlet必须使用C:\Tomcat\webapps\ROOT\WEB-INF这个目录下面的web.xml文件进行注册， <br>
用EP打开这个web.xml文件， <br>
<br>
把下面这段程序 <br>
servlet&gt; <br>
..... <br>
&lt;/servlet&gt; <br>
<br>
&lt;servlet-mapping&gt; <br>
...... <br>
&lt;/servlet-mapping&gt; <br>
替换成 <br>
&lt;servlet&gt; <br>
&lt;servlet-name&gt;HelloWorld&lt;/servlet-name&gt; <br>
&lt;servlet-class&gt;HelloWorld&lt;/servlet-class&gt; <br>
&lt;/servlet&gt; <br>
&lt;servlet-mapping&gt; <br>
&lt;servlet-name&gt;HelloWorld&lt;/servlet-name&gt; <br>
&lt;url-pattern&gt;/servlet/HelloWorld&lt;/url-pattern&gt; <br>
&lt;/servlet-mapping&gt; <br>
如果没有的话，就直接加那段代码 <br>
<br>
为什么呢？ <br>
因为 这样的结构 <br>
&lt;servlet&gt; <br>
&lt;servlet-name&gt;HelloWorld&lt;/servlet-name&gt; <br>
&lt;servlet-class&gt;HelloWorld&lt;/servlet-class&gt; <br>
&lt;/servlet&gt; <br>
表示指定包含的servlet类. <br>
而以下的结构 <br>
&lt;servlet-mapping&gt; <br>
&lt;servlet-name&gt;HelloWorld&lt;/servlet-name&gt; <br>
&lt;url-pattern&gt;/servlet/HelloWorld&lt;/url-pattern&gt; <br>
&lt;/servlet-mapping&gt; <br>
表示指定HelloServlet应当映射到哪一种URL模式。 <br>
在修改web.xml完毕过后，重新启动Server，然后再输入<a href="http://localhost:8080/servlet/HelloWorld" target="_blank">http://localhost:8080/servlet/HelloWorld</a>，那么偌大一个Hello,World!等 <br>
着你呢，恭喜你 <br>
摆平了：） <br>
<br>
<br>
<br>
<br>
这是我2年前网上找的，放在自己硬盘里有问题随时看，不是我写的</div>
</div>
</div>
</div>
</div> <a href="http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/d8ea94fa1354bf19a9d311a2.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/category/jave%C8%EB%C3%C5%D6%AA%CA%B6">jave入门知识</a>&nbsp;<a href="http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/d8ea94fa1354bf19a9d311a2.html#comment">查看评论</a>]]></description>
        <pubDate>2008-11-10  10:39</pubDate>
        <category><![CDATA[jave入门知识]]></category>
        <author><![CDATA[歪梨小丫]]></author>
		<guid>http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/d8ea94fa1354bf19a9d311a2.html</guid>
</item>

<item>
        <title><![CDATA[忘记登录操作系统的密码]]></title>
        <link><![CDATA[http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/3a9c5cf2e11b9814b07ec595.html]]></link>
        <description><![CDATA[
		
		如果是BIOS密码忘记的话可以通过拔掉主板上的BIOS电池的方式取消bios密码. <br>
关于windows xp忘记密码的解决方法 <br>
windows忘记密码的解决方法总结如下： <br>
<br>
秘诀1：大家知道，WindowsXP的密码存放在系统所在的Winnt\System32\Config下SAM文件中，SAM文件即账号密码数据库文件。当我们登录系统的时候，系统会自动地和Config中的SAM自动校对，如发现此次密码和用户名全与SAM文件中的加密数据符合时，你就会顺利登录;如果错误则无法登录。既然如此，我们的第一个方法就产生了：删除SAM文件来恢复密码。如果你不用管本来系统卡包含的任意账号，而且有两个操作系统的话，可以使用另外一个能访问NTFS的操作系统启动电脑，或者虽然没有安装两个系统，但可以使用其他工具来访问NTFS。然后删除C：\WINNT\system32\config目录下的SAM文件，重新启动。这时，管理员Administrator账号就没有密码了。当然，取下硬盘换到其他机器上来删除SAM文件也算个好办法。 <br>
<br>
！！！这个方法在2000上是有用的，但对于xp没用，因为xp删除这个文件以后就无法启动了。 <br>
<br>
秘诀2：使用Off1ine NT Password &amp; Registry Editor。用该软件可以制作Linux启动盘，这个启动盘可以访问NTFS文件系统，因此可以很好地支持Windows2000/XP。使用该软盘中的一个运行在Linux的工具Ntpasswd就可以解决问题。并且可以读取注册表并重写账号密码。使用的方法很简单，只需根据其启动后的提示一步一步做就可以了。在此，建议你使用快速模式，这样会列出用户供你选择修改哪个用户的密码。默认选择Admin组的用户，自动找到把Administrator的名字换掉的用户，十分方便。下面的网站提供免费的最新软盘镜像：http：//home.eunet.no/~pnordahl/ntpasswd/. <br>
<br>
！！！此方法我在xp上试过了，启动是成功了，修改密码也是成功的，但重新启动以后，用修改过的密码我还是进不去，不知道是我操作不对，还是什么？ 成功的兄弟可以讲下经验。 <br>
<br>
秘诀3：使用Windows Key 5.0。该软件包含在PasswareKit5.0中，用于恢复系统管理员的密码，运行后生成3个文件：txtsetup.oem.winkey.sys和winkey.inf,3个文件一共才50KB,短小精悍。把这3个文件放到任何软盘中，然后使用XP安装光盘启动电脑，启动过程中按F6键让系统安装第三方的驱动程序。此时，正是我们切入的最好时机，放人该软盘就会自动跳到WindowsKey的界面。它会强行把Administrator的密码换成 &quot;12345&quot;，如此一来何愁大事不成?呵呵!当你重新启动以后，你会被要求再次修改你的密码。软件下载地址：htip：//<a href="http://www.lostpassword.corn/windows-xp-2000-nt.htm" target="_blank">www.lostpassword.corn/windows-xp-2000-nt.htm</a>。 <br>
<br>
！！！由于太麻烦，没去试，不知道能行否？ <br>
<br>
秘诀4：使用NTFS DOS这个可以从DOS下写NTFS分区的工具。用该软件制作一个DOS启动盘，然后到C;\Winnt\System32下将屏幕保护程序logon.scr改名，接着拷贝command.com到C：\Winnt\system32下(2000可以用cmd.exe),并将该文件改名为logon.scr。这样启动机器后等待5分钟，本应该出现的屏幕保护现在变成了命令行模式，而且是具有Administrator权限的，通过它就可以修改密码或者添加新的管理员账号了。改完后不要忘了把屏幕保护程序的名字改回去啊。下载地址：http：/<a href="http://www.cgsecurity.org/index.html?" target="_blank">www.cgsecurity.org/index.html?</a> <br>
<br>
！！！这个我也试过了，但我重新启动以后，一直不登陆，等了半个小时他也没出来屏保，具体原因还不知道。 <br>
<br>
秘诀5：下面介绍一个比较与众不同的方法。你可以在别的分区上再装一个XP，硬盘分区格式要和原来的一样，并且请你注意一定不要和原来的XP安装在同一分区!在开始之前，一定要事先备份引导区MBR(Master Boot Record).备份MBR的方法有很多，可以自己编程，或使用工具软件，如杀毒软件KV3000等。装完后用Administrator登录，现在你对原来的XP就有绝对的写权限了。你可以把原来的SAM拷下来，用lOphtcrack得到原来的密码。也可以把新安装的XP的Winnt\System32\Config\下的所有文件覆盖到C\Winnt\System32\Config目录中(假设原来的XP安装在这里)，然后用KV3000恢复以前备份的主引导区MBR，现在你就可以用Administrator身份登陆以前的XP了。 <br>
<br>
！！！这个有点垃圾，都重装了。。。。但你原来系统有重要的软件的话，可能最后不得以也可以试下此法！ <br>
<br>
秘诀6：Windows XP中提供了&quot;net user&quot;命令，该命令可以添加、修改用户账户信息，其语法格式为： <br>
<br>
net user [UserName [Password | *] [options]] [/domain] <br>
<br>
net user [UserName {Password | *} /add [options] [/domain] <br>
<br>
net user [UserName [/delete] [/domain]] <br>
<br>
我们现在以恢复本地用户&quot;*****&quot;口令为例，来说明解决忘记登录密码的步骤： <br>
<br>
1、重新启动计算机，在启动画面出现后马上按下F8键，选择&quot;带命令行的安全模式&quot;。 <br>
<br>
2、运行过程结束时，系统列出了系统超级用户&quot;administrator&quot;和本地用户&quot;*****&quot;的选择菜单，鼠标单击&quot;administrator&quot;，进入命令行模式。 <br>
<br>
3、键入命令：&quot;net user ***** 123456 /add&quot;，强制将&quot;*****&quot;用户的口令更改为&quot;123456&quot;。若想在此添加一新用户（如：用户名为abcdef，口令为123456）的话，请键入&quot;net user abcdef 123456 /add&quot;，添加后可用&quot;net localgroup administrators abcdef /add&quot;命令将用户提升为系统管理组&quot;administrators&quot;的用户，并使其具有超级权限。 <br>
<br>
4、重新启动计算机，选择正常模式下运行，就可以用更改后的口令&quot;123456&quot;登录&quot;*****&quot;用户了。 <br>
一、删除SAM文件，清除Administrator账号密码 <br>
<br>
！！！试过了，但没有合法的用户和密码，win的安全模式也是进不去的，不知道说这个方法的人自己有没有试过？ <br>
<br>
秘诀7：从SAM文件中找密码 <br>
<br>
这里需要的工具是LC4，运行LC4，打开并新建一个任务，然后依次点击&quot;IMPORT→Import from SAM file&quot;，打开已待破解的SAM文件，此时LC4会自动分析此文件，并显示出文件中的用户名；之后点击&quot;Session→Begin Audit&quot;，即可开始破解密码。如果密码不是很复杂的话，很短的时间内就会得到结果。 <br>
<br>
不过，如果密码比较复杂的话，需要时间会很长，并且前提是自己要有两个系统，并且保证另一个系统可以正常启动。 <br>
<br>
秘诀8：用密码重设盘设新密码 <br>
<br>
在没有使用&quot;欢迎屏幕&quot;登录方式的情况下登录到Windows XP后，按下&quot;Ctrl + Alt + Del&quot;组合键，出现&quot;Windows 安全&quot;窗口，点击选项中&quot;更改密码&quot;按钮，出现更改密码窗口（图1）。这个窗口中，将当前用户的密码备份，点击左下角&quot;备份&quot;按钮，激活&quot;忘记密码向导&quot;，按照提示创建密码重设盘。 <br>
<br>
如果在Windows XP的登录窗口输入了错误的密码，就会弹出&quot;登录失败&quot;窗口（图2），如果你的确想不起来自己的密码是什么时，可点击&quot;重设&quot;按钮，启动密码重设向导，通过刚才所创建的密码重设盘，重新设定密码，登录Windows XP <br>
<br>
！！！待实验中。 <br>
参考资料：百度知道 <a href="http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/3a9c5cf2e11b9814b07ec595.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/3a9c5cf2e11b9814b07ec595.html#comment">查看评论</a>]]></description>
        <pubDate>2008-11-03  16:56</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[歪梨小丫]]></author>
		<guid>http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/3a9c5cf2e11b9814b07ec595.html</guid>
</item>

<item>
        <title><![CDATA[如何在Delphi中使用指针？]]></title>
        <link><![CDATA[http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/3a9c5cf24023ff15b17ec57d.html]]></link>
        <description><![CDATA[
		
		<div class="date">2007-01-31 10:46</div>
<table class="FCK__ShowTableBorders" style="table-layout: fixed">
    <tbody>
        <tr>
            <td>
            <div class="cnt" >大家都认为，C语言之所以强大，以及其自由性，很大部分体现在其灵活的指针运<br>
            用上。因此，说指针是C语言的灵魂，一点都不为过。同时，这种说法也让很多人产生<br>
            误解，似乎只有C语言的指针才能算指针。Basic不支持指针，在此不论。其实，Pascal<br>
            语言本身也是支持指针的。从最初的Pascal发展至今的 Object Pascal，可以说在指针<br>
            运用上，丝毫不会逊色于C语言的指针。<br>
            <br>
            　　以下内容分为八个部分，分别是<br>
            <br>
            　　一、类型指针的定义<br>
            　　二、无类型指针的定义<br>
            　　三、指针的解除引用<br>
            　　四、取地址（指针赋值）<br>
            　　五、指针运算<br>
            　　六、动态内存分配<br>
            　　七、字符数组的运算<br>
            　　八、函数指针<br>
            <br>
            　　一、类型指针的定义。对于指向特定类型的指针，在C中是这样定义的：<br>
            　　　　int *ptr;<br>
            　　　　char *ptr;<br>
            　　　　与之等价的Object Pascal是如何定义的呢？<br>
            　　　　var ptr : ^Integer;<br>
            　　　　　　ptr : ^char;<br>
            　　　　其实也就是符号的差别而已。<br>
            <br>
            　　二、无类型指针的定义。C中有void *类型，也就是可以指向任何类型数据的指<br>
            针。<br>
            Object Pascal为其定义了一个专门的类型：Pointer。于是，<br>
            　　　　ptr : Pointer;<br>
            　　　　就与C中的<br>
            　　　　void *ptr;<br>
            　　　　等价了。<br>
            <br>
            　　三、指针的解除引用。要解除指针引用（即取出指针所指区域的值），C 的语法<br>
            是 (*ptr)，Object Pascal则是 ptr^。<br>
            <br>
            　　四、取地址（指针赋值）。取某对象的地址并将其赋值给指针变量，C 的语法是<br>
            　　　　ptr = &amp;Object;<br>
            　　　　Object Pascal 则是<br>
            　　　　ptr := @Object;<br>
            　　　　也只是符号的差别而已。<br>
            <br>
            　　五、指针运算。在 C 中，可以对指针进行移动的运算，如：<br>
            　　　　char a[20];<br>
            　　　　char *ptr=a;<br>
            　　　　ptr++;<br>
            　　　　ptr+=2;<br>
            　　　　当执行ptr++;时，编译器会产生让ptr前进sizeof(char)步长的代码，之后，<br>
            ptr将指向a[1]。ptr+=2;这句使得ptr前进两个sizeof(char)大小的步长。同样，我们<br>
            来看一下Object Pascal中如何实现：<br>
            　　　　var a : array [1..20] of Char;<br>
            　　　　　　ptr : PChar; //PChar 可以看作 ^Char<br>
            　　　　begin<br>
            　　　　　　ptr := @a;<br>
            　　　　　　Inc(ptr); // 这句等价于 C 的 ptr++;<br>
            　　　　　　Inc(ptr, 2); //这句等价于 C 的 ptr+=2;<br>
            　　　　end;<br>
            <br>
            　　六、动态内存分配。C语言中，使用malloc()库函数分配内存，free()函数释放内<br>
            存。<br>
            如这样的代码：<br>
            　　　　int *ptr, *ptr2;<br>
            　　　　int i;<br>
            　　　　ptr = (int*) malloc(sizeof(int) * 20);<br>
            　　　　ptr2 = ptr;<br>
            　　　　for (i=0; i&lt;20; i++){<br>
            　　　　　　*ptr = i; ptr++;<br>
            　　　　}<br>
            　　　　free(ptr2);<br>
            　　　　Object Pascal中，动态分配内存的函数是GetMem()，与之对应的释放函数为<br>
            FreeMem()（传统 Pascal中获取内存的函数是New()和 Dispose()，但New()只能获得对<br>
            象的单个实体的内存大小，无法取得连续的存放多个对象的内存块）。因此，与上面那<br>
            段C的代码等价的Object Pascal的代码为：<br>
            　　　　var ptr, ptr2 : ^integer;<br>
            　　　　　　i : integer;<br>
            　　　　begin<br>
            　　　　　　GetMem(ptr, sizeof(integer) * 20);<br>
            　　　　　　　　//这句等价于C的 ptr = (int*) malloc(sizeof(int) * 20);<br>
            　　　　　　ptr2 := ptr; //保留原始指针位置<br>
            　　　　　　for i := 0 to 19 do<br>
            　　　　　　begin<br>
            　　　　　　　　ptr^ := i;<br>
            　　　　　　　　Inc(ptr);<br>
            　　　　　　end;<br>
            　　　　　　FreeMem(ptr2);<br>
            　　　　end;<br>
            　　　　对于以上这个例子（无论是C版本的，还是Object Pascal版本的），都要注意<br>
            一个问题，就是分配内存的单位是字节（BYTE），因此在使用GetMem时，其第二个参数<br>
            如果想当然的写成 20，那么就会出问题了（内存访问越界）。因为GetMem(ptr, 20);<br>
            实<br>
            际只分配了20个字节的内存空间，而一个整形的大小是四个字节，那么访问第五个之后<br>
            的<br>
            所有元素都是非法的了（对于malloc()的参数同样）。<br>
            <br>
            　　七、字符数组的运算。C语言中，是没有字符串类型的，因此，字符串都是用字符<br>
            数<br>
            组来实现，于是也有一套str打头的库函数以进行字符数组的运算，如以下代码：<br>
            　　　　char str[15];<br>
            　　　　char *pstr;<br>
            　　　　strcpy(str, &quot;teststr&quot;);<br>
            　　　　strcat(str, &quot;_testok&quot;);<br>
            　　　　pstr = (char*) malloc(sizeof(char) * 15);<br>
            　　　　strcpy(pstr, str);<br>
            　　　　printf(pstr);<br>
            　　　　free(pstr);<br>
            　　　　而在Object Pascal中，有了String类型，因此可以很方便的对字符串进行各<br>
            种运算。但是，有时我们的Pascal代码需要与C的代码交互（比如：用Object Pascal的<br>
            代码调用C写的DLL或者用Object Pascal 写的DLL准备允许用C写客户端的代码）的话，<br>
            就不能使用String类型了，而必须使用两种语言通用的字符数组。其实，Object<br>
            Pascal<br>
            提供了完全类似C的一整套字符数组的运算函数，以上那段代码的Object Pascal 版本<br>
            是这样的：<br>
            　　　　var str : array [1..15] of char;<br>
            　　　　　　pstr : PChar; //Pchar 也就是 ^Char<br>
            　　　　begin<br>
            　　　　　　StrCopy(@str, 'teststr');<br>
            　　　　　　　　//在C中，数组的名称可以直接作为数组首地址指针来用<br>
            　　　　　　　　//但Pascal不是这样的，因此 str前要加上取地址的运算符<br>
            　　　　　　StrCat(@str, '_testok');<br>
            　　　　　　GetMem(pstr, sizeof(char) * 15);<br>
            　　　　　　StrCopy(pstr, @str);<br>
            　　　　　　Write(pstr);<br>
            　　　　　　FreeMem(pstr);<br>
            　　　　end;<br>
            <br>
            　　八、函数指针。在动态调用DLL中的函数时，就会用到函数指针。假设用C写的一段<br>
            代码如下：<br>
            　　　　typedef int (*PVFN)(int); //定义函数指针类型<br>
            　　　　int main()<br>
            　　　　{<br>
            　　　　　　HMODULE hModule = LoadLibrary(&quot;test.dll&quot;);<br>
            　　　　　　PVFN pvfn = NULL;<br>
            　　　　　　pvfn = (PVFN) GetProcAddress(hModule, &quot;Function1&quot;);<br>
            　　　　　　pvfn(2);<br>
            　　　　　　FreeLibrary(hModule);<br>
            　　　　}<br>
            　　　　就我个人感觉来说，C语言中定义函数指针类型的typedef代码的语法有些晦<br>
            涩，<br>
            而同样的代码在 Object Pascal中却非常易懂：<br>
            　　　　type PVFN = Function (para : Integer) : Integer;<br>
            　　　　var fn : PVFN;<br>
            　　　　　　//也可以直接在此处定义，如：fn : function<br>
            (para:Integer):Integer;<br>
            　　　　　　hm : HMODULE;<br>
            　　　　begin<br>
            　　　　　　hm := LoadLibrary('test.dll');<br>
            　　　　　　fn := GetProcAddress(hm, 'Function1');<br>
            　　　　　　fn(2);<br>
            　　　　　　FreeLibrary(hm);<br>
            　　　　end;<br>
            &quot;Feng Bo&quot; &lt;generalfb@hotmail.com&gt; wrote in message<br>
            news:3c8d242f_1@News.Newsfan.Net...<font color="#0000ff"><br>
            </font></div>
            </td>
        </tr>
    </tbody>
</table> <a href="http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/3a9c5cf24023ff15b17ec57d.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/category/delphi%D7%CA%C1%CF">delphi资料</a>&nbsp;<a href="http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/3a9c5cf24023ff15b17ec57d.html#comment">查看评论</a>]]></description>
        <pubDate>2008-08-24  12:55</pubDate>
        <category><![CDATA[delphi资料]]></category>
        <author><![CDATA[歪梨小丫]]></author>
		<guid>http://hi.baidu.com/%CD%E1%C0%E6%D0%A1%D1%BE/blog/item/3a9c5cf24023ff15b17ec57d.html</guid>
</item>


</channel>
</rss>