`
buliedian
  • 浏览: 1237701 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Delphi操作ACCESS技巧集

阅读更多

版权声明

请尊重原创作品。转载请保持文章完整性,并以超链接形式注明原始作者“tingsking18”和主站点地址,方便其他朋友提问和指正。

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:\aa\a.mdb;pwd=1111].table1;
ACCESS XP测试通过

在ACCESS中访问其它ODBC数据源
下例在ACCESS中查询SQLSERVER中的数据
SELECT * FROM Tab1 IN [ODBC]
[ODBC;Driver=SQL Server;UID=sa;PWD=;Server=127.0.0.1;DataBase=Demo;]
外部数据源连接属性的完整参数是:
[ODBC;DRIVER=driver;SERVER=server;DATABASE=database;UID=user;PWD=password;]
其中的DRIVER=driver可以在注册表中的
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\
中找到
异构数据库之间导数据参见 碧血剑 的
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1691966

ACCESS支持子查询

ACCESS支持外连接,但不包括完整外部联接,如支持
LEFT JOIN 或 RIGHT JOIN
但不支持
FULL OUTER JOIN 或 FULL JOIN

ACCESS中的日期查询
注意:ACCESS中的日期时间分隔符是#而不是引号
Select * From Tab1 Where [Date]>#2002-1-1#;
在DELPHI中我这样用
SQL.Add(Format(
'Select * From Tab1 Where [Date]>#%s#;',
[DateToStr(Date)]));

ACCESS中的字符串可以用双引号分隔,但SQLSERVER不认,所以为了迁移方便和兼容,
建议用单引号作为字符串分隔符.

分享到:
评论

相关推荐

    Delphi中的Access技巧集

    ### Delphi中的Access技巧集 #### 一、概述 本文主要介绍了如何在Delphi中操作Access数据库的方法,包括创建`.mdb`文件以及压缩数据库等实用技巧。这些代码已经在Windows 2000(以下简称WIN2K)、Delphi 6(以下...

    ACCESS技巧集 很多实用技巧

    根据提供的文件信息,我们可以总结出一系列关于使用 Delphi 和 SQL 进行 Microsoft Access 数据库操作的相关知识点。以下是对这些知识点的详细阐述: ### 1. 使用 Delphi 创建和操作 Access 数据库 #### 1.1 创建 ...

    delphi对access的多表多字段的查询实例

    在Delphi中,我们通常会使用ADO(ActiveX Data Objects)组件来连接和操作Access数据库。首先,我们需要在界面上添加必要的ADO组件,如ADOTable、ADODataset、DataSource、DBGrid等。ADOTable用于直接连接到数据库表...

    Delphi小巧技巧簿Access版

    《Delphi小巧技巧簿Access版》是一本专为Delphi开发者设计的技术指南,它深入浅出地探讨了如何在Delphi编程中巧妙地利用Access数据库进行数据管理与应用开发。这本书的内容涵盖了从基础的数据库连接到高级的数据操作...

    estate_delphi_access_源码.zip

    通过分析这个项目的源码,我们可以学习到Delphi编程技巧、数据库设计以及二者如何协同工作。 首先,让我们关注Delphi这一强大的面向对象编程环境。Delphi是基于Pascal语言的,它以其高效、简洁和强大的Windows应用...

    精典源码Delphi149:Delphi技巧源码合集一.rar

    4. **数据库集成**:Delphi提供了强大的数据库支持,如ADO(ActiveX Data Objects)和FireDAC(Firebird Database Access Components)。通过查看源码,我们可以了解如何连接数据库,执行SQL查询,以及如何使用数据...

    Access-data-typein.zip_delphi access_uitdata

    Delphi通常使用ADO组件来连接和操作Access数据库。这包括TADOConnection、TADOCommand、TADOQuery、TADODataset等。TADOConnection负责建立与数据库的连接,TADOCommand则用于执行SQL命令,而TADODataset则作为数据...

    Report Machine的delphi Access最实用实例

    对于初学者而言,这是一个极好的实践项目,可以深入理解Delphi与数据库集成的技巧。 首先,让我们了解Delphi。Delphi是一款强大的对象 Pascal编程工具,以其快速应用开发(RAD)而闻名。它提供了直观的可视化设计...

    Delphi2006 BS程序设计技巧集 (50-51)

    从提供的压缩包文件来看,"Delphi2005 BS程序设计技巧集(50-51).doc"可能是文档形式的教程,包含了具体的操作步骤和案例分析;"www.delphifans.com.nfo"可能是网站或论坛的介绍文件,可能提供更多的学习资源和社区...

    Delphi 唐诗三百首

    在Delphi中,开发者可能使用ADO(ActiveX Data Objects)组件来连接和操作Access数据库,如TADOConnection、TADOQuery、TADODataset等。这些组件使得在Delphi中执行SQL语句、填充数据集以及更新数据库变得直观且方便...

    Delphi收藏夹程序Access数据库..rar

    综上所述,"Delphi收藏夹程序Access数据库"的项目涵盖了Delphi的数据库编程基础,包括数据库连接、查询操作、用户界面设计以及错误处理等方面的知识。这样的程序适合于需要管理和处理结构化数据的桌面应用程序。如果...

    delphi错误提示查询

    1. **基础知识**:首先,它会介绍Delphi中ADO组件的基本用法,包括如何创建连接字符串、打开数据库连接、执行SQL命令以及处理数据集。这部分将涉及ADO命名空间、Connection、Command和Recordset对象的使用。 2. **...

    DelphiSQL判断ACCESS2007数据表是否存在共

    在Delphi中,我们可以使用ADO(ActiveX Data Objects)组件或者DBExpress框架来连接和操作ACCESS数据库。 要判断ACCESS数据库中的数据表是否存在,我们通常会使用SQL的`IF EXISTS`或`SELECT`语句配合`INFORMATION_...

    DELPHI技巧集

    ### DELPHI技巧集:数据库操作相关知识点 #### 一、解决ADOConnection的断开问题 在使用Delphi开发基于Access数据库的应用时,经常会遇到ADOConnection连接问题,尤其是在需要频繁断开连接的情况下。 **问题描述**...

    仓库管理系统+ACCESS

    通过设计和实施学生信息管理系统,开发者可以提升对.NET框架的理解,掌握C#语言的基础知识和面向对象编程技巧,同时增强数据库应用开发的能力。在实际操作中,系统应具有良好的用户体验,界面直观,操作简便,确保...

    Delphi XE10.3 中文学习手册(ObjectPascal语言手册 )

    手册会介绍ADO(ActiveX Data Objects)和FireDAC(Firebird Direct Access)数据访问组件,讲解如何连接数据库、执行SQL语句、处理结果集以及实现数据绑定。此外,还会涉及ORM(对象关系映射)工具,如dBExpress和...

    基于Delphi的图书管理系统

    通过学习和理解这个系统,开发者不仅可以掌握Delphi与数据库的交互技巧,还能了解到如何设计和实现一个完整的管理信息系统。同时,良好的代码注释和模块化设计也是软件开发中值得借鉴的最佳实践。

    Delphi 《学生管理》程序实例

    《Delphi 学生管理》程序实例是一款基于Delphi编程环境和Access数据库设计的数据维护应用。这个实例适合初学者学习,旨在帮助理解如何在Delphi中实现简单的数据库操作,包括数据的添加、删除、修改和查询。以下是该...

Global site tag (gtag.js) - Google Analytics