<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>自由自在 &#187; Firebird</title>
	<atom:link href="http://www.aease.org/category/opensource/firebird/feed" rel="self" type="application/rss+xml" />
	<link>http://www.aease.org</link>
	<description>懦怯囚禁人的灵魂, 希望可以感受自由!</description>
	<lastBuildDate>Thu, 29 Jul 2010 08:00:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
		<item>
		<title>Firebird数据库gsec命令</title>
		<link>http://www.aease.org/2010/05/firebird%e6%95%b0%e6%8d%ae%e5%ba%93gsec%e5%91%bd%e4%bb%a4.html</link>
		<comments>http://www.aease.org/2010/05/firebird%e6%95%b0%e6%8d%ae%e5%ba%93gsec%e5%91%bd%e4%bb%a4.html#comments</comments>
		<pubDate>Wed, 26 May 2010 09:18:03 +0000</pubDate>
		<dc:creator>wind</dc:creator>
				<category><![CDATA[Firebird]]></category>

		<guid isPermaLink="false">http://www.aease.org/2010/05/firebird%e6%95%b0%e6%8d%ae%e5%ba%93gsec%e5%91%bd%e4%bb%a4.html</guid>
		<description><![CDATA[&#160;&#160; gsec是Firebird数据库的用户密码管理工具. &#160;&#160; 命令行用法: &#160;&#160;&#160;&#160; gsec [ &#60;options&#62; ... ] &#60;command&#62; [ &#60;parameter&#62; ... ] &#160;&#160; 交互用法: &#160;&#160;&#160;&#160; gsec [ &#60;options&#62; ... ] &#160;&#160;&#160;&#160; GSEC&#62; &#160;&#160;&#160;&#160; &#60;command&#62; [ &#60;parameter&#62; ... ] &#160;&#160; 可用选项: &#160;&#160;&#160;&#160; -user &#60;数据库管理员用户名&#62; &#160;&#160;&#160;&#160; -password &#60;数据库管理密码&#62; &#160;&#160;&#160;&#160; -role &#60;数据库管理员SQL权限名称&#62; &#160;&#160;&#160;&#160; -trusted (使用信任认证) &#160;&#160;&#160;&#160; -database &#60;管理的数据库&#62; &#160;&#160;&#160;&#160; -z&#160; (显示当前版本号) &#160;&#160; 可用命令: &#160;&#160;&#160;&#160; 增加一个新用户: [...]]]></description>
			<content:encoded><![CDATA[<p>&#160;&#160; gsec是Firebird数据库的用户密码管理工具. </p>
<p>&#160;&#160; 命令行用法:   <br />&#160;&#160;&#160;&#160; gsec [ &lt;options&gt; ... ] &lt;command&gt; [ &lt;parameter&gt; ... ] </p>
<p>&#160;&#160; 交互用法:   <br />&#160;&#160;&#160;&#160; gsec [ &lt;options&gt; ... ]    <br />&#160;&#160;&#160;&#160; GSEC&gt;    <br />&#160;&#160;&#160;&#160; &lt;command&gt; [ &lt;parameter&gt; ... ] </p>
<p>&#160;&#160; </p>
<p> <span id="more-3930"></span>
<p>可用选项:   <br />&#160;&#160;&#160;&#160; -user &lt;数据库管理员用户名&gt;    <br />&#160;&#160;&#160;&#160; -password &lt;数据库管理密码&gt;    <br />&#160;&#160;&#160;&#160; -role &lt;数据库管理员SQL权限名称&gt;    <br />&#160;&#160;&#160;&#160; -trusted (使用信任认证)    <br />&#160;&#160;&#160;&#160; -database &lt;管理的数据库&gt;    <br />&#160;&#160;&#160;&#160; -z&#160; (显示当前版本号)</p>
<p>&#160;&#160; 可用命令:   <br />&#160;&#160;&#160;&#160; 增加一个新用户:    <br />&#160;&#160;&#160;&#160;&#160;&#160; add &lt;name&gt; [ &lt;parameter&gt; ... ]    <br />&#160;&#160;&#160;&#160; 删除当前用户:    <br />&#160;&#160;&#160;&#160;&#160;&#160; delete &lt;name&gt;    <br />&#160;&#160;&#160;&#160; 列出所有用户:    <br />&#160;&#160;&#160;&#160;&#160;&#160; display    <br />&#160;&#160;&#160;&#160; 显示一个用户:    <br />&#160;&#160;&#160;&#160;&#160;&#160; display &lt;name&gt;    <br />&#160;&#160;&#160;&#160; 修改用户参数:    <br />&#160;&#160;&#160;&#160;&#160;&#160; modify &lt;name&gt; &lt;parameter&gt; [ &lt;parameter&gt; ... ]    <br />&#160;&#160;&#160;&#160; help:    <br />&#160;&#160;&#160;&#160;&#160;&#160; ? (interactive only)    <br />&#160;&#160;&#160;&#160;&#160;&#160; help    <br />&#160;&#160;&#160;&#160; 显示版本号:    <br />&#160;&#160;&#160;&#160;&#160;&#160; z (仅在交互模式下)    <br />&#160;&#160;&#160;&#160; 退出:    <br />&#160;&#160;&#160;&#160;&#160;&#160; quit (仅在交互模式下) </p>
<p>&#160;&#160; 可用参数:   <br />&#160;&#160;&#160;&#160; -pw &lt;password&gt;    <br />&#160;&#160;&#160;&#160; -uid &lt;uid&gt;    <br />&#160;&#160;&#160;&#160; -gid &lt;uid&gt;    <br />&#160;&#160;&#160;&#160; -fname &lt;firstname&gt;    <br />&#160;&#160;&#160;&#160; -mname &lt;middlename&gt;    <br />&#160;&#160;&#160;&#160; -lname &lt;lastname&gt; </p>
<p>GSEC&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aease.org/2010/05/firebird%e6%95%b0%e6%8d%ae%e5%ba%93gsec%e5%91%bd%e4%bb%a4.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Firebird数据库Gbak命令参数</title>
		<link>http://www.aease.org/2010/05/firebird-gbk-param.html</link>
		<comments>http://www.aease.org/2010/05/firebird-gbk-param.html#comments</comments>
		<pubDate>Wed, 26 May 2010 08:01:36 +0000</pubDate>
		<dc:creator>wind</dc:creator>
				<category><![CDATA[Firebird]]></category>

		<guid isPermaLink="false">http://www.aease.org/2010/05/firebird-gbk-param.html</guid>
		<description><![CDATA[gbak参数: &#160;&#160;&#160;&#160;&#160;&#160;&#160; -B(ACKUP_DATABASE)&#160;&#160;&#160; backup database to file -(备份数据库到文件) &#160;&#160;&#160;&#160;&#160;&#160;&#160; -BU(FFERS)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; override page buffers default -(覆盖默认的页面缓冲区) &#160;&#160;&#160;&#160;&#160;&#160;&#160; -C(REATE_DATABASE)&#160;&#160;&#160; create database from backup file -(从备份文件创建数据库) &#160;&#160;&#160;&#160;&#160;&#160;&#160; -CO(NVERT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; backup external files as tables -(备份做为表的外部文件) &#160;&#160;&#160;&#160;&#160;&#160;&#160; -E(XPAND)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; no data compression -(无数据压缩) &#160;&#160;&#160;&#160;&#160;&#160;&#160; -FA(CTOR)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; blocking factor &#160;&#160;&#160;&#160;&#160;&#160;&#160; -G(ARBAGE_COLLECT)&#160;&#160;&#160; inhibit garbage collection &#160;&#160;&#160;&#160;&#160;&#160;&#160; -I(NACTIVE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; deactivate indexes during restore -(恢复时关闭索引) &#160;&#160;&#160;&#160;&#160;&#160;&#160; -IG(NORE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]]]></description>
			<content:encoded><![CDATA[<p>gbak参数:    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -B(ACKUP_DATABASE)&#160;&#160;&#160; backup database to file -(备份数据库到文件)     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -BU(FFERS)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; override page buffers default -(覆盖默认的页面缓冲区)     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -C(REATE_DATABASE)&#160;&#160;&#160; create database from backup file -(从备份文件创建数据库)     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -CO(NVERT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; backup external files as tables -(备份做为表的外部文件)     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -E(XPAND)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; no data compression -(无数据压缩)     </p>
<p> <span id="more-3929"></span>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; -FA(CTOR)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; blocking factor    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -G(ARBAGE_COLLECT)&#160;&#160;&#160; inhibit garbage collection     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -I(NACTIVE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; deactivate indexes during restore -(恢复时关闭索引)     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -IG(NORE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ignore bad checksums -(忽略检验错误)     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -K(ILL)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; restore without creating shadows -(恢复不创建映像)     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -L(IMBO)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ignore transactions in limbo     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -M(ETA_DATA)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; backup or restore metadata only -(仅备份或恢复元数据)     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -MO(DE) &lt;access&gt;&#160;&#160;&#160;&#160;&#160; &quot;read_only&quot; or &quot;read_write&quot; access -(只读或读写控制)     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -N(O_VALIDITY)&#160;&#160;&#160;&#160;&#160;&#160;&#160; do not restore database validity conditions -(不恢复数据库有效性条件)     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -NOD(BTRIGGERS)&#160;&#160;&#160;&#160;&#160;&#160; do not run database triggers -(不运行触发器)     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -NT&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Non-Transportable backup file format -(非传输备份文件格式)     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -O(NE_AT_A_TIME)&#160;&#160;&#160;&#160;&#160; restore one table at a time -(一次只恢复一个表)     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -OL(D_DESCRIPTIONS)&#160;&#160; save old style metadata descriptions -(保存原元数据描述)     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -P(AGE_SIZE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; override default page size –(覆盖默认页大小)     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -PAS(SWORD)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Firebird password -(密码)     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -R(ECREATE_DATABASE) [O(VERWRITE)] create (or replace if OVERWRITE used) </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; database from backup file -(从备份文件创建或替换[若使用OVERWRITE]数据库)    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -REP(LACE_DATABASE)&#160;&#160; replace database from backup file -(从备份文件替换数据库)     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -RO(LE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Firebird SQL role -(权限)     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -SE(RVICE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; use services manager -(使用服务管理器)     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -T(RANSPORTABLE)&#160;&#160;&#160;&#160;&#160; transportable backup &#8212; data in XDR format -(以XDE数据格式生成可迁移备份)     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -TRU(STED)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; use trusted authentication -(使用受信用认证)     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -USE_(ALL_SPACE)&#160;&#160;&#160;&#160;&#160; do not reserve space for record versions     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -USER&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Firebird user name &#8211; (用户名)     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -V(ERIFY)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; report each action taken -(运行报告)     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -Y&#160; &lt;path&gt;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; redirect/suppress status message output&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; -Z&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; print version number -(显示版本号)     </p>
]]></content:encoded>
			<wfw:commentRss>http://www.aease.org/2010/05/firebird-gbk-param.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Firebird的Coalesce函数</title>
		<link>http://www.aease.org/2010/01/firebird%e7%9a%84coalesce%e5%87%bd%e6%95%b0.html</link>
		<comments>http://www.aease.org/2010/01/firebird%e7%9a%84coalesce%e5%87%bd%e6%95%b0.html#comments</comments>
		<pubDate>Sun, 17 Jan 2010 01:33:31 +0000</pubDate>
		<dc:creator>wind</dc:creator>
				<category><![CDATA[Firebird]]></category>

		<guid isPermaLink="false">http://www.aease.org/2010/01/firebird%e7%9a%84coalesce%e5%87%bd%e6%95%b0.html</guid>
		<description><![CDATA[Coalesce函数可以转换NULL值为任何值. 函数语法: COALESCE( Expr1, Expr2, Expr3, &#8230; ) COALESCE 返回参数列表中第一个非NULL的值。若所有的参数都为NULL，则返回值为NULL。]]></description>
			<content:encoded><![CDATA[<p>Coalesce函数可以转换NULL值为任何值. </p>
<p>函数语法:</p>
<blockquote><p>COALESCE( Expr1, Expr2, Expr3, &#8230; ) </p>
</blockquote>
<p>COALESCE 返回参数列表中第一个非NULL的值。若所有的参数都为NULL，则返回值为NULL。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aease.org/2010/01/firebird%e7%9a%84coalesce%e5%87%bd%e6%95%b0.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>firebird/InterBase的事务处理</title>
		<link>http://www.aease.org/2009/12/firebirdinterbase%e7%9a%84%e4%ba%8b%e5%8a%a1%e5%a4%84%e7%90%86.html</link>
		<comments>http://www.aease.org/2009/12/firebirdinterbase%e7%9a%84%e4%ba%8b%e5%8a%a1%e5%a4%84%e7%90%86.html#comments</comments>
		<pubDate>Tue, 08 Dec 2009 12:05:00 +0000</pubDate>
		<dc:creator>wind</dc:creator>
				<category><![CDATA[Firebird]]></category>

		<guid isPermaLink="false">http://www.aease.org/2009/12/firebirdinterbase%e7%9a%84%e4%ba%8b%e5%8a%a1%e5%a4%84%e7%90%86.html</guid>
		<description><![CDATA[http://www.fbsql.cn/topic24.html InterBase的事务管理 我们知道，与其它关系数据库系统不同，InterBase采用独特的多代结构和版本事务来提高其性能，因此，对InterBase来说，事务就显得尤其重要。为保证其版本事务的工作，InterBase要求任何一个对数据库的访问都必须包含在一个事务中进行，也就是说，无论对数据库进行读select、插入insert、更改update还是删除delete都要先启动一个事务，然后进行操作，操作完毕，结束事务。你不可能在没有事务的情况下对数据库进行操作。有的关系数据库系统可能在读操作下并不启动事务，只有在改写情况下才启动事务，然而 InterBase却不同，你对此必须有清醒地认识。 我们日常编程，通常使用已经编写好的控件，这些控件如IBX、DBExpress已经包含了事务处理的代码，但是在底层，归根结底都是通过InterBase的API函数进行的。 在InterBas的API函数中，事务处理常用的API函数有： 1、isc_start_transaction()：使用已经定义的TPB（事务参数缓存）在一个或多个数据库上启动一个新的事务。 2、isc_commit_retaining()：提交事务的更改，但并不结束事务的执行，仍然保留事务的上下文，可以再使用。 3、isc_commit_transaction()：提交事务的更改，并结束事务的执行，释放上下文。 4、isc_rollback_transaction()：回退事务的更改，并结束事务的执行，释放上下文。 启动一个事务分为三个步骤：创建并初始化事务句柄，可选择的创建并配置事务参数缓存，最后调用isc_start_transaction（）。处理事务的永恒不变的原则是：任何事务都要尽可能地及时结束，不要拖延。 这里我想强调一点，那就是InterBase的事务启动方式。通常情况下，对程序员和用户来说InterBase事务有两种启动方式，隐含启动和显式启动。大多数情况下大多数的程序员采用的是隐含启动，也就是你并没有明确调用（直接或间接）事务处理函数来处理事务，此时则由InterBase自动为你做这些工作。然而采用显示的事务处理应该说是一种好的、值得推荐的方法，这可以有效地配合InterBase的多代结构工作。当然显示事务启动需要自行调用（直接或间接）事务处理的函数，就得多写几行代码。 有些人不理解，既然InterBase能在你不显式处理事务的情况下自动帮你处理，那还要我自己处理事务干什么？答案是：机器永远没有人聪明！它有时不知道应该及时结束一个事务！尤其在我们使用像IBX、DBExpress这样的控件的时候，它们对事务的自动处理并不是尽善尽美的。 下面我们来了解一下事务参数缓存TPB。TPB对事务的执行有着至关重要的影响。甚至可以毫不夸张的说，搞懂了 TPB，也就搞懂了InterBase事务处理。然而，我们经常使用的IBX、DBExpress等组件在底层封装了事务处理API函数，让很多人不能明显地（至少可以说不能像了解其他属性那样）了解TPB的含义。 TPB参数可分为如下几类： 1、事务版本号：isc_tpb_version3，InterBase引擎内部使用，表明事务的版本号。必须是TPB的第一个参数。 2、访问模式：指明事务可以对数据表进行的操作。有isc_tpb_read、isc_tpb_write两个选项。 1）isc_tpb_write：允许对表进行读写(select,insert,update,delete)操作，为缺省的访问模式。 2）isc_tpb_read：只允许对表进行读(select)操作。 只能设定一种访问模式，否则后者将覆盖前者。如果不指定，则使用缺省值。 3、事务之间的隔离级别：表明并发的事务间相互隔离的程度，也可以说是相互不受影响的程度。注意这里强调的是并发的事务。如果不是并发事务，则相互之间不会存在冲突，也就不需要进行相互间的隔离。事务的隔离级别通常有三级，分别是： ·read dirty脏读 ·read committed提交读 ·consistency一致性 read dirty脏读是最低的隔离级别，它允许一个事务访问另一个并发事务所作的还没有提交的更改。由于这个隔离级别可以读到其他事务未提交的数据或者不完整的数据，因此可能造成数据的不一致性，所以在关系型数据库系统中通常不被推荐。虽然从理论上讲InterBase的多代结构可以支持该选项，但实际上 InterBase并不接受脏读，因此实际中不要使用这个选项。BDE支持read dirty。 因此InterBase只有有下列四个隔离选项： isc_tpb_read_committed, isc_tpb_rec_version isc_tpb_read_committed, isc_tpb_no_rec_version isc_tpb_concurrency isc_tpb_consistency 实际是三个隔离级别，由低到高分别是： isc_tpb_read_committed isc_tpb_concurrency isc_tpb_consistency 显然，隔离级别越高，并发性能越低。 1） isc_tpb_read_commited：这是InterBase中支持的最低隔离级别。它只允许一个事务访问其他并发事务已经提交的更改，没有提交的更改即脏数据则不允许读取。该选项可以充分发挥InterBase的多代结构优势，提供高吞吐、高并发的性能。该隔离级别必须和其他两个选项 isc_tpb_rec_version、isc_tpb_no_rec_version之一配合使用。它们提供了对已提交更改更精细的访问控制。 ·isc_tpb_read_commited， isc_tpb_no_rec_version是缺省的调优选项，表示事务只能读取数据行的最新版本，如果该数据行的某个更改处于挂起状态即还没有提交，则不能被读取。也就是说如果数据行的所有版本已全部提交，则该选项可以访问到已经提交的最新版本，但如果数据行还有未提交的版本，则不允许访问该数据行，就连已提交的版本也不能读取。如果使用isc_tpb_wait选项，那么此时事务只能等待其他事务提交或者回退这些未提交的版本数据；如果使用 isc_tpb_nowait选项，那么此时事务不会等待而是立即返回一个冲突错误。 · isc_tpb_read_commited，isc_tpb_rec_version则表示事务可以立即读取已提交的数据行最新版本，尽管该数据行最近还有多个挂起的未提交版本。也就是说，不管数据行是否存在未提交的版本，该选项总是可以读到已提交的最新版本。这种情况下可能会产生冲突，要小心使用。 isc_tpb_read_commited选项特别适合用于和用户交互的在线事务处理系统。 2） isc_tpb_concurrency：这是比read committed高一级的隔离，相当于Snapshot，在BDE中又叫作重复读Repeatable [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.fbsql.cn/topic24.html">http://www.fbsql.cn/topic24.html</a>     <br />InterBase的事务管理     <br />我们知道，与其它关系数据库系统不同，InterBase采用独特的多代结构和版本事务来提高其性能，因此，对InterBase来说，事务就显得尤其重要。为保证其版本事务的工作，InterBase要求任何一个对数据库的访问都必须包含在一个事务中进行，也就是说，无论对数据库进行读select、插入insert、更改update还是删除delete都要先启动一个事务，然后进行操作，操作完毕，结束事务。你不可能在没有事务的情况下对数据库进行操作。有的关系数据库系统可能在读操作下并不启动事务，只有在改写情况下才启动事务，然而 InterBase却不同，你对此必须有清醒地认识。     <br />我们日常编程，通常使用已经编写好的控件，这些控件如IBX、DBExpress已经包含了事务处理的代码，但是在底层，归根结底都是通过InterBase的API函数进行的。     </p>
<p> <span id="more-888"></span>
<p>在InterBas的API函数中，事务处理常用的API函数有：    <br />1、isc_start_transaction()：使用已经定义的TPB（事务参数缓存）在一个或多个数据库上启动一个新的事务。     <br />2、isc_commit_retaining()：提交事务的更改，但并不结束事务的执行，仍然保留事务的上下文，可以再使用。     <br />3、isc_commit_transaction()：提交事务的更改，并结束事务的执行，释放上下文。     <br />4、isc_rollback_transaction()：回退事务的更改，并结束事务的执行，释放上下文。     <br />启动一个事务分为三个步骤：创建并初始化事务句柄，可选择的创建并配置事务参数缓存，最后调用isc_start_transaction（）。处理事务的永恒不变的原则是：任何事务都要尽可能地及时结束，不要拖延。     <br />这里我想强调一点，那就是InterBase的事务启动方式。通常情况下，对程序员和用户来说InterBase事务有两种启动方式，隐含启动和显式启动。大多数情况下大多数的程序员采用的是隐含启动，也就是你并没有明确调用（直接或间接）事务处理函数来处理事务，此时则由InterBase自动为你做这些工作。然而采用显示的事务处理应该说是一种好的、值得推荐的方法，这可以有效地配合InterBase的多代结构工作。当然显示事务启动需要自行调用（直接或间接）事务处理的函数，就得多写几行代码。     <br />有些人不理解，既然InterBase能在你不显式处理事务的情况下自动帮你处理，那还要我自己处理事务干什么？答案是：机器永远没有人聪明！它有时不知道应该及时结束一个事务！尤其在我们使用像IBX、DBExpress这样的控件的时候，它们对事务的自动处理并不是尽善尽美的。     <br />下面我们来了解一下事务参数缓存TPB。TPB对事务的执行有着至关重要的影响。甚至可以毫不夸张的说，搞懂了 TPB，也就搞懂了InterBase事务处理。然而，我们经常使用的IBX、DBExpress等组件在底层封装了事务处理API函数，让很多人不能明显地（至少可以说不能像了解其他属性那样）了解TPB的含义。     <br />TPB参数可分为如下几类：     <br />1、事务版本号：isc_tpb_version3，InterBase引擎内部使用，表明事务的版本号。必须是TPB的第一个参数。     <br />2、访问模式：指明事务可以对数据表进行的操作。有isc_tpb_read、isc_tpb_write两个选项。     <br />1）isc_tpb_write：允许对表进行读写(select,insert,update,delete)操作，为缺省的访问模式。     <br />2）isc_tpb_read：只允许对表进行读(select)操作。     <br />只能设定一种访问模式，否则后者将覆盖前者。如果不指定，则使用缺省值。     <br />3、事务之间的隔离级别：表明并发的事务间相互隔离的程度，也可以说是相互不受影响的程度。注意这里强调的是并发的事务。如果不是并发事务，则相互之间不会存在冲突，也就不需要进行相互间的隔离。事务的隔离级别通常有三级，分别是：     <br />·read dirty脏读     <br />·read committed提交读     <br />·consistency一致性     <br />read dirty脏读是最低的隔离级别，它允许一个事务访问另一个并发事务所作的还没有提交的更改。由于这个隔离级别可以读到其他事务未提交的数据或者不完整的数据，因此可能造成数据的不一致性，所以在关系型数据库系统中通常不被推荐。虽然从理论上讲InterBase的多代结构可以支持该选项，但实际上 InterBase并不接受脏读，因此实际中不要使用这个选项。BDE支持read dirty。     <br />因此InterBase只有有下列四个隔离选项：     <br />isc_tpb_read_committed, isc_tpb_rec_version     <br />isc_tpb_read_committed, isc_tpb_no_rec_version     <br />isc_tpb_concurrency     <br />isc_tpb_consistency     <br />实际是三个隔离级别，由低到高分别是：     <br />isc_tpb_read_committed     <br />isc_tpb_concurrency     <br />isc_tpb_consistency     <br />显然，隔离级别越高，并发性能越低。     <br />1） isc_tpb_read_commited：这是InterBase中支持的最低隔离级别。它只允许一个事务访问其他并发事务已经提交的更改，没有提交的更改即脏数据则不允许读取。该选项可以充分发挥InterBase的多代结构优势，提供高吞吐、高并发的性能。该隔离级别必须和其他两个选项 isc_tpb_rec_version、isc_tpb_no_rec_version之一配合使用。它们提供了对已提交更改更精细的访问控制。     <br />·isc_tpb_read_commited， isc_tpb_no_rec_version是缺省的调优选项，表示事务只能读取数据行的最新版本，如果该数据行的某个更改处于挂起状态即还没有提交，则不能被读取。也就是说如果数据行的所有版本已全部提交，则该选项可以访问到已经提交的最新版本，但如果数据行还有未提交的版本，则不允许访问该数据行，就连已提交的版本也不能读取。如果使用isc_tpb_wait选项，那么此时事务只能等待其他事务提交或者回退这些未提交的版本数据；如果使用 isc_tpb_nowait选项，那么此时事务不会等待而是立即返回一个冲突错误。     <br />· isc_tpb_read_commited，isc_tpb_rec_version则表示事务可以立即读取已提交的数据行最新版本，尽管该数据行最近还有多个挂起的未提交版本。也就是说，不管数据行是否存在未提交的版本，该选项总是可以读到已提交的最新版本。这种情况下可能会产生冲突，要小心使用。     <br />isc_tpb_read_commited选项特别适合用于和用户交互的在线事务处理系统。     <br />2） isc_tpb_concurrency：这是比read committed高一级的隔离，相当于Snapshot，在BDE中又叫作重复读Repeatable Read。它允许一个事务获得该事务启动时数据库的一个快照，此后，它只能看到自身对数据库的更改，而其他并发事务的任何更改它均无法看到（这意味着这种隔离级别并不限制其他并发事务对数据库的改写，只是这些改写看不到罢了）。由于要保持事务启动时数据库的一个快照，所以事务启动时数据库中记录的所有版本必须也保持不变，这就必须禁止垃圾收集的运行。可见这个选项很适合于报表应用程序，因为无论重复几次读取表中的数据它总能获得相同的数值。和其他关系数据库系统不同，这个选项既提供了良好的重复读功能（较长的读事务），又不影响其他用户事务的并发在线操作（如更改），充分发挥了InterBase的多代结构优势，提供高吞吐、高并发的性能。该选项不大被推荐用来和用户进行交互，因为用户往往需要的是实时的数据而不是好像“冻住”了的数据。此外使用该选项的事务一定要尽快结束，不能拖很长时间。     <br />3）isc_tpb_consistency：这是最严格的隔离级别，相当于强制重复读Forced Repeatable Read，这也是InterBase特有的隔离级别，其他关系数据库系统和BDE并不支持这种级别。在这种隔离模式下，如果一个表正被一个事务访问，则不允许其他任何事务再对其进行改写，即相当于在表上加了一把写锁。该选项一定要小心使用，因为它会极大地降低并发性能，并且一旦使用则一定要在操作完成后尽快结束事务。     <br />隔离级别也只能设定一种，否则后者将覆盖前者。     <br />不隔离级别的事务之间的交互如下表：     <br />各种事务隔离级别的对比如下表：     <br />API level constants &amp; IBO. Language level &amp; tools. BDE level.     <br />(Not supported) (Not supported) Dirty Read     <br />Read Committed Read Committed Read Committed     <br />Concurrency Snapshot Repeatable Read     <br />Consistency Snapshot table stability (Not supported)     <br />4、锁冲突的解决方案：表明当一个事务在写操作（更该、删除）期间遇到访问冲突时将如何处理。     <br />isc_tpb_wait是缺省的方式，表示事务必须要等待，直到其他并发事务结束，锁定的资源被释放。一旦资源被释放，事务就重新尝试其操作。     <br />isc_tpb_nowait则表示事务只是返回一个冲突错误而不等待资源释放，故此时事务不会再作尝试。     <br />这两种方式也只能指定其中一种，否则后者将覆盖前者。     <br />5、表的保留方式：通常，事务只有在真正从数据表中读无数据或往表中写入数据时才获得特定的访问权。表的保留选项则表明了对事务访问的特定表的访问模式和锁的解决方式。当这个选项被使用的时候，那么当事务启动时，这个表就被保留着某种特定的访问权限，而不是在表实际被访问时。该选项在多个并发事务共享数据库访问的环境中才有用，它有如下三个主要目的：     <br />·防止通常情况下的死锁和更该冲突。     <br />·由于触发器和约束可能影响表的锁，因此该选项可以提供依赖锁。尽管没有必要提供一个明显的依赖锁，但它能确保由于间接的表冲突而不产生更该冲突。     <br />·可以在事务中改变对一个或多个单独的表的访问级别。     <br />有效的保留方式有：     <br />1） isc_tpb_shared ，isc_tpb_lock_write：允许使用isc_tpb_write访问模式+ isc_tpb_concurrency或+isc_tpb_read_commited隔离级别的任何事务进行更改，而使用上述隔离级别+ isc_tpb_read的事务可以读取数据。     <br />2）isc_tpb_shared ，isc_tpb_lock_read：可以允许任何事务读取数据，也允许使用isc_tpb_write访问模式的事务更改数据。这是最自由的保留模式。     <br />3）isc_tpb_protected，isc_tpb_lock_write：阻止其他事务更改。使用isc_tpb_concurrency或isc_tpb_read_commited隔离级别的可以读取数据，同时也只有这些事务可以更改数据。     <br />4）isc_tpb_protected，isc_tpb_lock_read：禁止所有的事务更改数据，同时允许所有的事务读取数据。     <br />TPB的格式如下：     <br />版本号     <br />访问模式     <br />隔离级别     <br />冲突解决     <br />表保留选项     <br />例如1：     <br />isc_tpb_version3,     <br />isc_tpb_write,     <br />isc_tpb_concurrency,     <br />isc_tpb_nowait,     <br />isc_tpb_protected, isc_tpb_lock_read, &quot;EMPLOYEE&quot;     <br />例如2：     <br />isc_tpb_version3,     <br />isc_tpb_write,     <br />isc_tpb_concurrency,     <br />isc_tpb_nowait,     <br />isc_tpb_protected, isc_tpb_lock_read, &quot;COUNTRY&quot;,     <br />isc_tpb_protected, isc_tpb_lock_write, &quot;EMPLOYEE&quot;     <br />缺省的TPB是：isc_tpb_version3,isc_tpb_write,isc_tpb_concurrency,isc_tpb_wait。     <br />通过上面的说明，我们对InterBase的事务处理有了一定的理解。那么这对我们实际的应用系统有什么参考价值呢？在此我给出一点看法，正确与否仅供大家参考。     <br />１Ａ、在线事务处理应用系统：这些系统的显著特点是大量并发用户与数据库交互，用户基本都要对数据库进行频繁的改写。建议使用如下的TPB参数：     <br />isc_tpb_version3     <br />isc_tpb_read_committed     <br />isc_tpb_rec_version或isc_tpb_no_rec_version，尽量用前者     <br />isc_tpb_nowait     <br />２Ｂ、混合应用系统：这些系统的特点是既允许用户对数据库交互，又需要进行报表或数据决策，但侧重于报表和数据决策。建议使用的TPB参数：     <br />isc_tpb_version3     <br />isc_tpb_concurrency     <br />isc_tpb_nowait     <br />３、报表数据决策应用系统：该系统的主要目的是进行报表处理或数据决策支持。这里边又可分为两类：     <br />３Ｃ一类是不允许任何事务对数据库进行改写（只读），纯粹的报表和数据决策，建议使用的TPB参数：     <br />isc_tpb_version3     <br />isc_tpb_read     <br />isc_tpb_consistency     <br />３Ｄ另一类是只允许当前活动事务对数据库改写而不允许其他并发事务改写（排他写），建议使用的TPB参数：     <br />isc_tpb_version3     <br />isc_tpb_consistency     <br />最后然我们看一下IBX、DBExpress、DataSnap对InterBase的事务处理。在这里我之所以没有讨论BDE，是因为BDE对InterBase的事务支持并不是很好，目前不大被推荐作为访问InterBase的技术。     <br />１、IBX     <br />IBX 使用IBTransaction控件进行事务控制。大多数人已经了解了如何设置IBTransaction的属性来让其工作，我不再赘述。但是在 IBTransaction中如何设置TPB来让它满足我们系统的需要呢？这就需要IBTransaction控件的params属性了，我们可以在这个属性改变TPB参数，以此来改变对事务的控制。默认情况下如果你让IBTransaction控件的params属性为空，则相当于 isc_tpb_version3、     <br />isc_tpb_concurrency、isc_tpb_wait，这可能并不是你想要的。鼠标右键点击IBTransaction控件，就会出现一个事务编辑器，共有四个选项。各选项意义与我们前面介绍的对应如下：     <br />snapshot:相当于２B。     <br />Read Committed：相当于１A。     <br />Read-Only Table Stability：相当于３C。     <br />Read-Write Table Stability：相当于３D。     <br />如果这些选项不符合你的需要，你就要点击params属性自己编辑了。     <br />２、DBexpress     <br />DBexpress 中使用TSQLConnection控制事务。启动事务的语句是：     <br />procedure StartTransaction(TransDesc: TTransactionDesc);需要一个事务描述类型作为参数。事务描述类型如下：     <br />type     <br />TTransIsolationLevel = (xilDIRTYREAD, xilREADCOMMITTED, xilREPEATABLEREAD, xilCUSTOM);     <br />TTransactionDesc = packed record     <br />TransactionID : LongWord;     <br />GlobalID : LongWord;     <br />IsolationLevel : TTransIsolationLevel;     <br />CustomIsolation : LongWord;     <br />end;     <br />我们看一下其事务隔离级别：     <br />xilDIRTYREAD：脏读，允许当前事务看到其他事务所作的任何更改，即便这些更改还没有被提交。     <br />xilREADCOMMITTED：读提交，即允许当前事务只看到其他事务已提交的更改。但是如果在事务结束前有额外的更改提交，将得到不一致的数据视图。     <br />xilREPEATABLEREAD：确保当前事务得到一致的数据视图。因此它仅仅允许该事务看到在该事务启动时已经提交的更改。     <br />xilCUSTOM ：表示当前事务使用数据库特定的隔离级别，由CustomIsolation指定。遗憾的是xilCUSTOM选项目前没有支持。     <br />通过对比可见，DBExpress的事务隔离中，xilREADCOMMITTED相当于InterBase的isc_tpb_read_commited +isc_tpb_no_rec_version，xilREPEATABLEREAD相当于isc_tpb_consistency。当然，如果 TSqlconnection能提供xilCUSTOM选项就更好了，这样便于结合数据库类型更好的调整事务处理的方式。     <br />３、Datasnap     <br />DataSnap 处理事务的模式在李维先生的书中有很好的描述。我们关键是要记住一点，当需要对数据库进行改写即调用ApplyUpdats时，DataSnap会自动启动事务为你工作，这也是默认的方式，可能很多人就直接使用这种默认方式。可是我要强调一点，在这种默认方式下，DataSnap总是在当使用 Tclientdataset时才进行事务处理，如果没有使用Tclientdataset，DataSnap就不会自动进行处理事务。因此，如果中间层中你的数据集通过datasetProvider输出给Clientdataset，就不会有什么问题嗯，但是那些没有通过 datasetProvider输出到Clientdataset的数据集，就不会在datasnap的事务处理控制下，即便该数据集仅仅是读操作，也需要嵌套在事务中进行，这是Interbase必须要求的。所以我的看法是，不论何时，还是使用显式事务控制好。我们可以在中间层中，对于对数据库的每一个操作都显式地调用事务处理语句，并及时结束事务。这个做法对两层结构也同样适用。     <br />如果你没有使用显式事务控制，对于在中间层中使用IBX，要进行一些特别的设置，如：如果数据集准备通过ＤatasetProvider输出给Clientdataset，要设置数据集关联的 TIBTranSaction的AutoStopAction为saCommit，那些不通过ＤatasetProvider输出给 Clientdataset的数据集，其关联的TIBTranSaction的AutoStopAction要设置为saNone。此外，在中间层中使用 IBX，还要把数据集的UniDirectional属性设置为true，使之成为单向的，因为我们不需要中间层为我们缓存数据，而是通过客户端的 Clientdataset缓存数据。     <br />最后，我还想说明一点，有很多人询问在Interbase中如果对一条记录加锁。首先我认为这些人很是受其它关系数据库系统模式的影响，没有真正理解InterBase的多代结构的工作原理。实际上在InterBase的多代结构中，没有必要对一条记录加锁，这也是一种不正常的做法。因此，从其它关系数据库转来使用InterBase的程序员，要转变这个观念，把心思更好的用在理解把握InterBase的版本事务模式和多代结构上。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aease.org/2009/12/firebirdinterbase%e7%9a%84%e4%ba%8b%e5%8a%a1%e5%a4%84%e7%90%86.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>InterBase与FireBird外部文件（外部表）的使用</title>
		<link>http://www.aease.org/2009/12/interbase%e4%b8%8efirebird%e5%a4%96%e9%83%a8%e6%96%87%e4%bb%b6%ef%bc%88%e5%a4%96%e9%83%a8%e8%a1%a8%ef%bc%89%e7%9a%84%e4%bd%bf%e7%94%a8.html</link>
		<comments>http://www.aease.org/2009/12/interbase%e4%b8%8efirebird%e5%a4%96%e9%83%a8%e6%96%87%e4%bb%b6%ef%bc%88%e5%a4%96%e9%83%a8%e8%a1%a8%ef%bc%89%e7%9a%84%e4%bd%bf%e7%94%a8.html#comments</comments>
		<pubDate>Tue, 08 Dec 2009 07:04:00 +0000</pubDate>
		<dc:creator>wind</dc:creator>
				<category><![CDATA[Firebird]]></category>

		<guid isPermaLink="false">http://www.aease.org/2009/12/interbase%e4%b8%8efirebird%e5%a4%96%e9%83%a8%e6%96%87%e4%bb%b6%ef%bc%88%e5%a4%96%e9%83%a8%e8%a1%a8%ef%bc%89%e7%9a%84%e4%bd%bf%e7%94%a8.html</guid>
		<description><![CDATA[概述： 1、FB支持读取和操作ascII文本格式作为外部表；外部表只能select和insert，不能update和delete；可以吧外部表转换成内部表；操作外部表不受事务控制，插入数据后不能rollback；DROP DATABASE不会自动删除已经创建的外部表，必须手动删除。 2、创建外部表： CREATE TABLE EXT_TBL_NAME EXTERNAL FILE filespec (columndef [,columndef,...], [line_delimiter_1 CHAR(1) [, line_delimiter_2 CHAR(1)]]); 3、在 firebird.conf (for v. 1.5 servers) 中配置ExternalFileAccess参数存取外部表 4、格式：外部表不支持blob和array；不推荐使用varchar；注意要包含一个列作为换行符，windows下一般要2字节，unix下一般是1个字节 导入外部文件到FB: 1、所有的列都为char，文本文件必须在服务器上： CREATE TABLE EXT_TBL EXTERNAL FILE &#8216;file.txt&#8217; ( FNAME CHAR(10), LNAME CHAR(20), HDATE CHAR(10), NEWLINE CHAR(2)); COMMIT; 注意现在假设在windows下，所以换行符NEWLINE CHAR(2)为两个字节 2、创建FB表，为了让这个表和外部表执行相关操作，也包含一个单独的列存储换行符： CREATE TABLE PERSONNEL ( FIRST_NAME VARCHAR(10), LAST_NAME VARCHAR(20), HIRE_DATE [...]]]></description>
			<content:encoded><![CDATA[<p><strong>概述：</strong></p>
<p>1、FB支持读取和操作ascII文本格式作为外部表；外部表只能select和insert，不能update和delete；可以吧外部表转换成内部表；操作外部表不受事务控制，插入数据后不能rollback；DROP DATABASE不会自动删除已经创建的外部表，必须手动删除。    <br />2、创建外部表：</p>
<blockquote><p>CREATE TABLE EXT_TBL_NAME      <br />EXTERNAL FILE filespec       <br />(columndef [,columndef,...],       <br />[line_delimiter_1 CHAR(1)       <br />[, line_delimiter_2 CHAR(1)]]);</p>
</blockquote>
<p>3、在 firebird.conf (for v. 1.5 servers) 中配置ExternalFileAccess参数存取外部表    <br />4、格式：外部表不支持blob和array；不推荐使用varchar；注意要包含一个列作为换行符，windows下一般要2字节，unix下一般是1个字节</p>
<p> <span id="more-887"></span>
<p><strong>导入外部文件到FB:</strong>     <br />1、所有的列都为char，文本文件必须在服务器上：</p>
<blockquote><p>CREATE TABLE EXT_TBL EXTERNAL FILE &#8216;file.txt&#8217; (      <br />FNAME CHAR(10),       <br />LNAME CHAR(20),       <br />HDATE CHAR(10),       <br />NEWLINE CHAR(2));       <br />COMMIT;</p>
</blockquote>
<p>注意现在假设在windows下，所以换行符NEWLINE CHAR(2)为两个字节    <br />2、创建FB表，为了让这个表和外部表执行相关操作，也包含一个单独的列存储换行符：</p>
<blockquote><p>CREATE TABLE PERSONNEL (      <br />FIRST_NAME VARCHAR(10),       <br />LAST_NAME VARCHAR(20),       <br />HIRE_DATE DATE,       <br />NEW_LINE CHAR(2));       <br />COMMIT;</p>
</blockquote>
<p>3、使用文本编辑器，或者其他应用程序输出为指定格式的文本文件，让每一条记录都有相同的长度，没有用到的空格补上，比如：    <br />123456789012345678901234567890123456789012     <br />fname&#8230;..lname&#8230;&#8230;&#8230;&#8230;&#8230;hdate&#8230;..n     <br />JamesbbbbbStarkeybbbbbbbbbbbbb2004-12-10n     <br />ClaudiobbbValderramabbbbbbbbbb2003-10-01n     <br />每行42个字符，其中b代表补的空格，n是换行符     <br />4、执行选择语句看看效果：</p>
<blockquote><p>SELECT FNAME, LNAME, HDATE FROM EXT_TBL;      <br />FNAME LNAME HDATE       <br />========= =================== ===========       <br />James&#160;&#160; Starkey&#160;&#160;&#160;&#160;&#160;&#160; 2004-12-10       <br />Claudio Valderrama&#160;&#160;&#160;&#160;&#160; 2003-10-01</p>
</blockquote>
<p>5、插入外部数据到表里：</p>
<blockquote><p>INSERT INTO PERSONNEL      <br />SELECT FNAME, LNAME, CAST(HDATE AS DATE),       <br />NEWLINE FROM EXT_TBL;       <br />COMMIT;       <br />SELECT FIRST_NAME, LAST_NAME, HIRE_DATE       <br />FROM PERSONNEL;       <br />FIRST_NAME LAST_NAME&#160;&#160;&#160;&#160;&#160; HIRE_DATE       <br />========== ================== ===========       <br />James&#160;&#160; Starkey&#160;&#160;&#160;&#160;&#160;&#160; 10-DEC-2004       <br />Claudio Valderrama&#160;&#160;&#160;&#160;&#160; 01-OCT-2003</p>
</blockquote>
<p>注意：执行刚才的插入操作时FB需要独占外部表文件，故如果已经有程序打开了文本文件，插入会失败。</p>
<p><strong>从数据库中导出数据到外部文件：</strong>执行和刚才相似的操作过程。     <br />清空要导出的文本文件。</p>
<blockquote><p>INSERT INTO EXT_TBL      <br />SELECT FIRST_NAME, LAST_NAME,       <br />cast(HIRE_DATE AS VARCHAR(11),       <br />ASCII_CHAR(10)       <br />FROM PERSONNEL       <br />WHERE FIRST_NAME LIKE &#8216;Clau%&#8217;;</p>
</blockquote>
<blockquote><p>SELECT FNAME, LNAME, HDATE FROM EXT_TBL;      <br />FNAME&#160;&#160;&#160; LNAME&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; HDATE       <br />========== ==================== ===========       <br />Claudio&#160;&#160; Valderrama&#160;&#160;&#160;&#160;&#160; 01-OCT-2004 </p>
</blockquote>
<p>注意：操作完成后要释放外部文件，ASCII_CHAR() 函数在ib_udf里。</p>
<p><strong>转换外部表为内部表：</strong>     <br />通过使用 gbak 加上¨-convert&quot;参数，在备份中，原来所有的外部表将转为内部表。恢复后，外部表的定义也被清除。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aease.org/2009/12/interbase%e4%b8%8efirebird%e5%a4%96%e9%83%a8%e6%96%87%e4%bb%b6%ef%bc%88%e5%a4%96%e9%83%a8%e8%a1%a8%ef%bc%89%e7%9a%84%e4%bd%bf%e7%94%a8.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FireBrid系统表相关操作</title>
		<link>http://www.aease.org/2009/12/firebrid%e7%b3%bb%e7%bb%9f%e8%a1%a8%e7%9b%b8%e5%85%b3%e6%93%8d%e4%bd%9c.html</link>
		<comments>http://www.aease.org/2009/12/firebrid%e7%b3%bb%e7%bb%9f%e8%a1%a8%e7%9b%b8%e5%85%b3%e6%93%8d%e4%bd%9c.html#comments</comments>
		<pubDate>Tue, 08 Dec 2009 03:42:00 +0000</pubDate>
		<dc:creator>wind</dc:creator>
				<category><![CDATA[Firebird]]></category>

		<guid isPermaLink="false">http://www.aease.org/2009/12/firebrid%e7%b3%bb%e7%bb%9f%e8%a1%a8%e7%9b%b8%e5%85%b3%e6%93%8d%e4%bd%9c.html</guid>
		<description><![CDATA[一、显示表名和表结构 SHOW TABLES; SHOW TABLE tablename; 二、更新字段注释 UPDATE RDB$RELATION_FIELDS SET RDB$DESCRIPTION = &#8216;描述信息&#8217; WHERE (RDB$RELATION_NAME = &#8216;SHOP&#8217;) AND (RDB$FIELD_NAME = &#8216;CREDIT_BUY&#8217;) 三、显示字段注释 SELECT RDB$FIELD_NAME,RDB$DESCRIPTION FROM RDB$RELATION_FIELDS WHERE (RDB$RELATION_NAME = &#8216;SHOP&#8217;) AND (DB$FIELD_NAME = &#8216;CREDIT_BUY&#8217;) 四、更新表注释 UPDATE RDB$RELATIONS SET RDB$DESCRIPTION = &#8216;描述信息&#8217; WHERE RDB$RELATION_NAME = &#8216;TABLE_NAME&#8217;; 五、查询所有的表和视图（包括系统表和系统视图） SELECT RDB$RELATION_NAME FROM RDB$RELATIONS; 六、查询所有的用户表和用户视图 SELECT RDB$RELATION_NAME FROM RDB$RELATIONS [...]]]></description>
			<content:encoded><![CDATA[<p>一、显示表名和表结构</p>
<blockquote><p><strong>SHOW TABLES</strong>;       <br /><strong>SHOW TABLE</strong> tablename;</p>
</blockquote>
<p>二、更新字段注释</p>
<blockquote><p><strong>UPDATE</strong> RDB$RELATION_FIELDS       <br /><strong>SET</strong> RDB$DESCRIPTION = &#8216;描述信息&#8217;       <br /><strong>WHERE</strong> (RDB$RELATION_NAME = &#8216;SHOP&#8217;)       <br /><strong>AND</strong> (RDB$FIELD_NAME = &#8216;CREDIT_BUY&#8217;)</p>
</blockquote>
<p>三、显示字段注释</p>
<blockquote><p><strong>SELECT</strong> RDB$FIELD_NAME,RDB$DESCRIPTION       <br /><strong>FROM</strong> RDB$RELATION_FIELDS       <br /><strong>WHERE</strong> (RDB$RELATION_NAME = &#8216;SHOP&#8217;)       <br /><strong>AND</strong> (DB$FIELD_NAME = &#8216;CREDIT_BUY&#8217;)</p>
</blockquote>
<p> <span id="more-885"></span>
<p>四、更新表注释</p>
<blockquote><p><strong>UPDATE</strong> RDB$RELATIONS       <br /><strong>SET</strong> RDB$DESCRIPTION = &#8216;描述信息&#8217;       <br /><strong>WHERE</strong> RDB$RELATION_NAME = &#8216;TABLE_NAME&#8217;;</p>
</blockquote>
<p>五、查询所有的表和视图（包括系统表和系统视图）</p>
<blockquote><p><strong>SELECT</strong> RDB$RELATION_NAME       <br /><strong>FROM</strong> RDB$RELATIONS;</p>
</blockquote>
<p>六、查询所有的用户表和用户视图</p>
<blockquote><p><strong>SELECT</strong> RDB$RELATION_NAME       <br /><strong>FROM</strong> RDB$RELATIONS       <br /><strong>WHERE</strong> RDB$SYSTEM_FLAG = 0;</p>
</blockquote>
<p>七、查询所有的用户表</p>
<blockquote><p><strong>SELECT</strong> RDB$RELATION_NAME       <br /><strong>FROM</strong> RDB$RELATIONS       <br /><strong>WHERE</strong> RDB$SYSTEM_FLAG = 0       <br /><strong>AND</strong> RDB$VIEW_BLR <strong>IS</strong> <strong>NULL</strong>;</p>
</blockquote>
<p>八、查所有用户表、用户视图所有字段及相关定义</p>
<blockquote><p><strong>SELECT</strong>       <br />&#160;&#160; a.RDB$RELATION_NAME,       <br />&#160;&#160; b.RDB$FIELD_NAME,       <br />&#160;&#160; b.RDB$FIELD_ID,       <br />&#160;&#160; d.RDB$TYPE_NAME,       <br />&#160;&#160;&#160; c.RDB$FIELD_LENGTH,       <br />&#160;&#160; c.RDB$FIELD_SCALE       <br /><strong>FROM</strong> RDB$RELATIONS a       <br /><strong>INNER JOIN</strong> RDB$RELATION_FIELDS b       <br /><strong>ON</strong> a.RDB$RELATION_NAME = b.RDB$RELATION_NAME       <br /><strong>INNER JOIN</strong> RDB$FIELDS c       <br /><strong>ON</strong> b.RDB$FIELD_SOURCE = c.RDB$FIELD_NAME       <br /><strong>INNER JOIN</strong> RDB$TYPES d       <br /><strong>ON</strong> c.RDB$FIELD_TYPE = d.RDB$TYPE       <br /><strong>WHERE</strong> a.RDB$SYSTEM_FLAG = 0       <br /><strong>AND</strong> d.RDB$FIELD_NAME = &#8216;RDB$FIELD_TYPE&#8217;       <br /><strong>ORDER BY</strong> a.RDB$RELATION_NAME, b.RDB$FIELD_ID;</p>
</blockquote>
<p>九、查找某表的所有字段及相关定义</p>
<blockquote><p><strong>SELECT        <br /></strong>&#160;&#160; A.RDB$FIELD_NAME,       <br />&#160;&#160; B.RDB$FIELD_TYPE,       <br />&#160;&#160; B.RDB$FIELD_LENGTH,       <br />&#160;&#160; B.RDB$FIELD_PRECISION,       <br />&#160;&#160; B.RDB$FIELD_SCALE       <br /><strong>FROM</strong> RDB$RELATION_FIELDS A, RDB$FIELDS B       <br /><strong>WHERE</strong> A.RDB$RELATION_NAME = &#8216;tablename&#8217;       <br /><strong>AND</strong> A.RDB$FIELD_SOURCE = B.RDB$FIELD_NAME       <br /><strong>ORDER BY</strong> A.RDB$FIELD_POSITION;</p>
</blockquote>
<p>十、查找某表的主键定义字段</p>
<blockquote><p><strong>SELECT</strong> A.RDB$FIELD_NAME       <br /><strong>FROM</strong> RDB$INDEX_SEGMENTS A, RDB$RELATION_CONSTRAINTS B       <br /><strong>WHERE</strong> B.RDB$CONSTRAINT_TYPE = &#8216;PRIMARY KEY&#8217;       <br /><strong>AND</strong> B.RDB$RELATION_NAME = &#8216;tablename&#8217;       <br /><strong>AND</strong> A.RDB$INDEX_NAME = B.RDB$INDEX_NAME       <br /><strong>ORDER BY</strong> A.RDB$FIELD_POSITION;</p>
</blockquote>
<p>十一、查找某表的外键定义 </p>
<blockquote><p><strong>SELECT</strong>       <br />&#160;&#160; r1.RDB$CONSTRAINT_NAME,       <br />&#160;&#160; rind.RDB$FIELD_NAME,       <br />&#160;&#160; r2.RDB$RELATION_NAME       <br /><strong>FROM</strong>       <br />RDB$RELATION_CONSTRAINTS r1,       <br />RDB$RELATION_CONSTRAINTS r2,       <br />RDB$REF_CONSTRAINTS ref,       <br />RDB$INDEX_SEGMENTS rind       <br /><strong>WHERE</strong> r1.RDB$RELATION_NAME = &#8216;tablename&#8217;       <br /><strong>AND</strong> r1.RDB$CONSTRAINT_TYPE = &#8216;FOREIGN KEY&#8217;       <br /><strong>AND</strong> r1.RDB$CONSTRAINT_NAME = ref.RDB$CONSTRAINT_NAME       <br /><strong>AND</strong> ref.RDB$CONST_NAME_UQ = r2.RDB$CONSTRAINT_NAME       <br /><strong>AND</strong> r1.RDB$INDEX_NAME = rind.RDB$INDEX_NAME;</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.aease.org/2009/12/firebrid%e7%b3%bb%e7%bb%9f%e8%a1%a8%e7%9b%b8%e5%85%b3%e6%93%8d%e4%bd%9c.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FireBird/InterBase内置函数使用说明</title>
		<link>http://www.aease.org/2009/12/firebirdinterbase%e5%86%85%e7%bd%ae%e5%87%bd%e6%95%b0%e4%bd%bf%e7%94%a8%e8%af%b4%e6%98%8e.html</link>
		<comments>http://www.aease.org/2009/12/firebirdinterbase%e5%86%85%e7%bd%ae%e5%87%bd%e6%95%b0%e4%bd%bf%e7%94%a8%e8%af%b4%e6%98%8e.html#comments</comments>
		<pubDate>Sun, 06 Dec 2009 03:01:07 +0000</pubDate>
		<dc:creator>wind</dc:creator>
				<category><![CDATA[Firebird]]></category>

		<guid isPermaLink="false">http://www.aease.org/2009/12/firebirdinterbase%e5%86%85%e7%bd%ae%e5%87%bd%e6%95%b0%e4%bd%bf%e7%94%a8%e8%af%b4%e6%98%8e.html</guid>
		<description><![CDATA[1. COUNT, AVG, MAX, MIN, SUM 说明:通用统计函数,不详细介绍了 2. EXTRACT(timestamp_part FROM value) 说明:EXTRACT(YEAR/MONTHE/DAY/WEEKDAY FROM 字段名) 从日期型字段中分离出年,月,日及一个星期的第几天 3. CAST(value AS datatype) 说明:转换数据类型 4. LOWER() * 说明:返回小写值 5. UPPER() 说明:返回大写值 6. TRIM() * 说明:去除字符串两边的空格 7. SUBSTRING(string FROM pos FOR length) 说明:取字符串子串,注意,第一个字符的位置是1 8. BIT_LENGTH * 说明:返回字符串位(bit)数 9. CHAR_LENGTH/CHARACTER_LENGTH * 说明:返回字符串字符数 10. OCTET_LENGTH * 说明:返回字符串字节数 11. CASE 说明:通过执行外来的一组条件取得相应的返回值 举例 i) [...]]]></description>
			<content:encoded><![CDATA[<p>1. COUNT, AVG, MAX, MIN, SUM   <br />说明:通用统计函数,不详细介绍了    <br />2. EXTRACT(timestamp_part FROM value)    <br />说明:EXTRACT(YEAR/MONTHE/DAY/WEEKDAY FROM 字段名)    <br />从日期型字段中分离出年,月,日及一个星期的第几天    <br />3. CAST(value AS datatype)    <br />说明:转换数据类型    <br />4. LOWER() *    <br />说明:返回小写值    <br />5. UPPER()    <br />说明:返回大写值    <br />6. TRIM() *    <br />说明:去除字符串两边的空格    </p>
<p> <span id="more-884"></span>
<p>7. SUBSTRING(string FROM pos FOR length)   <br />说明:取字符串子串,注意,第一个字符的位置是1    <br />8. BIT_LENGTH *    <br />说明:返回字符串位(bit)数    <br />9. CHAR_LENGTH/CHARACTER_LENGTH *    <br />说明:返回字符串字符数    <br />10. OCTET_LENGTH *    <br />说明:返回字符串字节数    <br />11. CASE    <br />说明:通过执行外来的一组条件取得相应的返回值    <br />举例</p>
<blockquote><p>i) 简单     <br />SELECT o.ID, o.Description,      <br />CASE o.Status      <br />WHEN 1 THEN &#8216;confirmed&#8217;      <br />WHEN 2 THEN &#8216;in production&#8217;      <br />WHEN 3 THEN &#8216;ready&#8217;      <br />WHEN 4 THEN &#8216;shipped&#8217;      <br />ELSE &#8216;unknown status &#8221;&#8217; || o.Status || &#8221;&#8221;      <br />END      <br />FROM Orders o;      <br />ii) 表达式      <br />SELECT o.ID, o.Description,      <br />CASE      <br />WHEN (o.Status IS NULL) THEN &#8216;new&#8217;      <br />WHEN (o.Status = 1) THEN &#8216;confirmed&#8217;      <br />WHEN (o.Status = 3) THEN &#8216;in production&#8217;      <br />WHEN (o.Status = 4) THEN &#8216;ready&#8217;      <br />WHEN (o.Status = 5) THEN &#8216;shipped&#8217;      <br />ELSE &#8216;unknown status &#8221;&#8217; || o.Status || &#8221;&#8221;      <br />END      <br />FROM Orders o;</p>
</blockquote>
<p>12. IIF (&lt;search_condition&gt;, &lt;value1&gt;, &lt;value2&gt;)   <br />说明:表达式为真,返回value1否则返回value2    <br />等价于以下语句:</p>
<blockquote><p>CASE     <br />WHEN &lt;search_condition&gt; THEN &lt;value1&gt;      <br />ELSE &lt;value2&gt;      <br />END      </p>
</blockquote>
<p>13. NULLIF(V1,V2)   <br />说明:如果V1=V2,返回NULL,否则返回V1    <br />等价于以下语句:</p>
<blockquote><p>CASE WHEN V1 = V2 THEN NULL ELSE V1 END     <br />举例      <br />UPDATE PRODUCTS      <br />SET STOCK = NULLIF(STOCK,0)</p>
</blockquote>
<p>14. COALESCE(V1, V2, …, Vn)   <br />说明:如果V1为Null,返回V2,否则返回V1,    <br />如果 n &gt;= 3, 等于如下case语句:</p>
<blockquote><p>CASE     <br />WHEN V1 IS NOT NULL THEN V1      <br />ELSE COALESCE (V2,&#8230;,Vn)      <br />END      <br />举例      <br />SELECT      <br />PROJ_NAME AS Projectname,      <br />COALESCE(e.FULL_NAME,&#8217;[&lt; not assigned &gt;]&#8216;) AS Employeename      <br />FROM      <br />PROJECT p      <br />LEFT JOIN EMPLOYEE e      <br />ON (e.EMP_NO = p.TEAM_LEADER);      <br />SELECT      <br />COALESCE(Phone,MobilePhone,&#8217;Unknown&#8217;) AS &quot;Phonenumber&quot;      <br />FROM Relations;</p>
</blockquote>
<p>15.获当前日期：</p>
<blockquote><p>select current_date from rdb$database&#160;&#160; </p>
</blockquote>
<p>获当前时间： </p>
<blockquote><p>select current_time from rdb$database</p>
</blockquote>
<p>16.Firebird数据库的取值范围    <br />在其它SQL数据库里，有一个 Top n的子句，可以取头n条记录，Firebird不支持这个子句，但是它有更强大的子句：FIREST n SKIP n。    <br />FIRST n表示提取头n条记录,SKIP n 表示从第几条开始提取，比如，我要从学生表里取语文成绩名次在11至15名的学生名单，SQL语句如下：</p>
<blockquote><p>select first 5 skip 10 SNAME,YUWEN from achieve order by YUWEN desc</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.aease.org/2009/12/firebirdinterbase%e5%86%85%e7%bd%ae%e5%87%bd%e6%95%b0%e4%bd%bf%e7%94%a8%e8%af%b4%e6%98%8e.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Firebird Create database</title>
		<link>http://www.aease.org/2009/11/firebird-create-database.html</link>
		<comments>http://www.aease.org/2009/11/firebird-create-database.html#comments</comments>
		<pubDate>Fri, 13 Nov 2009 15:17:09 +0000</pubDate>
		<dc:creator>wind</dc:creator>
				<category><![CDATA[Firebird]]></category>

		<guid isPermaLink="false">http://www.aease.org/2009/11/firebird-create-database.html</guid>
		<description><![CDATA[Syntax CREATE DATABASE &#60;file name&#62; [ PAGE_SIZE &#60;page size&#62; ] [ LENGTH = &#60;length&#62; ] [ USER &#60;user name&#62; ] [ PASSWORD &#60;user password&#62; ] [ SET NAMES &#60;charset name&#62; ] [ DEFAULT CHARACTER SET &#60;charset name&#62; [ COLLATION &#60;collation name&#62; ] ] [ DIFFERENCE FILE &#60;file name&#62; ] Default COLLATION (version 2.5) Specify the [...]]]></description>
			<content:encoded><![CDATA[<h4>Syntax</h4>
<blockquote><pre>CREATE DATABASE &lt;file name&gt;
    [ PAGE_SIZE &lt;page size&gt; ]
    [ LENGTH = &lt;length&gt; ]
    [ USER &lt;user name&gt; ]
    [ PASSWORD &lt;user password&gt; ]
    [ SET NAMES &lt;charset name&gt; ]
    [ DEFAULT CHARACTER SET &lt;charset name&gt; [ COLLATION &lt;collation name&gt; ] ]
    [ DIFFERENCE FILE &lt;file name&gt; ]</pre>
</blockquote>
<h4>Default COLLATION (version 2.5)</h4>
<p>Specify the default collation of the default character set. </p>
<h4>&#160;</h4>
<h4>Example</h4>
<blockquote>
<pre>SQL&gt;CREATE DATABASE 'D:\data\test.fdb' page_size 8192 user
'SYSDBA' password 'masterkey';</pre>
<pre>SQL&gt;SELECT * FROM RDB$RELATIONS;</pre>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.aease.org/2009/11/firebird-create-database.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Firebird的基本数据类型</title>
		<link>http://www.aease.org/2009/11/firebird%e7%9a%84%e5%9f%ba%e6%9c%ac%e6%95%b0%e6%8d%ae%e7%b1%bb%e5%9e%8b.html</link>
		<comments>http://www.aease.org/2009/11/firebird%e7%9a%84%e5%9f%ba%e6%9c%ac%e6%95%b0%e6%8d%ae%e7%b1%bb%e5%9e%8b.html#comments</comments>
		<pubDate>Thu, 05 Nov 2009 08:53:51 +0000</pubDate>
		<dc:creator>wind</dc:creator>
				<category><![CDATA[Firebird]]></category>

		<guid isPermaLink="false">http://www.aease.org/2009/11/firebird%e7%9a%84%e5%9f%ba%e6%9c%ac%e6%95%b0%e6%8d%ae%e7%b1%bb%e5%9e%8b.html</guid>
		<description><![CDATA[由于排版关系，取幂将用[]，比如10[5]，表示10的5次方。 INTEGER: 长整型，取值范围：-2147483648至2147483647 FLOAT: 单精度浮点型，取值范围：1.175*10[-38]至3.402*10[38] DOUBLE PRECISION：双精度浮点型，取值范围：2.225*10[-308]至1.797*10[308] DECIMAL：小数型，可指定有效位数最大为18位或小数点后18位。比如DECIMAL(5,2)，就是指有5位数字，不含小数点，形如123.45 NUMERIC：小数型，与DECIMAL类似 注意，当数据含小数部分时，请尽量用DECIMAL，因为浮点型有精度问题，除非数值特别大，才用浮点型！ DECIMAL与NUMERIC的区别 比如，DECIMAL(5,2)与NUMERIC(5,2)所分别定义的字段，DECIMAL(5,2)指的是至少有5位数字，还可以更多！而NUMERIC(5,2)指的是，就是5位，不多也不少。 SMALLINT：短整型，取值范围：-32768至32767 CHAR：字符型，最多32767个字符 注意，使用CHAR类型，即使字符数没有达到指定字段的宽度，也会用空字符补满！取值时，请注意用TRIM()等函数去掉多余空字符。除非确定每条记录的字符数不变，否则请用VARCHAR类型。 VARCHAR：可变长度字符型，最多32767个字符 TIME：时间型，取值范围：00:00至23:59.9999 TIMESTAMP:日期时间型，取值范围：公元100年1月1日至公元32768年2月29日，同时包含日期与时间信息。 DATE：日期型，取值范围：公元100年1月1日至公元32768年2月29日。 注意，建库时需选择DIALECT 3级别才支持DATE型，否则就是TIMESTAMP型。 BLOB：大二进制型，可支持Text(文本)、Binary Data(二进制型，比如图片，声音等)等子类型。取值范围：64KB以内。]]></description>
			<content:encoded><![CDATA[<p> 由于排版关系，取幂将用[]，比如10[5]，表示10的5次方。   <br />INTEGER: 长整型，取值范围：-2147483648至2147483647    <br />FLOAT: 单精度浮点型，取值范围：1.175*10[-38]至3.402*10[38]    <br />DOUBLE PRECISION：双精度浮点型，取值范围：2.225*10[-308]至1.797*10[308]    <br />DECIMAL：小数型，可指定有效位数最大为18位或小数点后18位。比如DECIMAL(5,2)，就是指有5位数字，不含小数点，形如123.45    <br />NUMERIC：小数型，与DECIMAL类似    </p>
<blockquote><p>注意，当数据含小数部分时，请尽量用DECIMAL，因为浮点型有精度问题，除非数值特别大，才用浮点型！</p>
</blockquote>
<blockquote><p>DECIMAL与NUMERIC的区别     <br />比如，DECIMAL(5,2)与NUMERIC(5,2)所分别定义的字段，DECIMAL(5,2)指的是至少有5位数字，还可以更多！而NUMERIC(5,2)指的是，就是5位，不多也不少。</p>
</blockquote>
<p>SMALLINT：短整型，取值范围：-32768至32767</p>
<p>CHAR：字符型，最多32767个字符</p>
<blockquote><p>注意，使用CHAR类型，即使字符数没有达到指定字段的宽度，也会用空字符补满！取值时，请注意用TRIM()等函数去掉多余空字符。除非确定每条记录的字符数不变，否则请用VARCHAR类型。</p>
</blockquote>
<p>VARCHAR：可变长度字符型，最多32767个字符   <br />TIME：时间型，取值范围：00:00至23:59.9999    <br />TIMESTAMP:日期时间型，取值范围：公元100年1月1日至公元32768年2月29日，同时包含日期与时间信息。    <br />DATE：日期型，取值范围：公元100年1月1日至公元32768年2月29日。</p>
<blockquote><p>注意，建库时需选择DIALECT 3级别才支持DATE型，否则就是TIMESTAMP型。</p>
</blockquote>
<p>BLOB：大二进制型，可支持Text(文本)、Binary Data(二进制型，比如图片，声音等)等子类型。取值范围：64KB以内。   </p>
]]></content:encoded>
			<wfw:commentRss>http://www.aease.org/2009/11/firebird%e7%9a%84%e5%9f%ba%e6%9c%ac%e6%95%b0%e6%8d%ae%e7%b1%bb%e5%9e%8b.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unidac连接嵌入版Firebird</title>
		<link>http://www.aease.org/2009/11/unidac%e8%bf%9e%e6%8e%a5%e5%b5%8c%e5%85%a5%e7%89%88firebird.html</link>
		<comments>http://www.aease.org/2009/11/unidac%e8%bf%9e%e6%8e%a5%e5%b5%8c%e5%85%a5%e7%89%88firebird.html#comments</comments>
		<pubDate>Wed, 04 Nov 2009 02:16:54 +0000</pubDate>
		<dc:creator>wind</dc:creator>
				<category><![CDATA[Firebird]]></category>

		<guid isPermaLink="false">http://www.aease.org/2009/11/unidac%e8%bf%9e%e6%8e%a5%e5%b5%8c%e5%85%a5%e7%89%88firebird.html</guid>
		<description><![CDATA[with localcon1 do &#160; begin &#160;&#160;&#160;&#160; ProviderName := &#8216;interbase&#8217;; &#160;&#160;&#160;&#160; Password := &#8216;masterkey&#8217;; &#160;&#160;&#160;&#160; Username := &#8216;sysdba&#8217;; &#160;&#160;&#160;&#160; Server := &#8221;; &#160;&#160;&#160;&#160; Database := &#8216;.\data\Testdb.fdb&#8217;; //current dir &#160;&#160;&#160;&#160; SpecificOptions.Clear; &#160;&#160;&#160;&#160; SpecificOptions.Add(&#8216;InterBase.ClientLibrary=fbembed.dll&#8217;);//set embed dll &#160;&#160;&#160;&#160; SpecificOptions.Add(&#8216;InterBase.CharLength=0&#8242;);//0 let unidac load firebird setting &#160;&#160;&#160;&#160; SpecificOptions.Add(&#8216;SQLDialet=3&#8242;); &#160;&#160;&#160;&#160; SpecificOptions.Add(&#8216;USEUnicode=true&#8217;); &#160;&#160;&#160;&#160;&#160; try &#160;&#160;&#160;&#160;&#160;&#160; Connect; &#160;&#160;&#160;&#160;&#160;&#160; ShowMessage(&#8216;OK&#8217;); &#160;&#160;&#160;&#160;&#160; except &#160;&#160;&#160;&#160;&#160;&#160; ShowMessage(&#8216;eer&#8217;); &#160;&#160;&#160;&#160;&#160; [...]]]></description>
			<content:encoded><![CDATA[<p>with localcon1 do   <br />&#160; begin    <br />&#160;&#160;&#160;&#160; ProviderName := &#8216;interbase&#8217;;    <br />&#160;&#160;&#160;&#160; Password := &#8216;masterkey&#8217;;    <br />&#160;&#160;&#160;&#160; Username := &#8216;sysdba&#8217;;    <br />&#160;&#160;&#160;&#160; Server := &#8221;;    <br />&#160;&#160;&#160;&#160; Database := &#8216;.\data\Testdb.fdb&#8217;; //current dir    <br />&#160;&#160;&#160;&#160; SpecificOptions.Clear;    <br />&#160;&#160;&#160;&#160; SpecificOptions.Add(&#8216;InterBase.ClientLibrary=fbembed.dll&#8217;);//set embed dll    <br />&#160;&#160;&#160;&#160; SpecificOptions.Add(&#8216;InterBase.CharLength=0&#8242;);//0 let unidac load firebird setting    <br />&#160;&#160;&#160;&#160; SpecificOptions.Add(&#8216;SQLDialet=3&#8242;);    <br />&#160;&#160;&#160;&#160; SpecificOptions.Add(&#8216;USEUnicode=true&#8217;);    <br />&#160;&#160;&#160;&#160;&#160; try    <br />&#160;&#160;&#160;&#160;&#160;&#160; Connect;    <br />&#160;&#160;&#160;&#160;&#160;&#160; ShowMessage(&#8216;OK&#8217;);    <br />&#160;&#160;&#160;&#160;&#160; except    <br />&#160;&#160;&#160;&#160;&#160;&#160; ShowMessage(&#8216;eer&#8217;);    <br />&#160;&#160;&#160;&#160;&#160; end;    <br />&#160; end;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aease.org/2009/11/unidac%e8%bf%9e%e6%8e%a5%e5%b5%8c%e5%85%a5%e7%89%88firebird.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
