📄 initdbunit.pas
字号:
unit initDBUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, cxLookAndFeelPainters, StdCtrls, cxButtons, cxTextEdit,
cxControls, cxContainer, cxEdit, cxLabel, ExtCtrls, DB, ADODB,registry;
const
ChargeItem: array[1..6] of String = ('学费', '住宿', '书费', '保险', '生活用品', '保证金');
Scholar:array [1..5] of String=('高职', '自考', '自开', '中专', '五年一贯制');
type
TInitDBform = class(TForm)
Panel1: TPanel;
cxLabel1: TcxLabel;
cxLabel2: TcxLabel;
cxLabel3: TcxLabel;
cxLabel4: TcxLabel;
cxButton1: TcxButton;
cxButton2: TcxButton;
pass_Edit: TEdit;
dbname_edit: TEdit;
servername_Edit: TEdit;
account_edit: TEdit;
ADOQuery1: TADOQuery;
cxButton3: TcxButton;
procedure cxButton1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure cxButton3Click(Sender: TObject);
private
{ Private declarations }
public
end;
var
InitDBform: TInitDBform;
implementation
uses DMUnit;
{$R *.dfm}
procedure TInitDBform.cxButton1Click(Sender: TObject);
var
wpath:string;
Registry: TRegistry;
i:integer;
begin
WPath := ExtractFilePath(Application.ExeName);
if trim(servername_Edit.Text )='' then
begin
MessageBox(application.handle,pchar('服务器名称没有填写!'),'错误',MB_ICONWARNING+MB_OK);
servername_Edit.SetFocus;
exit;
end;
if trim(account_edit.Text )='' then
begin
MessageBox(application.handle,pchar('登录帐户没有填写!'),'错误',MB_ICONWARNING+MB_OK);
account_edit.SetFocus ;
exit;
end;
if trim(dbname_edit.Text )='' then
begin
MessageBox(application.handle,pchar('数据库名没有填写!'),'错误',MB_ICONWARNING+MB_OK);
dbname_edit.SetFocus ;
exit;
end;
dm.ADOConnection.ConnectionString:='Provider=SQLOLEDB.1;Password='+trim(pass_edit.Text )+';Persist Security Info=True;User ID='+trim(account_edit.Text )+';Data Source='+trim(servername_edit.Text );
try
dm.ADOConnection.Open;
except
MessageBox(application.handle,pchar('无法登录指定数据库,请检查登录信息'),'错误',MB_ICONWARNING+MB_OK);
exit;
end;
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('CREATE DATABASE ' +trim(dbname_edit.Text ));
try
ExecSQL ;
except
MessageBox(application.handle,pchar('无法创建数据库,请检查该数据库名称是否已存在!'),'错误',MB_ICONWARNING+MB_OK);
dm.ADOConnection.Close;
exit;
end;
end;
with adoquery1 do
begin
dm.ADOConnection.BeginTrans ;
try
close;
sql.Clear;
sql.Add('use '+trim(dbname_edit.Text ));
execsql;
//创建数据库
close;
sql.Clear ;
sql.Add('CREATE TABLE [dbo].[ChargeItem] (');
sql.Add('[id] [int] IDENTITY (1, 1) NOT NULL ,');
sql.Add(' [ChargeName] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL');
sql.Add(') ON [PRIMARY]');
ExecSQL ;
close;
sql.Clear ;
sql.Add('CREATE TABLE [dbo].[Decrease] ([ID] [int] IDENTITY (1, 1) NOT NULL ,[StudentId] [bigint] NOT NULL ,');
sql.Add(' [ChargeRangeId] [int] NOT NULL ,[StudyYear] [tinyint] NOT NULL ,[ChargeItemId] [int] NOT NULL ,[Quantum] [money] NOT NULL ,');
sql.Add(' [Receive] [money] NOT NULL ,[DecreaseName] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,');
sql.Add(' [DecreaseNum] [money] NOT NULL ,[DecreaseCode] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,');
sql.Add(' [RegDate] [datetime] NOT NULL ,[Operator] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL) ON [PRIMARY]');
ExecSQL ;
close;
sql.Clear;
sql.Add('CREATE TABLE [dbo].[Department] (');
sql.Add(' [id] [int] IDENTITY (1, 1) NOT NULL ,');
sql.Add(' [ScholarId] [int] NOT NULL ,');
sql.Add(' [Department] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL) ON [PRIMARY]');
ExecSQL ;
close;
sql.Clear;
sql.Add('CREATE TABLE [dbo].[EditReg] ([ID] [int] IDENTITY (1, 1) NOT NULL ,[StudentId] [bigint] NOT NULL ,');
sql.Add(' [ChargeRangeId] [int] NOT NULL ,[StudyYear] [tinyint] NOT NULL ,[ChargeItemId] [int] NOT NULL ,[Quantum] [money] NOT NULL ,');
sql.Add(' [Receive] [money] NOT NULL,[BillCode] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,');
sql.Add(' [ReceType] [tinyint] NOT NULL ,[RegDate] [datetime] NOT NULL ,[Operator] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL) ON [PRIMARY]');
ExecSQL ;
close;
sql.Clear;
sql.Add('CREATE TABLE [dbo].[FirstReg] ([ID] [int] IDENTITY (1, 1) NOT NULL ,[StudentID] [bigint] NOT NULL ,');
sql.Add(' [ChargeRangeID] [int] NOT NULL ,[StudyYear] [tinyint] NOT NULL ,[ChargeItemId] [int] NOT NULL ,[Quantum] [money] NOT NULL ,');
sql.Add(' [Fact] [money] NOT NULL ,[BillCode] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,[ReceType] [tinyint] NOT NULL ,');
sql.Add(' [RegDate] [datetime] NOT NULL ,[Operator] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL) ON [PRIMARY]');
ExecSQL ;
close;
sql.Clear;
sql.Add('CREATE TABLE [dbo].[Income] ([StudentID] [bigint] NOT NULL ,[ChargeRangeID] [int] NOT NULL ,');
sql.Add(' [StudyYear] [tinyint] NOT NULL ,[ChargeItemId] [int] NOT NULL ,[Quantum] [money] NOT NULL ,');
sql.Add(' [Fact] [money] NOT NULL ,[Derate] [money] NOT NULL ,[DerateName] [varchar] (255) COLLATE Chinese_PRC_CI_AS NOT NULL ,');
sql.Add(' [ReturnNum] [money] NOT NULL ,[ReturnName] [varchar] (255) COLLATE Chinese_PRC_CI_AS NOT NULL) ON [PRIMARY]');
ExecSQL ;
close;
sql.Clear;
sql.Add('CREATE TABLE [dbo].[ReturnDetail] ([Id] [int] IDENTITY (1, 1) NOT NULL ,[StudentId] [bigint] NOT NULL ,[ChargeRangeId] [int] NOT NULL ,');
sql.Add(' [StudyYear] [tinyint] NOT NULL ,[ChargeItemId] [int] NOT NULL ,[Quantum] [money] NOT NULL ,');
sql.Add(' [Receive] [money] NOT NULL ,[ReturnNum] [money] NOT NULL ,[ReturnName] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,');
sql.Add(' [ReturnCode] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,[RegDate] [datetime] NOT NULL ,[Operator] [varchar] ( 10) COLLATE Chinese_PRC_CI_AS NOT NULL) ON [PRIMARY]');
ExecSQL ;
close;
sql.Clear;
sql.Add('CREATE TABLE [dbo].[Scholar] (');
sql.Add(' [id] [int] IDENTITY (1, 1) NOT NULL ,');
sql.Add(' [Scholar] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL');
sql.Add(') ON [PRIMARY]');
ExecSQL ;
close;
sql.Clear;
sql.Add('CREATE TABLE [dbo].[Spec] (');
sql.Add(' [id] [int] IDENTITY (1, 1) NOT NULL ,');
sql.Add(' [ScholarId] [int] NOT NULL ,[DepartmentId] [int] NOT NULL ,');
sql.Add(' [Spec] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL) ON [PRIMARY]');
ExecSQL ;
close;
sql.Clear;
sql.Add('CREATE TABLE [dbo].[Student] (');
sql.Add(' [id] [bigint] NOT NULL ,[ChargeYearID] [int] NOT NULL ,[StudentName] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,');
sql.Add(' [Code] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,[Sex] [tinyint] NOT NULL ,[ScholarID] [int] NOT NULL ,');
sql.Add(' [DepartmentID] [int] NOT NULL ,[SpecID] [int] NOT NULL ,[Length] [tinyint] NOT NULL ,[ClassCode] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,');
sql.Add(' [Address] [varchar] (100) COLLATE Chinese_PRC_CI_AS NOT NULL ,[Source] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,[Tutor] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,');
sql.Add(' [Circs] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,');
sql.Add(' [Memo] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,[RegDate] [datetime] NOT NULL ,[Operator] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL) ON [PRIMARY]');
ExecSQL ;
close;
sql.Clear;
sql.Add('ALTER TABLE [dbo].[ChargeItem] WITH NOCHECK ADD');
sql.Add(' CONSTRAINT [PK_ChargeItem] PRIMARY KEY CLUSTERED');
sql.Add(' ([id]) ON [PRIMARY]');
ExecSQL ;
close;
sql.Clear;
sql.Add('ALTER TABLE [dbo].[Decrease] WITH NOCHECK ADD ');
sql.Add(' CONSTRAINT [PK_Decrease] PRIMARY KEY CLUSTERED ');
sql.Add(' ([ID]) ON [PRIMARY]');
ExecSQL ;
close;
sql.Clear;
sql.Add('ALTER TABLE [dbo].[Department] WITH NOCHECK ADD');
sql.Add(' CONSTRAINT [PK_Department] PRIMARY KEY CLUSTERED ');
sql.Add(' ([id]) ON [PRIMARY]');
ExecSQL ;
close;
sql.Clear;
sql.Add('ALTER TABLE [dbo].[EditReg] WITH NOCHECK ADD');
sql.Add(' CONSTRAINT [PK_EditReg] PRIMARY KEY CLUSTERED ');
sql.Add(' ([ID]) ON [PRIMARY]');
ExecSQL ;
close;
sql.Clear;
sql.Add('ALTER TABLE [dbo].[FirstReg] WITH NOCHECK ADD');
sql.Add(' CONSTRAINT [PK_FirstReg] PRIMARY KEY CLUSTERED');
sql.Add(' ([ID]) ON [PRIMARY]');
ExecSQL ;
close;
sql.Clear;
sql.Add('ALTER TABLE [dbo].[Income] WITH NOCHECK ADD ');
sql.Add(' CONSTRAINT [PK_Income] PRIMARY KEY CLUSTERED');
sql.Add(' ([StudentID],[ChargeRangeID],');
sql.Add(' [ChargeItemId]) ON [PRIMARY]');
ExecSQL ;
close;
sql.Clear;
sql.Add('ALTER TABLE [dbo].[ReturnDetail] WITH NOCHECK ADD');
sql.Add(' CONSTRAINT [PK_ReturnDetail] PRIMARY KEY CLUSTERED');
sql.Add(' ([Id]) ON [PRIMARY]');
ExecSQL ;
close;
sql.Clear;
sql.Add('ALTER TABLE [dbo].[Scholar] WITH NOCHECK ADD ');
sql.Add(' CONSTRAINT [PK_Scholar] PRIMARY KEY CLUSTERED ');
sql.Add(' ([id]) ON [PRIMARY]');
ExecSQL ;
close;
sql.Clear;
sql.Add('ALTER TABLE [dbo].[Spec] WITH NOCHECK ADD ');
sql.Add(' CONSTRAINT [PK_Spec] PRIMARY KEY CLUSTERED');
sql.Add(' ([id]) ON [PRIMARY]');
ExecSQL ;
close;
sql.Clear;
sql.Add('ALTER TABLE [dbo].[Student] WITH NOCHECK ADD ');
sql.Add(' CONSTRAINT [PK_Student] PRIMARY KEY CLUSTERED ');
sql.Add(' ([id]) ON [PRIMARY]');
ExecSQL ;
//收费项目
close;
sql.Clear;
sql.Add('insert into ChargeItem (ChargeName) values (:ChargeName)');
if not Prepared then Prepared:=true;
close;
for i :=1 to 6 do
begin
close;
Parameters.ParamByName('ChargeName').Value :=ChargeItem[i];
ExecSQL ;
end;
if Prepared then Prepared:=false;
//学历类型
close;
sql.Clear;
sql.Add('insert into Scholar (Scholar) values (:Scholar)');
if not Prepared then Prepared:=true;
close;
for i :=1 to 5 do
begin
close;
Parameters.ParamByName('Scholar').Value :=Scholar[i];
ExecSQL ;
end;
if Prepared then Prepared:=false;
Registry := TRegistry.Create();
try
Registry.RootKey := HKEY_LOCAL_MACHINE;
Registry.OpenKey('software\Manage', true);
registry.WriteString('servername',trim(servername_Edit.Text ));
registry.WriteString('accountname',trim(account_edit.Text ));
registry.WriteString('passname',trim(pass_edit.Text ));
registry.WriteString('dbname',trim(dbname_edit.Text ));
finally
freeandnil(registry);
end;
MessageBox(application.handle,pchar('数据库创建成功,请重新启动应用程序!'),'信息',MB_ICONWARNING+MB_OK);
dm.ADOConnection.CommitTrans ;
except
dm.ADOConnection.RollbackTrans ;
MessageBox(application.handle,pchar('无法创建数据表,请检查数据表是否已经存在!'),'错误',MB_ICONWARNING+MB_OK);
dm.ADOConnection.Close;
exit;
end;
end;
ModalResult :=mrok;
end;
procedure TInitDBform.FormCreate(Sender: TObject);
var
Registry: TRegistry;
server,account,pass,db:String;
begin
Registry := TRegistry.Create();
try
Registry.RootKey := HKEY_LOCAL_MACHINE;
if Registry.OpenKey('software\Manage', False) then
begin
server:=registry.ReadString('servername');
account:=registry.ReadString('accountname');
pass:=registry.ReadString('passname');
db:=registry.ReadString('dbname');
dm.ADOConnection .close;
dm.ADOConnection.ConnectionString:='Provider=SQLOLEDB.1;Persist Security Info=False;User ID='+trim(account)+';Initial Catalog='+trim(db)+';Data Source='+trim(server)+';Password='+trim(pass);
end
else self.ShowModal;
finally
freeandnil(registry);
end;
end;
procedure TInitDBform.cxButton3Click(Sender: TObject);
var
wpath:string;
Registry: TRegistry;
begin
WPath := ExtractFilePath(Application.ExeName);
if trim(servername_Edit.Text )='' then
begin
MessageBox(application.handle,pchar('服务器名称没有填写!'),'错误',MB_ICONWARNING+MB_OK);
servername_Edit.SetFocus;
exit;
end;
if trim(account_edit.Text )='' then
begin
MessageBox(application.handle,pchar('登录帐户没有填写!'),'错误',MB_ICONWARNING+MB_OK);
account_edit.SetFocus ;
exit;
end;
if trim(dbname_edit.Text )='' then
begin
MessageBox(application.handle,pchar('数据库名没有填写!'),'错误',MB_ICONWARNING+MB_OK);
dbname_edit.SetFocus ;
exit;
end;
dm.ADOConnection.ConnectionString:='Provider=SQLOLEDB.1;Password='+trim(pass_edit.Text )+';Persist Security Info=True;User ID='+trim(account_edit.Text )+';Data Source='+trim(servername_edit.Text )+';Initial Catalog='+trim(dbname_edit.Text );
try
dm.ADOConnection.Open;
except
MessageBox(application.handle,pchar('无法登录指定数据库,请检查登录信息'),'错误',MB_ICONWARNING+MB_OK);
exit;
end;
Registry := TRegistry.Create();
try
Registry.RootKey := HKEY_LOCAL_MACHINE;
Registry.OpenKey('software\Manage', true);
registry.WriteString('servername',trim(servername_Edit.Text ));
registry.WriteString('accountname',trim(account_edit.Text ));
registry.WriteString('passname',trim(pass_edit.Text ));
registry.WriteString('dbname',trim(dbname_edit.Text ));
finally
freeandnil(registry);
end;
MessageBox(application.handle,pchar('数据库连接保存成功,请重新启动应用程序!'),'信息',MB_ICONINFORMATION+MB_OK);
ModalResult :=mrok;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -