﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-心野的小巢-文章分类-编程相关</title><link>http://www.cnitblog.com/torch/category/3618.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 26 Sep 2011 13:37:28 GMT</lastBuildDate><pubDate>Mon, 26 Sep 2011 13:37:28 GMT</pubDate><ttl>60</ttl><item><title>Delphi访问有密码的Access数据库</title><link>http://www.cnitblog.com/torch/articles/15549.html</link><dc:creator>心野</dc:creator><author>心野</author><pubDate>Sat, 19 Aug 2006 00:16:00 GMT</pubDate><guid>http://www.cnitblog.com/torch/articles/15549.html</guid><wfw:comment>http://www.cnitblog.com/torch/comments/15549.html</wfw:comment><comments>http://www.cnitblog.com/torch/articles/15549.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/torch/comments/commentRss/15549.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/torch/services/trackbacks/15549.html</trackback:ping><description><![CDATA[ j:='provider=Microsoft.Jet.OLEDB.4.0;user   ID=Admin;Data   Source='   <br />          +ExtractFilePath(Application.ExeName)+'Database.mdb;'   <br />          +'Mode=Share   Deny   None;Extended   Properties="";'       <br />          +'Jet   OLEDB:System   database="";'     <br />          +'Jet   OLEDB:Registry   Path="";'         <br />          +'Jet   OLEDB:Database   Password="123";'     //设定密码为123   <br />          +'Jet   OLEDB:Engine   Type=5;'                     <br />          +'Jet   OLEDB:Database   Locking   Mode=1;'     <br />          +'Jet   OLEDB:Global   Partial   Bulk   Ops=2;'     <br />          +'Jet   OLEDB:Global   Bulk   Transactions=1;'     <br />          +'Jet   OLEDB:New   Database   Password="";'         <br />          +'Jet   OLEDB:Create   System   Database=False;'     <br />          +'Jet   OLEDB:Encrypt   Database=False;'               <br />          +'Jet   OLEDB:Don'+''''+'t   Copy   Locale   on   Compact=False;'         <br />          +'Jet   OLEDB:Compact   Without   Replica   Repair=False;'                 <br />          +'Jet   OLEDB:SFP=False';       <br />  ADOConnection1.LoginPrompt:=false;   <br />  ADOConnection1.ConnectionString:=j; <br /><br /><br /><br />简单点也可以这样：<br />ADOConnection1.Connected   :=   False;   <br />ADOConnection1.ConnectionString   :='Provider=Microsoft.Jet.OLEDB.4.0;Data   Source=C:\MyDatabase.mdb;Persist   Security   Info=False;Jet   OLEDB:Database   Password=密码';   <br />ADOConnection1.Connected   :=   True;<img src ="http://www.cnitblog.com/torch/aggbug/15549.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/torch/" target="_blank">心野</a> 2006-08-19 08:16 <a href="http://www.cnitblog.com/torch/articles/15549.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Delphi中的Access技巧集</title><link>http://www.cnitblog.com/torch/articles/15548.html</link><dc:creator>心野</dc:creator><author>心野</author><pubDate>Fri, 18 Aug 2006 23:55:00 GMT</pubDate><guid>http://www.cnitblog.com/torch/articles/15548.html</guid><wfw:comment>http://www.cnitblog.com/torch/comments/15548.html</wfw:comment><comments>http://www.cnitblog.com/torch/articles/15548.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/torch/comments/commentRss/15548.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/torch/services/trackbacks/15548.html</trackback:ping><description><![CDATA[DELPHI中操作数据库建立.mdb文件,压缩数据库<br />以下代码在WIN2K,D6,MDAC2.6下测试通过, <br />编译好的程序在WIN98第二版无ACCESS环境下运行成功. 
<div class="codeCss1"><br />//在之前uses ComObj,ActiveX <br />//声明连接字符串 <br />Const <br />SConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;' <br />+'Jet OLEDB:Database Password=%s;'; <br /><p></p><p>//============================================================================= <br />// Procedure: GetTempPathFileName <br />// Author : ysai <br />// Date : 2003-01-27 <br />// Arguments: (None) <br />// Result : string <br />//============================================================================= <br />function GetTempPathFileName():string; <br />//取得临时文件名 <br />var <br />SPath,Sfile&amp;:array [0..254] of char; <br />begin <br />GetTempPath(254,SPath); <br />GetTempFileName(SPath,'~SM',0,SFile); <br />result:=SFile; <br />DeleteFile(PChar(result)); <br />end; </p><p>//============================================================================= <br />// Procedure: CreateAccessFile <br />// Author : ysai <br />// Date : 2003-01-27 <br />// Arguments: FileName:String;PassWord:string='' <br />// Result : boolean <br />//============================================================================= <br />function CreateAccessFile(FileName:String;PassWord:string=''):boolean; <br />//建立Access文件，如果文件存在则失败 <br />var <br />STempFileName:string; <br />vCatalog:OleVariant; <br />begin <br />STempFileName:=GetTempPathFileName; <br />try <br />vCatalog:=CreateOleObject('ADOX.Catalog'); <br />vCatalog.Create(format(SConnectionString,[STempFileName,PassWord])); <br />result:=CopyFile(PChar(STempFileName),PChar(FileName),True); <br />DeleteFile(STempFileName); <br />except <br />result:=false; <br />end; <br />end; </p><p>//============================================================================= <br />// Procedure: CompactDatabase <br />// Author : ysai <br />// Date : 2003-01-27 <br />// Arguments: AFileName,APassWord:string <br />// Result : boolean <br />//============================================================================= <br />function CompactDatabase(AFileName,APassWord:string):boolean; <br />//压缩与修复数据库,覆盖源文件 <br />var <br />STempFileName:string; <br />vJE:OleVariant; <br />begin <br />STempFileName:=GetTempPathFileName; <br />try <br />vJE:=CreateOleObject('JRO.JetEngine'); <br />vJE.CompactDatabase(format(SConnectionString,[AFileName,APassWord]), <br />format(SConnectionString,[STempFileName,APassWord])); <br />result:=CopyFile(PChar(STempFileName),PChar(AFileName),false); <br />DeleteFile(STempFileName); <br />except <br />result:=false; <br />end; <br />end; </p><p>    //============================================================================= <br />// Procedure: ChangeDatabasePassword <br />// Author : ysai <br />// Date : 2003-01-27 <br />// Arguments: AFileName,AOldPassWord,ANewPassWord:string <br />// Result : boolean <br />//============================================================================= <br />function ChangeDatabasePassword(AFileName,AOldPassWord,ANewPassWord:string):boolean; <br />//修改ACCESS数据库密码 <br />var <br />STempFileName:string; <br />vJE:OleVariant; <br />begin <br />STempFileName:=GetTempPathFileName; <br />try <br />vJE:=CreateOleObject('JRO.JetEngine'); <br />vJE.CompactDatabase(format(SConnectionString,[AFileName,AOldPassWord]), <br />format(SConnectionString,[STempFileName,ANewPassWord])); <br />result:=CopyFile(PChar(STempFileName),PChar(AFileName),false); <br />DeleteFile(STempFileName); <br />except <br />result:=false; <br />end; <br />end; </p></div><p>2.ACCESS中使用SQL语句应注意的地方及几点技巧 <br />以下SQL语句在ACCESS XP的查询中测试通过 <br />建表: <br />Create Table Tab1 ( <br />ID Counter, <br />Name string, <br />Age integer, <br />[Date] DateTime); <br />技巧: <br />自增字段用 Counter 声明. <br />字段名为关键字的字段用方括号[]括起来,数字作为字段名也可行. </p><p>建立索引: <br />下面的语句在Tab1的Date列上建立可重复索引 <br />Create Index iDate ON Tab1 ([Date]); <br />完成后ACCESS中字段Date索引属性显示为 - 有(有重复). <br />下面的语句在Tab1的Name列上建立不可重复索引 <br />Create Unique Index iName ON Tab1 (Name); <br />完成后ACCESS中字段Name索引属性显示为 - 有(无重复). <br />下面的语句删除刚才建立的两个索引 <br />Drop Index iDate ON Tab1; <br />Drop Index iName ON Tab1; </p><p>ACCESS与SQLSERVER中的UPDATE语句对比: <br />SQLSERVER中更新多表的UPDATE语句: 
</p><div class="codeCss1"><br />UPDATE Tab1 <br />SET a.Name = b.Name <br />FROM Tab1 a,Tab2 b <br />WHERE a.ID = b.ID; <br /></div>同样功能的SQL语句在ACCESS中应该是 <br /><div class="codeCss1">UPDATE Tab1 a,Tab2 b <br />SET a.Name = b.Name <br />WHERE a.ID = b.ID; <br /></div>即:ACCESS中的UPDATE语句没有FROM子句,所有引用的表都列在UPDATE关键字后. <br />上例中如果Tab2可以不是一个表,而是一个查询,例: <br />UPDATE Tab1 a,(Select ID,Name From Tab2) b <br />SET a.Name = b.Name <br />WHERE a.ID = b.ID; 
<p></p><p>访问多个不同的ACCESS数据库-在SQL中使用In子句: <br />Select a.*,b.* From Tab1 a,Tab2 b In 'db2.mdb' Where a.ID=b.ID; <br />上面的SQL语句查询出当前数据库中Tab1和db2.mdb(当前文件夹中)中Tab2以ID为关联的所有记录. <br />缺点-外部数据库不能带密码. <br />补充:看到ugvanxk在一贴中的答复,可以用 <br />Select * from [c:\aa\a.mdb;pwd=1111].table1; <br />ACCESS XP测试通过 </p><p>在ACCESS中访问其它ODBC数据源 <br />下例在ACCESS中查询SQLSERVER中的数据 <br /></p><div class="codeCss1">SELECT * FROM Tab1 IN [ODBC] <br />[ODBC;Driver=SQL Server;UID=sa;PWD=;Server=127.0.0.1;DataBase=Demo;] <br /></div>外部数据源连接属性的完整参数是: <br /><div class="codeCss1">[ODBC;DRIVER=driver;SERVER=server;DATABASE=database;UID=user;PWD=password;] </div><br />其中的DRIVER=driver可以在注册表中的 <br />HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ <br />中找到 <br />异构数据库之间导数据参见 碧血剑  
<p></p><p>ACCESS支持子查询 </p><p>ACCESS支持外连接,但不包括完整外部联接,如支持 <br />LEFT JOIN 或 RIGHT JOIN <br />但不支持 <br />FULL OUTER JOIN 或 FULL JOIN </p><p>ACCESS中的日期查询 <br />注意:ACCESS中的日期时间分隔符是#而不是引号 <br />Select * From Tab1 Where [Date]&gt;#2002-1-1#; <br />在DELPHI中我这样用 <br />SQL.Add(Format( <br />'Select * From Tab1 Where [Date]&gt;#%s#;', <br />[DateToStr(Date)])); </p><p>ACCESS中的字符串可以用双引号分隔,但SQLSERVER不认,所以为了迁移方便和兼容, 建议用单引号作为字符串分隔符.<br /></p><img src ="http://www.cnitblog.com/torch/aggbug/15548.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/torch/" target="_blank">心野</a> 2006-08-19 07:55 <a href="http://www.cnitblog.com/torch/articles/15548.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>