首页 百科知识 图书基本信息管理功能

图书基本信息管理功能

时间:2023-10-21 百科知识 版权反馈
【摘要】:在实现了系统主窗体、登录功能、模块和自定义控件之后,我们再分析一个具有典型代表意义的“图书基本信息管理功能”是如何实现的。“图书基本信息管理”窗体是系统主窗体的子窗体,一般来说,多文档窗体只有一个主窗体,可以有多个子窗体。当工具箱中出现SSTab图标后,就可以绘制选项卡区域了。DataGrid控件是对数据库进行操作时候经常使用的一种功能非常强大的表格控件。图5-14所示的图书详细信息的下边导航功能区,是通过8个按钮来实现的。

5.4.3 图书基本信息管理功能

在实现了系统主窗体、登录功能、模块和自定义控件之后,我们再分析一个具有典型代表意义的“图书基本信息管理功能”是如何实现的(见图5-3和图5-4)。在这个子窗体中,我们将通过编程实现对数据库记录的添加、删除、定位导航等基本操作。

以下是其具体实现过程:

“图书基本信息管理”子窗体的组成和各控件设置参照图5-14和图5-15。

1)添加子窗体

“图书基本信息管理”窗体是系统主窗体(MDI)的子窗体,一般来说,多文档窗体只有一个主窗体,可以有多个子窗体。当主窗体(frmMain.frm)设置好后,添加子窗体的方法是在工程资源管理器中正常添加普通窗体类型,然后将该窗体的MDIChild属性设置为真(True)即可。本子窗体的名称设置为“frmBookInfo.frm”。

2)添加SSTab控件

子窗体中的选项卡我们使用SSTab控件来实现,该控件并不在常用工具箱中,需要我们手工来添加,添加的方法参照5.3.3添加工具栏和状态栏控件的步骤,只是在“部件选择对话框”中需要选择“Microsoft Tabbed Dialog Control 6.0(SP6)”选项。当工具箱中出现SSTab图标后,就可以绘制选项卡区域了。默认的SSTab控件有3个选项卡,可以通过调整SSTab控件的Tabs属性值,来改变选项卡的个数。

img43

图5-14 图书信息管理子窗体设计1

img44

图5-15 图书信息管理子窗体设计2

3)添加DataGrid控件

添加DataGrid控件的过程与SSTab一样,先在工具箱中右击鼠标,在弹出的“部件选择对话框”选择“Microsoft DataGrid Control 6.0(SP6)(OLEDB)”即可。DataGrid控件是对数据库进行操作时候经常使用的一种功能非常强大的表格控件。它是一种类似于数据表的绑定控件,可以显示一系列行和列来表示Recordset对象的记录和字段。可以使用Data-Grid来创建一个允许最终用户阅读和写入到绝大多数数据库的应用程序。DataGrid控件可以在设计时快速进行配置,只需少量代码或无需代码。当在设计时设置了DataGrid控件的DataSource属性后,就会用数据源的记录集来自动填充该控件以及自动设置该控件的列标头。

在我们的案例程序中,仅使用DataGrid控件进行数据的显示,不做特别复杂的其他操作,只需要按照图5-15所示绘制一个名为“DataGrid1”的控件区域即可。数据的绑定等相关操作我们通过程序代码来实现。

4)添加Frame和功能按钮

图5-14所示的图书详细信息的下边导航功能区,是通过8个按钮来实现的。设置方法是先添加一个Frame(框架)控件,并把Frame控件的Caption属性清空,调整背景区域的颜色等相关设置。然后绘制8个按钮,并按图5-14所示调整按钮的位置和各按钮的Caption值。为了给按钮添加图像元素,需要先修改各按钮的Style的值为1-Graphical,然后再通过按钮的Picture属性添加图像(图像需要自己准备,像素不要大,JPG格式即可)。将各按钮的名称修改如下:添加(cmdAddNew)、删除(cmdDel)、保存(cmdSave)、取消(cmdCancel)、第一个(cmdFirst)、前一个(cmdPrevious)、下一个(cmdNext)、最后一个(cmdLast)。

所有控件设置好后,进行代码编写如下:

(该代码有典型代表意义,其他几个子功能窗口代码与此类似)

代码5-6 图书信息管理功能代码

′****************************************************************************

Dim addnewflag As Boolean ′全局变量起标记作用

Private Sub dcbPubId_GotFocus() ′出版社ID列表获取焦点

  dcbpubId.BackColor=vbYellow

  dcbpubId.ForeColor=vbBlue

End Sub

Private Sub dcbPubId_LostFocus() ′出版社ID列表失去焦点

  dcbpubId.BackColor=vbWhite

  dcbpubId.ForeColor=vbBlue

End Sub

Private Sub dcbcatId_GotFocus() ′分类号ID列表获取焦点

  dcbCatId.BackColor=vbYellow

  dcbCatId.ForeColor=vbBlue

End Sub

Private Sub dcbcatId_LostFocus() ′分类号ID列表失去焦点

  dcbCatId.BackColor=vbWhite

  dcbCatId.ForeColor=vbBlue

End Sub

Private Sub cmdCatOpen_Click() ′分类代号扩展按钮点击

  frmCatInfo.Show

  frmCatInfo.SetFocus

End Sub

Private Sub cmdPubOpen_Click() ′出版社ID扩展按钮点击

  frmPubInfo.Show

  frmPubInfo.SetFocus

End Sub

Private Sub Form_Load()

  ′设置顶端的标题Label

  lblInfo.Left=Me.ScaleLeft

  lblInfo.Top=Me.ScaleTop

  lblInfo.Width=Screen.Width

  ′设置选项卡

  sstabBookInfo.Top=lblInfo.Top+450

  sstabBookInfo.Left=70

  sstabBookInfo.Width=Screen.Width-200

  sstabBookInfo.Height=Screen.Height-2650

  ′设置数据表格控件

  DataGrid1.Top=lblInfo.Top+500

  DataGrid1.Left=100

  DataGrid1.Width=Screen.Width-550

  DataGrid1.Height=Screen.Height-3300

  DataGrid1.Visible=False

  ′为DataGrid1控件设置数据源,使之与rsBookInfo记录集连接

  Set DataGrid1.DataSource=rsBookInfo

  ′数据源绑定

  DataGrid1.ReBind

  ′调整Frame控件位置 8个按钮统一随动

  Frame2.Left=(Screen.Width-Frame2.Width)/2

  ′调用display函数 使文本框等控件显示记录集中数据(默认显示第一条记录)

  Call display

End Sub

′===============================

′“第一个”按钮点击

Private Sub cmdFirst_Click()

On Error Resume Next

  rsBookInfo.MoveFirst ′记录集指针移动到第一条

  Call display

End Sub

′“最后一个”按钮点击

Private Sub cmdLast_Click()

On Error Resume Next

  rsBookInfo.MoveLast

  Call display

End Sub

′“下一个”按钮点击

Private Sub cmdNext_Click()

On Error Resume Next

  rsBookInfo.MoveNext

  If rsBookInfo.EOF Then ′判断下一条记录是否存在

    rsBookInfo.MoveLast

    MsgBox″最后一条记录″,vbInformation,″最后一条记录″

  Else

    Call display

  End If

End Sub

′“前一个”按钮点击

Private Sub cmdPrevious_Click()

On Error Resume Next

  rsBookInfo.MovePrevious

  If rsBookInfo.BOF Then

    rsBookInfo.MoveFirst

    MsgBox″已是第一条记录″,vbInformation,″已是第一条记录″

Else

    Call display

  End If

End Sub

′“取消”按钮点击

Private Sub cmdCancel_Click()

  cmdAddNew.Enabled=True

  cmdDel.Enabled=True

  cmdFirst.Enabled=True

  cmdLast.Enabled=True

  cmdPrevious.Enabled=True

  cmdNext.Enabled=True

  cmdCancel.Enabled=False

  rsBookInfo.CancelUpdate ′结束更改记录集数据

  Call display

End Sub

′“添加”按钮点击 将新加图书的信息先添加到记录集

′“保存”按钮点击后再将记录集新加的数据添加到数据库

Private Sub cmdAddNew_Click()

On Error Resume Next

  Call clear ′调用清除函数

  Dim i As Integer

  Dim max As Integer

  max=0

  addnewflag=True

  txtpubId.Visible=False

  txtCatId.Visible=False

 dcbpubId.Visible=True

  dcbCatId.Visible=True

  cmdAddNew.Enabled=False

  For i=0To rsBookInfo.RecordCount ′将现有图书的最大编号值送给变量max

    If max<rsBookInfo(0)Then

      max=rsBookInfo(0)

    End If

    rsBookInfo.MoveNext

  Next i

  rsBookInfo.MoveFirst

  cmdCancel.Enabled=True

  cmdDel.Enabled=False

  cmdFirst.Enabled=False

  cmdLast.Enabled=False

  cmdPrevious.Enabled=False cmdNext.Enabled=False

  For i=0To rsPubId.RecordCount ′出版社代码自动加载到列表

    dcbpubId.AddItem rsPubId(0)

    rsPubId.MoveNext

    If rsPubId.EOF=True Then

      rsPubId.MoveLast

      dcbpubId.ListIndex=0

       Exit For

     End If

  Next i

  For i=0To rsCatId.RecordCount ′分类代码自动加载到列表

    dcbCatId.AddItem rsCatId(0)

    rsCatId.MoveNext

    If rsCatId.EOF=True Then

      rsCatId.MoveLast

      dcbCatId.ListIndex=0

      Exit For

    End If

  Next i

  rsBookInfo.AddNew

  txtBookId=max+1 ′保证新添加的图书编号为原有最大号码加1图书号为自动设置

  txtBookName.SetFocus

End Sub

′删除记录

Private Sub cmdDel_click()

On Error Resume Next

  If MsgBox(″确认删除么?″,vbOKCancel+vbExclamation,″删除记录″)=vbOK Then

     rsBookInfo.Delete

     rsBookInfo.MoveNext

  If rsBookInfo.EOF Then

     rsBookInfo.MoveLast

     MsgBox″最后一条记录″

  End If

  Call display

 End If

End Sub

′保存记录 是真正的保存,将添加的数据放入数据库

Private Sub cmdsave_click()

On Error Resume Next

  If txtBookId.Text=″″Or txtBookName.Text=″″Or txtAuthor.Text=″″Then

    MsgBox″保存错误!!!数据添加失败!″,vbCritical,″请添加全部数据″

    txtBookId.SetFocus

    Exit Sub

  End If

  Call assign

  rsBookInfo.Save ′该操作会使新的记录添加到数据库

  MsgBox″保存成功″,vbInformation,″已保存成功″

  cmdDel.Enabled=True

  cmdFirst.Enabled=True

  cmdLast.Enabled=True

  cmdPrevious.Enabled=True

  cmdNext.Enabled=True

  cmdAddNew.Enabled=True

  cmdCancel.Enabled=False

  Exit Sub

End Sub

′定义“清除”功能函数,支持作用

Private Sub clear()

  txtBookId.Text=″″

  txtBookName.Text=″″

  txtAuthor.Text=″″

  txtpubId.Text=″″

  txtCatId.Text=″″

  End Sub

′定义Display函数,从数据集中提取数据到控件中

Private Sub display()

  txtpubId.Visible=True

  txtCatId.Visible=True

  dcbpubId.Visible=False

  dcbCatId.Visible=False

  cmdCancel.Enabled=False

  txtBookId.Text=Str(rsBookInfo(0))&″″ ′添加空格字符,避免空记录添加到控件会报错

  txtBookName.Text=rsBookInfo(1)&″″

  txtAuthor.Text=rsBookInfo(2)&″″

  txtpubId.Text=Str(rsBookInfo(3))&″″

  txtCatId.Text=Str(rsBookInfo(4))&″″

End Sub

′将控件中的数据添加到记录集对应的列

Private Sub assign()

  If addnewflag=True Then

    rsBookInfo(0)=Val(Trim$(txtBookId.Text)) ′转换文本成数据

    rsBookInfo(1)=Trim$(txtBookName.Text)

    rsBookInfo(2)=Trim$(txtAuthor.Text)

    rsBookInfo(3)=Val(Trim$(dcbpubId.Text))

    rsBookInfo(4)=Val(Trim$(dcbCatId.Text))

    addnewflag=False

  Else

    rsBookInfo(0)=Val(Trim$(txtBookId.Text))

    rsBookInfo(1)=Trim$(txtBookName.Text)

    rsBookInfo(2)=Trim$(txtAuthor.Text)

    rsBookInfo(3)=Val(Trim$(txtpubId.Text))

    rsBookInfo(4)=Val(Trim$(txtCatId.Text))

  End If

End Sub

′选项卡点击使数据表在对应的选项卡中显示

Private Sub sstabBookInfo_Click(PreviousTab As Integer)

  If PreviousTab=0Then

    DataGrid1.Visible=True

  Else

    DataGrid1.Visible=False

  End If

End Sub

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈