1

私はC++で数学期をプログラムし、VisualBasicを始めたばかりです。今受講している授業の前提条件でしたが、教授は自分で学べると思っていました。しかし、私は最初のプロジェクトで苦労しています。これは非常に単純なことを意図しています。周期表のGUI表現を作成し、ユーザーが要素をクリックしてその情報と画像を表示するように作成するだけです。

各元素の名前、略語、原子番号、原子量を含むデータベースファイルが提供されます。

私の計画は、各要素のボタンを使用してテーブルを作成することでした。ボタンをクリックすると、要素の画像とすべての情報を含む新しいフォームが開きます。

ただし、要素の略語、原子番号、および重みをデータベースからボタンに転送する方法がわかりません。

私がやりたいのは、データベース内のすべてのエントリを通過するループを作成してから、すべての情報を手動で入力するのではなく、ボタンに情報を書き込むことだと思います。

これが理にかなっていることを願っています。本当に苦労しています。

4

2 に答える 2

1

私の知る限り、デザイン ビューの Access フォームにのみボタンを追加できます。通常のビュー、つまりクリック可能モードでは、コントロールを動的に追加することはできません。最初のステップのアイデアを提案します。

I.デザインビューで、次のようにフォームにすべての要素を手動で追加する必要があります。 ここに画像の説明を入力

すべてのボタンは、H の場合は cmdH、He の場合は cmdHe、... Fe の場合は cmdFe のように名前を付ける必要があります。

Ⅱ.ボタンごとに、そのプロパティ シートを使用して onclick イベントを次のように割り当てます。

OnClick="=prvDoClick()"

III. 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

IV. ナビゲーション ペインのフォームをダブルクリックすると、次のように表示されます。 ここに画像の説明を入力

たとえば、ボタン B をクリックすると、メッセージ「B」がポップアップ メッセージ ボックスに表示されます。

V. 必要に応じて、Norton 2013 でウイルスチェック済みの Access 2007 ファイル (372kb) を frm.accdb からダウンロードできます

これはほんの始まりのステップです。良いプログラミング。

于 2013-09-23T09:23:17.673 に答える
0

これを行っているのが vb.net なのか、vba でネイティブに Microsoft Access なのかはわかりませんが、考え方は基本的に同じです。アクセスで作業している場合は、テーブルとクエリのすべてのデータに既にアクセスできます。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 に注意して、正しいプロバイダと適切なファイル名を指定していることを確認してください。接続を開くと、アクセス (ジェット) SQL を使用してデータベースにクエリを実行し、データを DataTable に取得できます。OleDb の使用に関する情報は山ほどありますが、ここから始めてみてください。

これで、必要なデータが得られました。各要素のボタンでフォームを設定します。各ボタンに、それが表す原子番号で名前を付けます。次に、テーブルから Recordset/DataTable にデータを取得し、各行を移動して、対応するボタンのキャプション/テキストを設定できます。たとえば、vba では、access のネイティブ データ オブジェクトを使用して、これを行う方法の大まかなスケッチを次に示します。

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) にリンクできるということです。

ボタンがクリックされたときに他の情報を取得する限り、db アクセス コードを再度利用して、AtomicNumber がボタン名と等しいデータベースに対して SQL を実行できます。SQL クエリで指定したすべてのフィールドを含む Recordset/DataTable が作成され、必要な処理が行われます。

これをどのように処理できるかについてのアイデアが得られることを願っています。

于 2014-05-17T08:49:15.483 に答える