|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
“MySQL实际上是一个数据库家族,你可以从选择一个并将其配置成可以满足你的大多数情况,”开源顾问公司Ethiqa的总裁如此表示,“因此,你可以在开始的时候选择一个小巧的版本产品,以后再根据需要来对其进行性能或大小上的扩展。”1.DELPHI中操纵ACCESS数据库(创建.mdb文件,紧缩数据库)
以下代码在WIN2K,D6,MDAC2.6下测试经由过程,
编译好的程序在WIN98第二版无ACCESS情况下运转乐成.
//在之前usesComObj,ActiveX
//声明毗连字符串
Const
SConnectionString=Provider=Microsoft.Jet.OLEDB.4.0;DataSource=%s;
+JetOLEDB:DatabasePassword=%s;;
//=============================================================================
//Procedure:GetTempPathFileName
//Author:ysai
//Date:2003-01-27
//Arguments:(None)
//Result:string
//=============================================================================
functionGetTempPathFileName():string;
//获得一时文件名
var
SPath,Sfile&:array[0..254]ofchar;
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
//=============================================================================
functionCreateAccessFile(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
//=============================================================================
functionCompactDatabase(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
//=============================================================================
functionChangeDatabasePassword(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语句在ACCESSXP的查询中测试经由过程
建表:
CreateTableTab1(
IDCounter,
Namestring,
Ageinteger,
[Date]DateTime);
技能:
自增字段用Counter声明.
字段名为关头字的字段用方括号[]括起来,数字作为字段名也可行.
创建索引:
上面的语句在Tab1的Date列上创建可反复索引
CreateIndexiDateONTab1([Date]);
完成后ACCESS中字段Date索引属性显现为-有(有反复).
上面的语句在Tab1的Name列上创建不成反复索引
CreateUniqueIndexiNameONTab1(Name);
完成后ACCESS中字段Name索引属性显现为-有(无反复).
上面的语句删除方才创建的两个索引
DropIndexiDateONTab1;
DropIndexiNameONTab1;
ACCESS与SQLSERVER中的UPDATE语句对照:
SQLSERVER中更新多表的UPDATE语句:
UPDATETab1
SETa.Name=b.Name
FROMTab1a,Tab2b
WHEREa.ID=b.ID;
一样功效的SQL语句在ACCESS中应当是
UPDATETab1a,Tab2b
SETa.Name=b.Name
WHEREa.ID=b.ID;
即:ACCESS中的UPDATE语句没有FROM子句,一切援用的表都列在UPDATE关头字后.
上例中假如Tab2能够不是一个表,而是一个查询,例:
UPDATETab1a,(SelectID,NameFromTab2)b
SETa.Name=b.Name
WHEREa.ID=b.ID;
会见多个分歧的ACCESS数据库-在SQL中利用In子句:
Selecta.*,b.*FromTab1a,Tab2bIndb2.mdbWherea.ID=b.ID;
下面的SQL语句查询出以后数据库中Tab1和db2.mdb(以后文件夹中)中Tab2以ID为联系关系的一切纪录.
弱点-内部数据库不克不及带暗码.
增补:看到ugvanxk在一贴中的回复,能够用
Select*from[c:aaa.mdb;pwd=1111].table1;
ACCESSXP测试经由过程
在ACCESS中会见别的ODBC数据源
下例在ACCESS中查询SQLSERVER中的数据
SELECT*FROMTab1IN[ODBC]
[ODBC;Driver=SQLServer;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_MACHINESOFTWAREODBCODBCINST.INI
中找到
异构数据库之间导数据拜见碧血剑的
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1691966
ACCESS撑持子查询
ACCESS撑持外毗连,但不包含完全内部连接,如撑持
LEFTJOIN或RIGHTJOIN
但不撑持
FULLOUTERJOIN或FULLJOIN
ACCESS中的日期查询
注重:ACCESS中的日期工夫分开符是#而不是引号
Select*FromTab1Where[Date]>#2002-1-1#;
在DELPHI中我如许用
SQL.Add(Format(
Select*FromTab1Where[Date]>#%s#;,
[DateToStr(Date)]));
ACCESS中的字符串能够用双引号分开,但SQLSERVER不认,以是为了迁徙便利和兼容,
倡议用单引号作为字符串分开符.
MySQL的支持者们却认为,MySQL所保留的功能都是精华,并且是你部署、MySQL学习教程配置和维护这个数据库所必不可少的一些功能。 |
|