1

我已经用 C++ 编程了几个学期,而且我刚刚开始使用 Visual Basic。虽然这是我现在上的一门课的先决条件,但我的教授认为我可以自学这门课程。然而,我在我们的第一个项目中遇到了困难,这意味着非常简单。我们只需要创建周期表的 GUI 表示,并以用户单击元素并显示其信息和图片的方式创建它。

我们得到一个数据库文件,其中包含每个元素的名称、缩写、原子序数和原子量。

我的计划是为每个元素使用一个按钮创建表格,单击该按钮将打开一个包含元素图片和所有信息的新表单。

但是,我不知道如何将元素的缩写、原子序数和权重从数据库传输到按钮。

我想我想做的是以某种方式创建一个循环,遍历数据库中的所有条目,然后将信息写入按钮,而不必手动输入所有这些信息。

我希望这是有道理的。我真的很挣扎。

4

2 回答 2

1

据我所知,您只能在设计视图的 Access 表单上添加按钮。您不能在普通视图上动态添加控件,即在可点击模式下。我提出了第一步的想法:

I. 您应该像这样在设计视图中手动添加表单上的所有元素: 在此处输入图像描述

所有按钮必须命名为 cmdH 代表 H,cmdHe 代表 He,... cmdFe 代表 Fe,...

二、对于每个按钮,您通过其属性表将 onclick 事件分配为:

OnClick="=prvDoClick()"

三、在可通过 Alt-F11 激活的 VBA 表单的私有模块上,键入以下代码:

Option Compare Database
Option Explicit
'
Private Function prvDoClick()
'
  Dim strSymbol As String
'
  strSymbol = Mid(Me.ActiveControl.Name, 4)
'
' show symbol for debug, comment it after debugging:
'
  MsgBox strSymbol
'
' here do what you want about the element with the symbol strSymbol, like H, He:
'
'
  prvDoClick = True
'
End Function
'
Private Sub Form_Open(Cancel As Integer)
'
' customize:
'
'
End Sub

四。双击导航窗格上的表单,它显示如下: 在此处输入图像描述

例如,如果您单击按钮 B,则弹出消息框上将显示消息“B”。

五、如果您愿意,可以在 frm.accdb 下载经过 Norton 2013 检测的无病毒 Access 2007 文件(372kb

这只是一个开始。好的编程。

于 2013-09-23T09:23:17.673 回答
0

不知道你这样做是vb.net还是微软在vba中本地访问,但想法基本相同。如果在访问中工作,您已经可以访问表和查询中的所有数据。如果在 vb.net 中,您需要使用类似于此的代码创建与访问文件的连接:

    oleConn = New System.Data.OleDb.OleDbConnection

    oleConn.ConnectionString = "Provider=Microsoft.JET.OLEDB.4.0;" & _
                               "Data Source=C:\Test.mdb;"
    oleConn.Open()

关键是 OleDbConnection 对象。注意 ConnectionString 并确保提供正确的提供程序和正确的文件名。连接打开后,您可以使用 access (jet) SQL 查询数据库并将数据导出到 DataTable 中。您可以找到大量有关使用 OleDb 的信息,但这应该可以帮助您入门。

所以现在你有了你需要的数据。为每个元素设置一个按钮。用它所代表的原子序数命名每个按钮。然后您可以将数据从表中拉到 Recordset/DataTable 中,在每一行中移动,并填充相应按钮的 Caption/Text。例如,在 vba 中,使用访问的本机数据对象,这是如何完成的粗略草图:

Dim db As DAO.Database
Dim rst As DAO.Database

Set db = CurrentDB()
Set rst = db.OpenRecordset("SELECT * FROM MyTable ORDER BY AtomicNumber")

rst.MoveFirst

Do Until rst.EOF
    Form("MyForm").Controls(rst.Fields("AtomicNumber")).Caption = rst.Fields("Abbreviation")

    .MoveNext
Loop

这里的关键思想是按钮本身具有唯一的标识元素,可以链接回数据中的唯一标识元素(在本例中为 AtomicNumber)。

就单击按钮时获取其他信息而言,您可以再次利用数据库访问代码并对 AtomicNumber 等于按钮名称的数据库运行 SQL。您将拥有一个包含您在 SQL 查询中指定的所有字段的 Recordset/DataTable,并按照您的意愿使用它。

希望这能给你一些关于如何处理这个问题的想法。

于 2014-05-17T08:49:15.483 回答