DELPHI中操作ACCESS数据库

Delphi初学实践(五) 创建数据库公用页面的目的,不仅仅是数据库链接控件公用,也建议将数据库查询等控件(query、table)放到此页面。另外,强烈建议增加几个通用查询控件(query_common),因为在生产过程中,经常会临时查询某数据信息、或者修改某数据信息,为其单独添加控件会极大的影响后期运维、及系统升级工作。C 如果用户在工作页面(非数据库公用页面)添加数据库操作控件(query、table),则需要先引用该Form,才能在Connection处选择到数据。再重新开始数据库链接设置。 阅读详情
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数据库中OLE对象的读写操作(论文) 分析了Access数据库OLE 对象的特点,并给 出了在 Delphi环境下实际实现OLE对 象的保存\打 开与显示的处理方法(A ccess 数 据库 中 O LE 对象 的读 写操 作 许 俊 论文) 立即下载

相关推荐

Delphi操作SQLSERVER数据库动态增加字段

Delphi操作SQLSERVER数据库动态增加字段

Delphi操作ACCESS技巧集

1.DELPHI中操作ACCESS数据库(建立.mdb文件,压缩数据库)以下代码在WIN2K,D6,MDAC2.6下测试通过,编译好的程序在WIN98第二版无ACCESS环境下运行成功.//在之前uses ComObj,ActiveX//声明连接字符串Const SConnectionString       = Provider=Microsoft.Jet.OLEDB.4.0;Data Sou

cwxiao888的专栏 1256

delphi7操作数据库之Access完整实例

delphi7操作数据库之Access完整实例

Delphi连接带密码的Access数据库

Delphi下连接不带密码的Access数据库,比较简单,只需按照adoconnection中的connectstring属性一路设下去,测试成功后将build前的那段拷出来再做程序适应性修改。2、在“所有”这页的框里的第六项 Jet OLEDB:Database Password,双击弹出对话框,在属性框中输入"密码"。在网上搜索了一下,遇到的这个问题的朋友还真多,光csdn上就不少问的,但是没有出现能解决问题的方法。好了,如果你的密码输入正确,测试应该就通过了。

solo2me的专栏 820

Verilog实战:手把手教你实现IEEE 754单精度浮点乘法器(附完整代码)

本文详细介绍了如何使用Verilog实现IEEE 754单精度浮点乘法器,包括标准解析、架构设计、Verilog代码实现及优化技巧。通过两级流水线设计,平衡性能与面积,适用于数字信号处理、AI加速器等高性能计算场景。

weixin_33724046的博客 314

STM32 SAI接口TDM模式实战:8通道音频采集系统搭建全流程(附DMA配置代码)

本文详细介绍了基于STM32 SAI接口TDM模式搭建8通道音频采集系统的全流程。内容涵盖硬件连接设计、CubeMX时钟树与SAI外设的详细配置,并重点解析了TDM模式的核心代码实现与DMA双缓冲机制,提供了完整的配置代码和常见时序问题排查指南,助力开发者高效实现多通道音频传输与处理。

weixin_29192211的博客 505

delphi 中操作access数据库的几个函数。

unit U_AccessFun;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  ADODB, DB, ComObj, ActiveX;const  con_LocalDBFile  = ptdb.mdb;  con_LocalDBPSW   = Lmi

jl820712的专栏 1857

NE555构成多谐振荡器及三角波、正弦波的生成(附工程文件)

NE555构成多谐振荡器及三角波、正弦波的生成 续上一篇:NE555基本原理及相关公式的推导

qq_49979053的博客 5万+

Delphi之通过ADOX操作access数据库

[学习笔记]Delphi之通过ADOX操作access数据库作者:webfly 日期:2005-04-06字体大小: 小 中 大 作者:扬帆   网站: Email:888fly@163.com   如转载请保留此版权信息   Delphi7支持ADO(Microsoft ActiveX Data Objects)的支持,使得Delphi程序员可以彻底摆脱BDE,缩小

yanleigis的专栏 2464

安川机器人SOCKET 通讯

命令 功能 参数 示例 返回 SelectJob 选择程序 JobName LineNo SelectJob TEST 0 #SelectJob,Ok StartJob 启动程序 JobName StartJob TEST #StartJob,Ok Pause 暂停当前程序 - Pause #Pause,Ok Continue 继续当前程序 - Continue #Continue,Ok ServoOn 伺服上电 - ServoOn #ServoOn,Ok ServoOf...

记录学习内容 8285

遥感大模型之Prithvi的关键技术解读

Prithvi系列模型开创了遥感领域基础模型新范式,通过海量多源时空数据(HLS和SAR)与Vision Transformer架构的深度融合,采用掩码自编码器进行自监督预训练,实现了强大的地球观测表征能力。该技术体系突破传统方法在全局建模、多模态融合和时空分析上的局限,仅需少量标注数据即可在土地分类、灾害监测等任务上取得优异表现。从初代3亿参数到Prithvi-EO-2.0的10亿参数升级,展现了模型可扩展性,为构建地球数字孪生智能基座奠定基础。

panshengwu的博客 866

delphi 对 access 数据库的操作如何完成?

我现利用delphi 的ADO对ACCESS数据库进行操作,但是能够与其进行连接,但是就是不晓得如何对期进行操作,我是新手,请高手赤脚。。。。。

wulingting的专栏 1071

软件测试——白盒测试实验报告,输入年月日算星期几

软件测试——白盒测试实验报告,输入年月日算星期几,测试用例设计和结果展示

weixin_52278161的博客 2746

Delphi之通过ADOX操作access数据库的方法

Delphi7支持ADO(Microsoft ActiveX Data Objects)的支持,使得Delphi程序员可以彻底摆脱BDE,缩小软件分发的体积。但是Delphi的ADO组件不支持ActiveX Data Objects Extensions for Data Definition Language and Security(ADOX、ADO的扩展,用于创建、修改和删除模式对象,如表格

jsrgren 594

PotPlayer终极画质调校:深入MadVR渲染器设置,让你的显示器发挥100%潜力

本文深入探讨了如何通过MadVR渲染器优化PotPlayer的画质设置,充分发挥高端显卡和显示器的潜力。从色彩空间匹配、色深优化到HDR元数据处理,提供了一套完整的配置指南,帮助用户实现影院级视觉体验。特别适合拥有NVIDIA RTX或AMD RX系列显卡的用户进行精细调校。

weixin_42530458的博客 600

PyTorch深度学习实战(6)——神经网络性能优化技术

神经网络性能优化技术是指通过改进神经网络的结构、参数初始化、正则化和训练过程等方面来提高其性能和泛化能力的方法。优化技术的选择和调试需要根据具体问题进行,通过不断实验和调整,找到最适合网络的优化策略。本节首先训练了一个简单的全连接网络,然后在此基础上介绍了简单有效的神经网络性能提升技巧。

盼小辉丶的博客 1万+

DELPHI操作ACCESS数据库(两种方式噢)dataset与table

unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ADODB, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3:

清风古韵 1272

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

上一篇: [并非笑话]当Borland的工程师向微软寻求技术支持时
下一篇: 女人的话中话(英文版),供男生参考哦
SafeF8
博客等级 码龄22年 10粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值