2013-01-08 36 views
1

我已经在C++中编程了几个学期,而且我刚刚启动了Visual Basic。虽然这是我现在正在上课的一个预先要求,但我的教授认为我可以自己学习课程。然而,我很难与我们的第一个项目,这是非常简单的。 我们只需创建一个元素周期表的GUI表示,并以用户点击元素并显示其信息和图片的方式创建它。是否有可能将数据从Microsoft Access数据库读取到Visual Basic中的按钮中?

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

我的计划是使用每个元素的按钮来创建表格,单击它时会用元素图片和所有信息打开一个新表格。

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

我想我想要做的是创建一个循环遍历数据库中的所有条目,然后将信息写入按钮,而不是只需手动输入所有信息。

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

+0

是否要在按钮中显示元素信息(如在元素周期表中)? –

+0

是的,我想显示原子序数,缩写和重量! 但是,我不能为我的生活弄清楚如何做到这一点! – Drew

+0

我想出了如何将数据库添加到项目中,却无法弄清楚如何迭代地创建按钮。我甚至不知道这是否可行,或者我只是需要手动创建每一个。 – Drew

回答

1

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

一,您应该添加的元素都在表格上手动像这样在设计视图: enter image description here

所有的按钮必须被命名为喜欢cmdH为H,cmdHe为他,...铁锰,铁,...

二,对于每个按钮,您通过它的属性表分配onclick事件:

OnClick="=prvDoClick()" 

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

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 

四。双击导航窗格上的窗体,它将显示如下: enter image description here

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

V.如果您愿意,可以下载诺顿2013检查的免费病毒Access 012文件(372kb),地址为frm.accdb

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

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并确保提供正确的提供程序和正确的文件名。一旦打开连接,就可以使用访问(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。你将拥有一个Recordset/DataTable,它包含你在SQL查询中指定的所有字段并根据你的需要做它。

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

相关问题