2

私はdbを作るのが初めてです。これまでのところ、フォームは好きなように設定されていますが、バインドされている値はありません。テーブルを切り替える必要があります (最初のテーブルのすべてのフィールドを 2 番目のテーブルに追加することもできますが、私がこれを自分でやっているポイントは学習でした)。

私は2つの問題に遭遇しました。

まず、フォームのレコードソースを myTable にすることをフォームに許可させるのに問題があります。理由がわかりません。それは十分に単純に思えます

form.RecordSource="myTable"

残念ながら、うまくいきません。これを行うと、myTable のフィールドにバインドされたテキスト ボックスに #error または #name? と表示されます。意図した値の代わりに。

これを修正するために、フォームのプロパティに移動し、コントロール ソースを次のように設定しました。

"SELECT * FROM myTable, myTable AS backup_1;"

それが何を意味するのかはわかりませんが、それが何かを機能させるために私がしなければならなかったことです。これは私の最初の問題です - どうすればデータベースを不正行為なしでフォームに「適切に」関連付け、参照を機能させることができますか? 私は今それを3つの異なる方法で行いました.1つはしばらく働いてから停止しました.1つは(form.recordSource=myTable)単に機能しませんでした.もう1つは私が言及した最初の方法です. それらのすべてが私に問題を引き起こしています。

いずれにせよ、SELECT...実際に動作するのに最も近いので、私は を使用しました。そこから、Unbound のままにしたくないテキスト ボックスを [myTable.FieldName] として設定したところ、機能しました。プログラムで [myTable.FieldName] を使用して、特定のレコードから特定のフィールドの情報を難なく取得することができました。問題は、これらのフィールドに保存されているデータをプログラムで編集できないように見えることです。
たとえば、次のようにします。

txtDisplayField1=[myTable.Field1]

正常に動作します。しかし、私が試してみると:

[myTable.Field1] = txtDisplayField1.text

実行時エラー 2448 が表示されます - 「このオブジェクトに値を割り当てることはできません。」(これまでで最も役立つエラー メッセージです。)

前に、フォームをテーブルに関連付ける際に、最初は機能していたが、何らかの理由で機能しなくなった方法が 1 つあります。もともと私はちょうどタイプしました:

form.recordsource = myTable

そしてそれはうまくいきました。かっこなしで Field1 などのように参照することで、フィールドを参照できました。金曜日に仕事を辞めた時点では機能していましたが(あえぎ-私は職業上のプログラマーではありません)、入社したときには機能しませんでした。これはおそらく、人間が可能な限り最も複雑な問題の説明です...大変感謝しています。

4

2 に答える 2

2

Access の既定のデザインと戦っているようです。

同一の構造を持つ 2 つのテーブルがある場合 (適切に設計されたデータベースでは使用しないでください。ただし、何かが発生します)、フォームの OnOpen イベントを使用して、フォームのレコードソースを設定できます。これを行うための非常に簡単な (しかしあまりユーザーフレンドリーではない) 方法は次のとおりです。

  Private Sub Form_Open(Cancel As Integer)
    If vbYes = MsgBox("Edit Table1?", vbQuestion+vbYesNo, "Choose table") Then
       Me.RecordSource = "Table1"
    Else
       Me.RecordSource = "Table2"
    End If
  End Sub

ひどい UI である理由は、はい/いいえの質問をしているからですが、答えは実際には "table1" または "table2" です。質問を誤解するのは非常に簡単です。

次に、フォーム上のすべてのコントロールを基になるフィールドにバインドする必要があります。その場合、データを更新するためのコードを記述する必要はありません。ユーザーがコントロール内のデータを変更すると、基になるデータが自動的に変更されます。

于 2009-09-21T21:08:47.683 に答える
0

フォームのレコードソースを myTable にすることをフォームに許可させるのに問題があります。

プログラムの実行中にフォームのレコードソースを変更することは高度な手法であり、専門家のみが使用できるように予約する必要があります。

これを修正するために、フォームのプロパティに移動し、コントロール ソースを次のように設定しました。

SELECT * FROM myTable

元の SQL は少し複雑ですが、正しいです。

私が試してみると:

txtDisplayField1=[myTable.Field1]

正常に動作します。しかし、私が試してみると:

[myTable.Field1] = txtDisplayField1.text

実行時エラー 2448 が表示されます - 「このオブジェクトに値を割り当てることはできません。」(これまでで最も役立つエラー メッセージです。)

これを試して:

Me.Recordset.Edit
Me.Recordset("Field1") = txtDisplayField1
Me.Recordset.Update
于 2009-09-21T19:06:11.427 に答える