仓酷云

标题: MYSQL网页设计在Delphi中的Access技能集 [打印本页]

作者: 再现理想    时间: 2015-1-16 22:26
标题: MYSQL网页设计在Delphi中的Access技能集
“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学习教程配置和维护这个数据库所必不可少的一些功能。
作者: 只想知道    时间: 2015-1-18 07:36
入门没那么困难,精通没那么容易
作者: 小妖女    时间: 2015-1-21 12:57
理解了存储结构,再阅读下性能优化的章节基本上会对sqlserver有个清晰地认识
作者: 不帅    时间: 2015-1-30 18:41
记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。
作者: admin    时间: 2015-2-6 15:04
分区表是个亮点!从分区表也能看出微软要做大作强SQLServer的信心。资料很多,这里不详细说。但是重点了解的是:现在的SQLServer2005的表,都是默认为分区表的。因为它要支持滑动窗口的这个特性。这种特性对历史数据和实时数据的处理是很有帮助的。
作者: 小女巫    时间: 2015-2-16 18:49
很多书籍啊,不过个人认为看书太慢,还不如自己学。多做实际的东西,就会遇到很多问题,网上搜下解决问题。不断重复这个过程,在配合sql的F1功能。
作者: 透明    时间: 2015-3-5 08:22
作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!
作者: 爱飞    时间: 2015-3-12 02:08
习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。
作者: 因胸联盟    时间: 2015-3-19 17:33
这是一个不错的新特性。虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。我做过试验,在我的实验环境中会比映射到表中提高30%左右的效率。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2