DELPHI中操作ACCESS数据库.doc_第1页
DELPHI中操作ACCESS数据库.doc_第2页
DELPHI中操作ACCESS数据库.doc_第3页
DELPHI中操作ACCESS数据库.doc_第4页
DELPHI中操作ACCESS数据库.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

DELPHI中操作ACCESS数据库1.DELPHI中操作ACCESS数据库(建立.mdb文件,压缩数据库)以下代码在WIN2K,D6,MDAC2.6下测试通过,编译好的程序在WIN98第二版无ACCESS环境下运行成功./在之前uses ComObj,ActiveX/声明连接字符串Const SConnectionString = Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s; +Jet OLEDB:Database Password=%s;/=/ Procedure: GetTempPathFileName/ Author : ysai/ Date : 2003-01-27/ Arguments: (None)/ Result : string/=function GetTempPathFileName():string;/取得临时文件名var SPath,SFile:array 0.254 of char;begin GetTempPath(254,SPath); GetTempFileName(SPath,SM,0,SFile); result:=SFile; DeleteFile(PChar(result);end;/=/ Procedure: CreateAccessFile/ Author : ysai/ Date : 2003-01-27/ Arguments: FileName:String;PassWord:string=/ Result : boolean/=function CreateAccessFile(FileName:String;PassWord:string=):boolean;/建立Access文件,如果文件存在则失败var STempFileName:string; vCatalog:OleVariant;begin STempFileName:=GetTempPathFileName; try vCatalog:=CreateOleObject(ADOX.Catalog); vCatalog.Create(format(SConnectionString,STempFileName,PassWord); result:=CopyFile(PChar(STempFileName),PChar(FileName),True); DeleteFile(STempFileName); except result:=false; end;end;/=/ Procedure: CompactDatabase/ Author : ysai/ Date : 2003-01-27/ Arguments: AFileName,APassWord:string/ Result : boolean/=function CompactDatabase(AFileName,APassWord:string):boolean;/压缩与修复数据库,覆盖源文件var STempFileName:string; vJE:OleVariant;begin STempFileName:=GetTempPathFileName; try vJE:=CreateOleObject(JRO.JetEngine); vJE.CompactDatabase(format(SConnectionString,AFileName,APassWord), format(SConnectionString,STempFileName,APassWord); result:=CopyFile(PChar(STempFileName),PChar(AFileName),false); DeleteFile(STempFileName); except result:=false; end;end;/=/ Procedure: ChangeDatabasePassword/ Author : ysai/ Date : 2003-01-27/ Arguments: AFileName,AOldPassWord,ANewPassWord:string/ Result : boolean/=function ChangeDatabasePassword(AFileName,AOldPassWord,ANewPassWord:string):boolean;/压缩数据库并修改ACCESS数据库密码var STempFileName:string; vJE:OleVariant;begin STempFileName:=GetTempPathFileName; try vJE:=CreateOleObject(JRO.JetEngine); vJE.CompactDatabase(format(SConnectionString,AFileName,AOldPassWord), format(SConnectionString,STempFileName,ANewPassWord); result:=CopyFile(PChar(STempFileName),PChar(AFileName),false); DeleteFile(STempFileName); except result:=false; end;end;2.ACCESS中使用SQL语句应注意的地方及几点技巧以下SQL语句在ACCESS XP的查询中测试通过建表: Create Table Tab1 ( ID Counter, Name string, Age integer, Date DateTime);技巧: 自增字段用 Counter 声明. 字段名为关键字的字段用方括号括起来,数字作为字段名也可行.建立索引: 下面的语句在Tab1的Date列上建立可重复索引 Create Index iDate ON Tab1 (Date); 完成后ACCESS中字段Date索引属性显示为 - 有(有重复). 下面的语句在Tab1的Name列上建立不可重复索引 Create Unique Index iName ON Tab1 (Name); 完成后ACCESS中字段Name索引属性显示为 - 有(无重复). 下面的语句删除刚才建立的两个索引 Drop Index iDate ON Tab1; Drop Index iName ON Tab1;ACCESS与SQLSERVER中的UPDATE语句对比: SQLSERVER中更新多表的UPDATE语句: UPDATE Tab1 SET a.Name = b.Name FROM Tab1 a,Tab2 b WHERE a.ID = b.ID; 同样功能的SQL语句在ACCESS中应该是 UPDATE Tab1 a,Tab2 b SET a.Name = b.Name WHERE a.ID = b.ID;即:ACCESS中的UPDATE语句没有FROM子句,所有引用的表都列在UPDATE关键字后.上例中如果Tab2可以不是一个表,而是一个查询,例: UPDATE Tab1 a,(Select ID,Name From Tab2) b SET a.Name = b.Name WHERE a.ID = b.ID;访问多个不同的ACCESS数据库-在SQL中使用In子句: Select a.*,b.* From Tab1 a,Tab2 b In db2.mdb Where a.ID=b.ID; 上面的SQL语句查询出当前数据库中Tab1和db2.mdb(当前文件夹中)中Tab2以ID为关联的所有记录.缺点-外部数据库不能带密码.补充:看到ugvanxk在一贴中的答复,可以用 Select * from c:aaa.mdb;pwd=1111.table1;ACCESS XP测试通过在ACCESS中访问其它ODBC数据源下例在ACCESS中查询SQLSERVER中的数据 SELECT * FROM Tab1 IN ODBC ODBC;Driver=SQL Server;UID=sa;PWD=;Server=;DataBase=Demo;外部数据源连接属性的完整参数是: ODBC;DRIVER=driver;SERVER=server;DATABASE=database;UID=user;PWD=password;其中的DRIVER=driver可以在注册表中的 HKEY_LOCAL_MACHINESOFTWAREODBCODBCINST.INI中找到异构数据库之间导数据参见 碧血剑 的/delphibbs/dispq.asp?lid=1691966ACCESS支持子查询ACCESS支持外连接,但不包括完整外部联接,如支持 LEFT JOIN 或 RIGHT JOIN但不支持 FULL OUTER JOIN 或 FULL JOINACCESS中的日期查询注意:ACCESS中的日期时间分隔符是#而不是引号 Select * From Tab1 Where Date#2002-1-1#;在DELPHI中我这样用 SQL.Add(Format( Select * From Tab1 Where Date#%s#;, DateToStr(Date);ACCESS中的字符串可以用双引号分隔,但SQLSERVER不认,所以为了迁移方便和兼容,建议用单引号作为字符串分隔符. ACCESS的约束在JET SQL参考中关于约束的内容不够详细,可以参考SQL Server的联机丛书下面的SQL为a表的Name字段增加非空约束ALTER TABLE a ADD CONSTRAINT a_checkname CHECK (Not Name is Null)注意:每一个约束都是一个对象,都有一个名字 为一个表设置主键下面的语句把id列设置为主键Alter Table 表 Add Primary Key (Id)下面的语句把id列改为自动编号类型,并且设置为主键Alter Table 表 Alter id Counter Constraint 表_p Primary Key 修改ACCESS数据库的密码/引用ComObj单元/=/ Procedure: ChangeAccessPassword/ Author : ysai/ Date : 2004-02-10/ Arguments: const AFileName : string; const AOldPassword : string; const ANewPassword : string/ Result : Boolean/=function ChangeAccessPassword( const AFileName : string; const AOldPassword : string; const ANewPassword : string ):Boolean;/修改ACCESS数据库密码,必须独占打开数据库,使用前请确保没有其他程序使用数据库const SAlterDatabasePassword = ALTER DATABASE PASSWORD %s %s;var acn : OleVariant; sOld : string; sNew : string;begin if AOldPassword = then sOld := Null else sOld := + AOldPassword + ; if ANewPassword = then sNew := Null else sNew := + ANewPassword + ; try acn := CreateOleObject(ADODB.Connection); /Delphi中的cmShareExclusive,ADO中的adModeShareExclusive /用排它方式打开,直接用数字可以不用引用ADO单元 acn.Mode := 12; acn.Provider := Microsoft.Jet.OLEDB.4.0; acn.Properties(Jet OLEDB:Database Password) := AOldPasswo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论