1

レコード ソースがクエリ (qryRecords など) であるレポートがあります。レポート ヘッダーに、長いメモ フィールド (255 文字を超える) を追加したいと考えています。これらのメモ (フィールド タイプが「メモ」) を保持するテーブルを設定しました。このテーブルはレポートのレコード ソースとは別であるため、VBA コードを使用してメモ フィールドをレポートに配置します。

レポートのオープン イベントで、次のコードを追加しました。

Dim rst as Recordset
Dim sql_qry as String

sql_qry = "SELECT notes FROM tblNotes WHERE id = 1;"
Set rst = CurrentDb.OpenRecordset(sql_qry)

rst.MoveFirst
Me.txtNote = rst![notes]  'I get the run-time error on this line

残念ながら、実行時エラーが表示されます (「このオブジェクトに値を割り当てることはできません」)。フォームで同様の問題を抱えている人を見つけ、コードを open イベントから OnCurrent イベントに移動することを提案しましたが、そのイベントはレポートには存在しません。助言がありますか?ありがとう。

--- 元の質問 ---

バインドされていないテキスト ボックス (txtNotes) を含むフォームがあり、ユーザーがフォームを開くと、テキスト ボックスに 255 文字を超えるテキストが入力されます (データベースのさまざまなフィールドが連結されます)。これは問題なく動作します。

レポートを開くボタンがフォームにあり、レポートで、テキスト ボックスのコントロール ソースを Forms![frmMain]![frmSub]![txtNotes] に設定します。これは、上記のテキスト ボックスです。これも機能しますが、何らかの理由で、レポートのテキストが 255 文字で切り捨てられます。フォームのテキスト ボックスはバインドされていないため、長さを制限する基になるテーブルはありません。なぜこれが起こるのか、または回避策があるのか​​ 誰かが知っていますか?

4

1 に答える 1

0

最も可能性が高いのは、フィールドのデータがメモ型ではなくテキスト型としてキャストされている場合です。実際には、Text をメモとして明示的にキャストする方法はありません (CStr を使用すると、逆の方向に進むことができます)。このシナリオを試してみると、フォームの切り捨てにも問題がありました。

おそらくフォーム上でこのフィールドを間違った方法で生成していることをお勧めします。ドーナツにドルを連結して非連結フィールドに配置するのではなく、(フォームのコントロール ソースで使用される) クエリで生成できます。同様に、開いているレポートのコントロール ソースとして同じクエリを使用できます。

これらすべてが本当に不可能な場合は、フォームからレポート専用のテーブルに値をダンプし、そのテーブルをレポートのコントロール ソースとして使用することをお勧めします。

- - 編集 - -

レポートのデータ ソースに追加できることを引き続き主張します。以下の例では、Bar テーブルの選択に tblNotes を追加しています。

SELECT bar.f0, bar.f1, bar.f2, bar.f3, tblNotes.notes 
FROM bar, tblNotes 
WHERE tblNotes.id = 1;

はい、Bar に 300 行ある場合、同じ Notes フィールドのコピーが 300 個得られますが、それは小さな問題です。

そこから、txtNote のデータ ソースを tblNotes.Notes 列にするだけです。txtNote は確かにレポート/ページ ヘッダーに存在する可能性があり、MS Access がそれを生成すると、1 行だけが使用されます。最初/最後の行を選択するか、ランダムな行を選択するかはわかりませんが、それらはすべて同じであるため、問題ではありません。

于 2012-05-30T15:30:25.530 に答える