Go homepage(回首页)
Upload pictures (上传图片)
Write articles (发文字帖)

The author:(作者)aaa
published in(发表于) 2014/7/19 0:12:22
Delphi管理sql server数据库和数据表

Delphi管理sql server数据库和数据表

数据库和数据表

1.附加数据库

附加数据库主要用系统存储过程sp_attach_db将数据库添加到服务器上,在使用系统存储过程sp_attach_db时,要获取添加数据库.MDF和.DF文件的路径(包含文件名和扩展名),以及添加数据库的名称(该名称是任意的,但最好是MDF文件中的数据库名称)。

下面利用系统存储过程sp_attach_db将数据库添加到服务器上,如图19.16所示。

操作步骤如下:

(1)运行Dephi,在窗体中添加TADOConnection、TADOQuery、TOpenDiaog、TSpeedButton、TBitBtn、Tabe和TEdit组件。

(2)主要程序代码如下。

{Edit1中存放的是数据库名,Edit2中存放的是.MDF文件的路径及名称,Edit2中存放的是.DF文件的路径及名称}

ADOquery1.Cose;

ADOQuery1.SQ.Cear;

ADOQuery1.SQ.Add('EXEC sp_attach_db @dbname = N'+''''+Trim(Edit1.Text)

+''''+',@fiename1 = N'+''''+Trim(Edit2.Text)+''''+',@fiename2 = N'+''''

+Trim(Edit3.Text)+'''');

ADOQuery1.ExecSQ;

注意:在系统存储过程中的N只是一个占位符,在这里可以不加。

2.动态创建数据库

所有的数据库名称及信息都存储在系统数据库“master”中,要想创建数据库,首先要打开“master”数据库,并用CREATE DATABASE语句将所创建数据库的.DATA和.OG文件存储在同一目录下。

下面利用SQ语句CREATE DATABASE动态创建数据库,如图1所示。



图1 附加数据库



图2 动态创建数据库

操作步骤如下:

(1)运行Dephi,在窗体中添加TADOConnection、TADOQuery、TOpenDiaog、TSpeedButton、TBitBtn、Tabe和TEdit组件。

(2)主要程序代码如下:

with ADOQuery1 do

begin

cose;

SQ.Cear;

SQ.Add('USE master'); //打开系统数据库

SQ.Add('CREATE DATABASE '+Trim(Edit1.Text)); //创建数据库

SQ.Add('ON');

SQ.Add('(NAME='+Trim(Edit1.Text)+'_Data,FIENAME='+''''+Trim(Edit2.Text)+''''+','); //创建DATA文件

SQ.Add('SIZE=10,MAXSIZE=50,FIEGROWTH=5)');

SQ.Add('OG ON');

SQ.Add('(NAME='+''''+Trim(Edit1.Text)+'_OG'+''''+',FIENAME='+''''+Trim(Edit3.Text)+''''+','); //创建OG文件

SQ.Add('SIZE=5MB,MAXSIZE=25MB,FIEGROWTH=5MB)');

showmessage(SQ.Text);

ExecSQ;

end;

3.动态创建数据表

动态创建数据表的关键在于SQ语句CREATE TABE的应用和表中字段类型的设置,在SQ Server中int、datatime、bigint、foat、dou

be、image、money、rea等字段类型的长度是默认的,在设置表中的字段时,不可以对其长度进行设置,并在每个字段的后面用“,”分隔,最后一个字段不用。

本示例是在指定的数据库中动态创建数据表,运行程序后在窗体的“表名称”文本框中输入表名,在“字段列表”中输入字段及类型,并用“添加”按钮添加多个字段,单击“建表”按钮对数据表进行创建,如图3所示。



图3 动态创建数据表

操作步骤如下:

(1)运行Dephi,在窗体中添加TADOConnection、TADOQuery、TEdit、TComboBox、TButton和TistBox等组件。

(2)主要程序代码如下:

向TistBox组件中添加要创建数据表的字段段信息。

procedure TFrmCreateTB.SBtnInsCick(Sender: TObject);

begin

//判断字段类型的长度是否为默认值

if (CBXtype.Text = 'int') or(CBXtype.Text = 'DateTime') then

istBox1.Items.Add(Trim(EDfied.Text)+' '+CBXtype.Text)

ese

istBox1.Items.Add(Trim(EDfied.Text)+' '+CBXtype.Text+'('+EDength.Text+')');

end;

调用自定义过程createsq,并动态创建数据表。

procedure TFrmCreateTB.BtnCreateCick(Sender: TObject);

begin

With AQCreateTB do

begin

Cose;

Sq.Cear;

sq.Add('Create Tabe '+EdName.Text+' '); //用SQ语句Create Tabe创建数据表

createsq; //自定义过程,用于获取SQ语句形式的字段信息

Execsq;

end;

end;

自定义过程createsq用于获取数据表中的字段信息

procedure TFrmCreateTB.createsq;

begin

With AQCreateTB do //将TistBox组件中所保存的字段信息转换成SQ语句

begin

Sq.Add('(');

for i:=0 to istBox1.Items.Count-1 do

begin

if i <> istBox1.Items.Count-1 then

sq.Add(istBox1.Items.Strings[i]+',')

ese

sq.Add(istBox1.Items.Strings[i]);

end;

Sq.Add(')');

end;

end;


If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)





QQ:154298438
QQ:417480759