2011-12-05 6 views
0

私は非常にシンプルなアクセスWebDBを作成しました。これには次のものが含まれています。公開されたWebFormが機能しない:COMBOBOX - QUERYの組み合わせですか?

A)(いくつかのコースの日付と成績を格納する)テーブル。 B)教師が入力として使用する1つの形式(日付と成績)。 C)等級を示すために出力として使用されている別の形、(コンボボックスから日付を選択して)


私が作るすべての検索結果でレポートを持つために、私は、クエリを作成し、そして報告書。

コンボボックスから日付を選択したら、クエリに基づいてレポートを実行するコマンドボタンを押します。

私は、メインテーブルの日付を表示するようにコンボボックスを設定しました。私にとって不可能なことは、コンボボックスで選択された基準でクエリを毎回実行させることです。

私は「WHERE条件」(ボタンのマクロの下で)次のように設定されている

[DateField]=[Forms].[FormThatContainsTheCombo].[Combo] 

と私のコンピュータのすべてが正常に動作上の...

は、今私はASK理由はYOURをDOR HELP:私は、SharePointサーバーのサイト上のすべてのことを公開し、ボタンを押すと

、次のエラーが発生します。

無効な参照「Forms.FormTha tContainsTheCombo.Combo 'を表現します。宣言されていないパラメータまたはフォームまたはレポートのコントロールにバインドされていないフィールドを使用しようとした可能性があります。

私はあなたのほとんどにとって、それを手伝うのは簡単な仕事だと確信しています。 私は正直言って、私は私の仕事から得た最初のプロジェクトであり、それは私にとって非常に重要です。:)

答えて

1

コードはあなたのwhere句であると仮定すると、それはうまくいくはずです。レポートがそのフォームのWebクエリに基づいている場合条件として、あなたはそれを削除しなければならない。したがって、ここでOpenReportコマンドの "where"句を使用する必要があります。これは単に、Webクエリの[forms]![SomeFormName] refsが許可されていないことを意味します。上記の問題を想定し

、その後、私はそれを考えることができる2つの以上のものがこれが失敗する原因になります。

あなたは、ナビゲーションフォームの内側のフォームを配置しました。これは実際にあなたのフォームが現在サブフォームにあり、フィルタコマンドのフォームrefが間違っていることを意味します。

実際には、上記の厄介な問題のために、私は一般的なルールとしてINTOのローカル変数の値を詰め込み、その変数をフィルタ式で使用します。これは多くの理由がありますが、1つの利点は、コード内のフォーム参照がハードコードされていないことです。フィルターはコントロールを受け入れることができますが、完全修飾フォームrefをハードコーディングしなければなりません。ただし、フィルタコマンドでローカル変数またはグローバル変数を使用することもできます。

修飾されたフォームrefを必要とせずにフォームコントロールの値を変数に入れることができました(ありがたいことに)。したがって、コントロール名を使用することができます。これは、VBAの "私"と同じことをあなたに与えてくれます。その結果、フォーム中立コードがここにあります。したがって、この「余分な」ステップが強く推奨されます。

このように、コードやフォーム名を変更することなく、フォームをコピーしたり、フォームの名前を変更したり、サブフォーム内のフォームを使用することができます(新しいWebナビゲーションフォームを意味します)。

次の問題は、Webベースのアプリケーションは、データ型に対して非常に敏感です。つまり、コンボボックスがバインドされていない場合、日付データ型の値が返されない可能性があります。これにより、フィルタがWeb側で失敗するケースが発生します。

クライアント側のアクセスでデータ型がキャストされることがよくありますが、Webではこれはあまり許されません。

簡単なアプローチの1つは、コンボボックス(形式タブ)のプロパティシートです。コンボボックスの形式を日付に設定します(短い日付を試してください)。これで問題は解決します。

私はさらに上記のセットのvarのアイデアを使用して、ハードコードされたフォームのrefとnameを削除します。

だからあなたのコードは次のようになります。コンボボックスは、データベースの基礎となる列にバインドされている場合は、必要ありませんコンボボックスのプロパティシートのデータ形式の設定という

SetLocalVar (dtUserDate,[myComboBox]) 

OpenReport (myReport, [InvoiceDate] = [LocalVars]![dtUserDate], Normal) 

注意を。しかし、これはおそらくアンバウンドコンボボックスなので、データ型の設定は必須です。

このデータ型の問題は、数値列をフィルタするときにテキストボックスに適用されます(形式タブの一般的な数値に設定されます)。 (または、長いデータ型にキャストするために式をCDbl()でラップします)。

日付については、dateSerial()コマンドを使用して日付タイプを強制することもできますが、これはコンボボックスからは意味をなさない可能性があります。

ここで、フォームのバインドされていないコントロールを使用し、その値をフィルタに使用する場合は、データ型に細心の注意を払ってください。

これは通常、バインドされたコントロールの問題/問題ではありませんが、バインドされていない場合は、式が間違ったデータ型を使用することが多く、Accessクライアントはデータ型をキャストする物のウェブ側はより敏感です。

関連する問題