Go homepage(回首页) Upload pictures (上传图片) Write articles (发文字帖)
The author:(作者)aaapublished 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 dobegincose;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、doube、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') thenistBox1.Items.Add(Trim(EDfied.Text)+' '+CBXtype.Text)eseistBox1.Items.Add(Trim(EDfied.Text)+' '+CBXtype.Text+'('+EDength.Text+')');end;调用自定义过程createsq,并动态创建数据表。procedure TFrmCreateTB.BtnCreateCick(Sender: TObject);beginWith AQCreateTB dobeginCose;Sq.Cear;sq.Add('Create Tabe '+EdName.Text+' '); //用SQ语句Create Tabe创建数据表createsq; //自定义过程,用于获取SQ语句形式的字段信息Execsq;end;end;自定义过程createsq用于获取数据表中的字段信息procedure TFrmCreateTB.createsq;beginWith AQCreateTB do //将TistBox组件中所保存的字段信息转换成SQ语句beginSq.Add('(');for i:=0 to istBox1.Items.Count-1 dobeginif i <> istBox1.Items.Count-1 thensq.Add(istBox1.Items.Strings[i]+',')esesq.Add(istBox1.Items.Strings[i]);end;Sq.Add(')');end;end;
赞