《Oracle数据库开发》报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
一、实践名称 (1)
二、实践题目 (1)
三、实践目的 (1)
四、实践内容与结果 (1)
1、Oracle数据库的基本操作 (1)
2、简单Visual Basic访问Oracle数据库 (15)
3、VB/Oracle学生成绩管理系统 (20)
五、实践小结 (33)
《Oracle数据库开发》实训报告一、实践名称
ORACLE数据库开发
二、实践题目
1、Oracle数据库的基本操作
2、简单Visual Basic访问Oracle数据库
3、VB/Oracle学生成绩管理系统
三、实践目的
1、初步掌握Oracle关系数据库语言
2、掌握Oracle的操作与使用
3、数据库的建立与管理、数据表的建立与操作等
4、PL/SQL语言的使用与编程
5、设计和开发一个小型数据库应用系统
四、实践内容与结果
1、Oracle数据库的基本操作
(1)创建数据库与表
首先,创建数据库,步骤如图所示:
紧接着创建表,进入SQLPlus Worksheet ,执行以下命令,结果如图 创建账号
CREATE USER "GL_0911030201_HONGDJ" PROFILE "DEFAULT"
IDENTIFIED BY "HONGDINGJIN" DEFAULT TABLESPACE "USERS" ACCOUNT UNLOCK;
GRANT "CONNECT" TO "GL_0911030201_HONGDJ"; GRANT "DBA" TO "GL_0911030201_HONGDJ"; 1、创建部门表
CREATE TABLE "GL_0911030201_HONGDJ"."DEPARTMENTS" ("DEPARTMENTID"
CHAR(3) NOT NULL, "DEPARTMENTNAME" CHAR(20) NOT NULL, "NOTE"
CHAR(16), PRIMARY KEY("DEPARTMENTID"));
2、创建员工表
CREATE TABLE "GL_0911030201_HONGDJ"."EMPLOYEES" ("EMPLOYEEID"
CHAR(6) NOT NULL, "NAME" CHAR(10) NOT NULL, "BIRTHDAY" DATE NOT NULL, "SEX" NUMBER(1) NOT NULL, "ADDRESS" CHAR(20), "ZIP" CHAR(6), "PHONENUMBER" CHAR(12), "EMAILADDRESS" CHAR(30) NULL, "DEPARTMENTID" CHAR(3) NOT NULL, PRIMARY KEY("EMPLOYEEID"), FOREIGN KEY("DEPARTMENTID") REFERENCES "GL_0911030201_HONGDJ"."DEPARTMENTS"("DEPARTMENTID"));
3、创建工资表
CREATE TABLE "GL_0911030201_HONGDJ"."SALARY" ("EMPLOYEEID" CHAR(6) NOT NULL, "INCOME" NUMBER(8, 2) NOT NULL, "OUTCOME" NUMBER(8, 2) NOT NULL, PRIMARY KEY("EMPLOYEEID")) ;
(2)表数据的插入、修改和删除
在SQLPlus Worksheet执行如下命令,结果如图
1、插入部门表数据
INSERT INTO "GL_0911030201_HONGDJ"."DEPARTMENTS" ("DEPARTMENTID" ,"DEPARTMENTNAME" ,"NOTE" ) VALUES ('1' ,'财务部' ,'' );
……
2、插入职工表数据
INSERT INTO "GL_0911030201_HONGDJ"."EMPLOYEES" ("EMPLOYEEID" ,"NAME" ,"BIRTHDAY" ,"SEX" ,"ADDRESS" ,"ZIP" ,"PHONENUMBER" , "EMAILADDRESS" ,"DEPARTMENTID" )
V ALUES ('000001' ,'王林' ,'23-1月-1956' ,1 ,'中山路32-1-508' ,'210003' ,'3355668' ,'wl@' ,'2' );
……
3、插入工资表数据
INSERT INTO "GL_0911030201_HONGDJ"."SALARY" ("EMPLOYEEID" ,"INCOME" ,"OUTCOME" ) V ALUES ('000001' ,2100.8 ,123.09 );
……
(3)索引和完整性
在执行如下命令,结果如图
1、建立索引
2、实现域完整性
1、SELECT语句的基本使用
(1)查找在财务部工作的雇员的情况
(2)查找财务部年龄不低于研发部雇员年龄的雇员的姓名
(1)查询每个雇员的情况及其薪水的情况
(2)查找财务部收入在2200元以上的雇员姓名及其薪水情况
4、数据汇总
(1)求财务部雇员的平均水平
(2)求财务部雇员的平均实际收入
5、GROUP BY、ORDER BY 子句的使用(1)求各部门的雇员数
(2)将各雇员的情况按收入由低到高排列
6、视图
(1)创建视图——限制查看雇员的某些情况
(2)使用视图
查询财务部雇员的信息
张无忌从经理办公室转到市场部
把张无忌从表EMPLOYEES中删除
(5)PL/SQL编程
1、条件结构的使用(例5.5)
2、循环结构的使用(例5.9)
3、选择和跳转语句(例5.13)
4、自定义函数的使用(例5.27)
例5.28
(6)存储过程和触发器的使用
1、创建触发器
(1)修改DEPARTMENTS表中的DEPARTMENTID字段值
(2)删除DEPARTMENTS表中一条记录的同时删除该记录DEPARTMENTID字段在EMPLOYEES表中对应的记录
2、创建存储过程
(1)添加职员记录的存储过程
(2)修改职员记录的存储过程
(3)删除职员记录的存储过程
3、调用存储过程
1、创建用户
2、创建角色
3、创建概要文件
2、简单Visual Basic访问Oracle数据库
首先是建立数据源,步骤如下:
(1)选择“开始”→“程序”→“管理工具”→“数据源”(ODBC)命令。
出现ODBC数据源管理器,在这里可以添加Oracle数据库的ODBC数据源。
(2)选择“系统DSN”选项卡,单击“添加”按钮,出现创建新数据源界
面,在“选择你想为其安装数据源的驱动程序”下拉列表里选择Microsoft ODBC
for Oracle,单击“完成”按钮。
(3)出现数据源设置界面,在“数据源名称”文本框里输入myoraclelink,在“用户名称”文本框里输入有权访问的用户名scott,在“服务器”文本框里输入数据库对应的服务名,这里的服务器是指通过Oracle连接工具建立的连接字符串,例如:domain。
单击“确定”按钮。
建立好的数据源如图所示,单击“确定”按钮后完成。
其次,利用Visual Basic控件开发数据库应用程序,实验步骤如下:
(1)进入Visual Basic,新建工程。
(2)出现第一个窗体(或称表单),在窗体的属性窗口里,设置“名称”为OracleSample,“Caption”属性为“职工信息”,存盘保存窗体文件和工程文件,注意保存在一个文件夹下。
(3) 将需要的数据库控件添加进来。
在菜单栏里选择“工程”→“部件”菜单命令,出现如图1所示的部件对话框,选中控件选项卡,在下拉列表框里单击选中Microsoft ADO Data Control 6.0(OLEDB),单击“确定”按钮。
图1
(4)单击选中“Genenal”工具箱里出现的ADODC控件,在表单任意位置按
住鼠标左键拖动出一个区域,出现ADODC控件,在该控件上用鼠标右键单击,在出现的快捷菜单里选择“ADODC”属性菜单命令,如图2所示。
图2
(5)出现图3所示的属性页对话框,在通用选项卡里有3种指定数据库的方式。
选择“使用ODBC数据资源名称”单选按钮,在下拉列表框里选择建立好的名为myoraclelinkl的数据源。
图3
(7)如图4所示为ADODC控件属性页的“身份验证”选项卡,在用户名称文本框里输入scott,在密码文本框里输入tiger。
图4
(8)如图5所示为ADODC控件属性页的“记录源”选项卡,在“命令类型”下拉列表框里有4种选项,选中adCmdTable,与数据库连接,连接成功后在“表或存储过程名称”下拉列表框里出现该用户下的数据表,选中emp,设置完毕后单击“确定”按钮。
图5
(9)在Visible的下拉列表框里选择False。
(10)在表单添加TextBox控件,名称:txtName,DataSource:ADODCl,DataField:ENAME。
(11)添加名为txtNo的TextBox控件,DataField:EmpNm。
添加名为textJob 的TextBox控件,DataField:JOB;添加名为textMgr的TextBox控件,DataField:MGR;添加Lable控件。
设计好的界面如下图所示。
图6
(12)添加CommandButton控件,名称:CmdFirst,Caption:“首记录”。
添加名为CmdPrevios的CommandButton控件,名称:CmdPrevios,Caption:“上记录”。
添加名为cmdNeXt的commandButton控件,名称:cmdNext,Caption:“下记录”。
添加名为CmdLast的CommandButton控件,名称:CmdLast,Caption:“尾记录”。
添加名为CmdExit的CommandButton控件,名称:CmdExit,Caption “退出”。
窗体代码如下:
Private Sub cmdFirst_Click()
Adodc1.Recordset.MoveFirst
End Sub
Private Sub CmdPrevios_Click( )
Adodcl.Recordset.MovePrevious
If Adodc1.Recordset.BOF Then
Adodcl.Recordset.MoveFirst
End if
End Sub
Private Sub CmdNext_Click( )
If Adodcl.Recordset.EOF Then
Adodc1.Recordset.MoveLast
End If
End Sub
Private Sub CmdLast_Click()
Adodcl.Recordset.MoveLast
End Sub
Private Sub CmdExit_Click()
Unload Me
End Sub
程序运行结果如下图。
3、VB/Oracle学生成绩管理系统
(1)创建数据库、表、触发器和存储过程
在Oracle数据库中建立数据库、表、触发器和存储过程,以便为VB程序所调用。
在SQLPlus worksheet输入命令及执行。
(2)构建VB程序界面及程序代码
1、FrmMain窗体
窗体界面如下
代码如下
Private Sub Command1_Click()
StuSearch.Show vbModal, Me
End Sub
Private Sub Command2_Click()
AddStu.Show vbModal, Me
End Sub
Private Sub Command3_Click()
AddStuScore.Show vbModal, Me End Sub
2、StuSearch窗体
窗体界面如下
代码如下
Dim SqlStr As String
Public Sub MakeSqlStr() '产生查询字符串
SqlStr = ""
If Trim(StuXH) <> "" Then
SqlStr = " and XH like'%" + Trim(StuXH.Text) + "%'"
End If
If Trim(StuXM) <> "" Then
SqlStr = SqlStr + " and XM like'" + Trim(StuXM.Text) + "%'"
End If
If Trim(StuZY) <> "所有专业" Then
SqlStr = SqlStr + " and ZYM ='" + Trim(StuZY.Text) + "'"
End If
End Sub
Private Sub Command1_Click()
Call MakeSqlStr
StuADO.RecordSource = "select * from XS,CXB where XS.XB=CXB.XB" & SqlStr StuADO.Refresh
End Sub
Private Sub StuDG_DblClick() '双击显示学生课程成绩
ShowStuKC.StuKCADO.RecordSource = "select * from XS,KC,XS_KC" & " where XS.XH=XS_KC.XH And KC.KCH=XS_KC.KCH" & " And XS.XH= '" & StuADO.Recordset.Fields("XH") & "'"
'MsgBox ShowStuKC.StuKCADO.RecordSource, vbInformation, ""
ShowStuKC.StuKCADO.Refresh
ShowStuKC.Show vbModal, Me
End Sub
Private Sub StuZY_Click() '当专业改变时重新从数据库中提取数据
'Call MakeSqlStr
'StuADO.RecordSource = "select * from XS,CXB where XS.XB=CXB.XB" & SqlStr + "and ZYM=" + Trim(StuZY.Text) + "" '
'StuADO.Refresh
Command1_Click
End Sub
3、ShowStuKC窗体
窗体界面如下
该窗体无代码。
4、AddStu窗体
窗体界面如下
窗体代码如下
Private SqlCon As New ADODB.Connection
Private SqlRes As New ADODB.Recordset
Private SqlCmd As New mand
Private Sub Command2_Click()
If MsgBox("是否要删除" + StuADO.Recordset("xh") + "号学生的记录!", vbYesNo, "提示") = vbYes Then
SqlCmd.ActiveConnection = SqlCon
mandText = "delete from XS where XH='" & _
StuADO.Recordset.Fields("XH") & "'"
SqlCmd.Execute
StuADO.RecordSource = "select * from XS,CXB where XS.XB=CXB.XB"
StuADO.Refresh
End If
End Sub
Private Sub Command3_Click()
Unload Me
End Sub
Private Sub Form_Load()
SqlCon.Provider = "OraOLEDB.Oracle.1"
SqlCon.Open "Server=localhost;Password=HONGDINGJIN;User ID=GL_01_HONGDJ;Data Source=DOMAIN"
End Sub
Private Sub Form_Unload(Cancle As Integer)
SqlCon.Close
End Sub
Private Sub StuADO_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
If Not pRecordset.EOF And Not pRecordset.BOF Then
StuXH.Text = pRecordset("xh")
StuXM.Text = pRecordset("xm")
StuCSSJ.Text = pRecordset("cssj")
StuZY.Text = pRecordset("zyM")
StuZXF.Text = pRecordset("zxf")
StuBZ.Text = CStr(pRecordset("bz") & "")
If pRecordset("xb") = "0" Then
StuXBF.Value = True
Else
StuXBM.Value = True
End If
End If
End Sub
Private Sub StuUpd_Click()
Dim SqlStr As String
SqlStr = "select * from XS where XH='" + Trim(StuXH.Text) + "'"
SqlRes.Open SqlStr, SqlCon, adOpenDynamic, adLockPessimistic
If Not SqlRes.EOF Then
SqlRes("XM") = StuXM.Text
If StuXBM.Value = True Then
SqlRes("xb") = "1"
Else
SqlRes("xb") = "0"
End If
SqlRes("zym") = StuZY.Text
SqlRes("cssj") = CDate(StuCSSJ.Text)
SqlRes("zxf") = CInt(StuZXF.Text)
SqlRes("bz") = StuBZ.Text
SqlRes.Update
Else
SqlRes.AddNew
SqlRes("xh") = StuXH.Text
SqlRes("xm") = StuXM.Text
If StuXBM.Value = True Then
SqlRes("xb") = "1"
Else
SqlRes("xb") = "0"
End If
SqlRes("zym") = StuZY.Text
SqlRes("cssj") = CDate(StuCSSJ.Text)
If Trim(StuZXF.Text) <> "" Then
SqlRes("zxf") = CInt(StuZXF.Text)
End If
SqlRes("bz") = StuBZ.Text
SqlRes.Update
End If
SqlRes.Close
StuADO.RecordSource = "select*from xs,cxb where xs.xb=cxb.xb"
StuADO.Refresh
End Sub
5、AddStuScore窗体
窗体界面如下
窗体代码如下
Private SqlCon As New ADODB.Connection
Private SqlRes As ADODB.Recordset
Private SqlCmd As New mand
Private Sub StuADO_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
If Not pRecordset.EOF And Not pRecordset.BOF Then
StuXH.Text = pRecordset("xh")
StuXM.Text = pRecordset("xm")
StuZY.Text = pRecordset("zym")
StuKCM.Text = pRecordset("kcm")
StuCJ.Text = pRecordset("cj")
StuXF.Text = CStr(pRecordset("xf") & "")
End If
End Sub
Private Sub Command1_Click()
Dim StXH, StKCM, StCJ, StXF
If Trim(StuCJ.Text) = "" Or Trim(StuXF.Text) = "" Then
MsgBox "输入完整的信息!", , "提示"
Exit Sub
End If
mandText = "AddStuScore"
mandType = adCmdStoredProc
Set StXH = SqlCmd.CreateParameter("@xh", adVarChar, adParamInput, 6)
SqlCmd.Parameters.Append (StXH)
Set StKCM = SqlCmd.CreateParameter("@kcm", adVarChar, adParamInput, 16)
SqlCmd.Parameters.Append (StKCM)
Set StCJ = SqlCmd.CreateParameter("@cj", adVarChar, adParamInput)
SqlCmd.Parameters.Append (StCJ)
Set StXF = SqlCmd.CreateParameter("@xf", adVarChar, adParamInput)
SqlCmd.Parameters.Append (StXF)
SqlCmd("@xh") = StuXH.Text
SqlCmd("@kcm") = StuKCM.Text
SqlCmd("@cj") = CInt(StuCJ.Text)
SqlCmd("@xf") = CInt(StuXF.Text)
Set SqlRes = SqlCmd.Execute
SqlCmd.Parameters.Delete ("@xh")
SqlCmd.Parameters.Delete ("@kcm")
SqlCmd.Parameters.Delete ("@cj")
SqlCmd.Parameters.Delete ("@xf")
StuADO.RecordSource = "select xs.xh,xm,zym,kc.kch,kcm,cj,xs_kc.xf as xf from xs,kc,xs_kc" & "where xs.xh=xs_kc.xh and kc.kch=xs_kc.kch"
StuADO.Refresh
End Sub
Private Sub Command2_Click()
If MsgBox("是否要删除" + StuXH.Text + "号的学生" + Trim(StuKCM.Text) + "课的成绩记录!", vbYesNo, "提示") = vbYes Then
SqlCmd.ActiveConnection = SqlCon
mandText = "delete from xs_kc where xh='" + StuXH.Text + "'and kch='" + StuADO.Recordset("KCH") + "'"
mandType = adCmdText
SqlCmd.Execute
StuADO.RecordSource = "select xs.xh,xm,zyM,kc.kch,kcm,cj,xs_kc.xf as xf from XS,KC,XS_KC where xs.xh=xs_kc.xh and kc.kch=xs_kc.kch"
StuADO.Refresh
End If
End Sub
Private Sub Command3_Click()
Unload Me
End Sub
Private Sub Form_Load()
SqlCon.Provider = "OraOLEDB.Oracle.1"
SqlCon.Open "Server=localhost;Password=HONGDINGJIN;User ID=GL_01_HONGDJ;Data Source=DOMAIN"
SqlCmd.ActiveConnection = SqlCon
mandText = "select * from KC"
mandType = adCmdText
Set SqlRes = SqlCmd.Execute
StuKCM.Text = SqlRes("kcm")
While Not SqlRes.EOF
StuKCM.AddItem (Trim(SqlRes("kcm")))
SqlRes.MoveNext
Wend
mandText = "select zym from xs"
mandType = adCmdText
Set SqlRes = SqlCmd.Execute
StuZY.Text = SqlRes("zym")
While Not SqlRes.EOF
StuZY.AddItem (SqlRes("zym"))
SqlRes.MoveNext
Wend
StuZY_Click
StuXH_Click
End Sub
Private Sub Form_Unload(Cancel As Integer)
SqlRes.Close
SqlCon.Close
End Sub
Private Sub StuKCM_Click()
Dim StXH, StKCM
Dim NKCH
Dim count
count = 0
mandText = "select kch from kc where kcm='" + Trim(StuKCM.Text) + "'"
Set SqlRes = SqlCmd.Execute
NKCH = SqlRes("kch")
mandText = "select count(*) as SUM from XS_KC where XH='" + Trim(StuXH.Text) + "' and kch='" + NKCH + "'"
Set SqlRes = SqlCmd.Execute
count = SqlRes("SUM")
If count = 0 Then
mandText = "select xh,xm from xs where xh='" + Trim(StuXH.Text) + "'"
Else
mandText = "select xs.xh,xs.xm,cj,xs_kc.xf from xs,kc,xs_kc where xs.xh='" + Trim(StuXH.Text) + "'and kc.kch='" + NKCH + "'and xs.xh=XS_kc.XH and KC.KCH=xs_kc.kch"
End If
Set SqlRes = SqlCmd.Execute
StuXH.Text = SqlRes("XH")
While Not SqlRes.EOF
If SqlRes.Fields.count = 2 Then
StuXM.Text = SqlRes("xm")
StuCJ.Text = ""
StuXF.Text = ""
Else
StuXM.Text = SqlRes("xm")
StuCJ.Text = SqlRes("cj")
StuXF.Text = CStr(SqlRes("xf") & "")
End If
SqlRes.MoveNext
Wend
SqlCmd.Parameters.Delete ("@XH")
SqlCmd.Parameters.Delete ("@kch")
End Sub
Private Sub StuXH_Click()
Dim StXH, StKCM
Dim NKCH
Dim count
count = 0
mandText = "select kch from kc where kcm='" + Trim(StuKCM.Text) + "'"
Set SqlRes = SqlCmd.Execute
NKCH = SqlRes("kch")
mandText = "select count(*) as sum from xs_kc where xh='" + Trim(StuXH.Text) + "'and kch='" + NKCH + "'"
Set SqlRes = SqlCmd.Execute
count = SqlRes("sum")
If count = 0 Then
mandText = "select xh,xm from xs where xh='" + Trim(StuXH.Text) + "'"
Else
mandText = "select xs.xh,xs.xm,cj,xs_kc.xf from xs,kc,xs_kc where xs.xh='" + Trim(StuXH.Text) + "'and kc.kch='" + NKCH + "'and xs.xh=xs_kc.xh and kc.kch=xs_kc.kch"
End If
Set SqlRes = SqlCmd.Execute
StuXH.Text = SqlRes("xh")
While Not SqlRes.EOF
If SqlRes.Fields.count = 2 Then
StuXM.Text = SqlRes("xm")
StuCJ.Text = ""
StuXF.Text = ""
Else
StuXM.Text = SqlRes("xm")
StuCJ.Text = SqlRes("cj")
StuXF.Text = CStr(SqlRes("xf") & "")
End If
SqlRes.MoveNext
Wend
End Sub
Private Sub StuZY_Click()
mandText = "select * from xs where zym='" + Trim(StuZY.Text) + "'"
mandType = adCmdText
Set SqlRes = SqlCmd.Execute
StuXH.Text = SqlRes("XH")
While Not SqlRes.EOF
StuXH.AddItem (Trim(SqlRes("XH")))
SqlRes.MoveNext
Wend
End Sub
(3)运行结果
运行程序,出现主窗体“学生成绩管理系统”窗体:
单击“学生信息查询”按钮,弹出如下窗体:
输入查询条件,单击“查询”按钮,结果如图:
双击表格中的记录,弹出如下窗体:
返回主窗体,单击“学生信息修改”按钮,弹出如下窗体:
返回主窗体,单击“学生成绩录入”按钮,弹出如下窗体:
可在此窗体修改学生成绩录入信息,也可删除信息成绩信息,如下
单击“是(Y)”按钮后,结果如下
程序运行结果正常。
五、实践小结
经过两周的学习,我基本掌握了Oracle 9i数据库的基本知识和基本操作,能掌握了VB 程序连接Oracle 9i数据库的方法,并能设计和开发一个简单的VB/Oracle数据库程序。
在这两周里,我学到了很多,以前经常听说Oracle数据库,只是没有接触过,现在,我们整整用了两周的时间来学习,觉得收获很多。
它使我对之前学习到的数据库相关知识有了进一步的认识,使我对数据库的相关理论和知识有了更深的了解。
感谢学校给了我们这样一个学习Oracle数据库的机会,也感谢杨燕老师认真的为我们辅导。