0

Ms SQL Server に接続された Access データベース プロジェクトがあります。データ (テーブル) は Ms SQL サーバーに保存され、フォームとレポートは Access .ADP ファイルに保存されます。デザイン ビューを使用してクエリ、テーブル、ビューを作成することはできませんが、SQL クエリを使用してテーブルとビューを作成し、サーバーに保存することはできます。Ms SQL Server Management Studio がなく、オフィスのコンピューターにインストールできません。

したがって、私が望むのは、動的に生成された SELECT SQL クエリのデータシートを取得して、データ分析のために一時的に結果を表示することです。フォームにテキスト ボックスとボタンを配置し、ボタンをクリックすると、テキスト ボックスに記述された SQL クエリの結果を含むデータシートを表示したいと考えています。

私はこれを試しましたが、うまくいかず、私が望むものではないようです:
MS Access VBA - 動的に構築された SQL の結果をデータシート サブフォームに表示する

また、フォームのレコードソース プロパティにクエリを割り当ててみました。空のデータシートが表示されていますが、データシートの下のナビゲーション ウィンドウには、取得された実際のレコード数が表示されています。したがって、機能していますが、データは表示されません。

私は試しました(http://www.pcreview.co.uk/forums/create-query-dynamically-vba-t3146896.htmlから):

Dim db As DAO.Database
Dim qd As DAO.QueryDef
Dim strSQL As String
Set db = CurrentDb
strSQL = "select * from analysts"
Set qd = db.CreateQueryDef("NewQueryName", strSQL)
DoCmd.OpenQuery "db.NewQueryName"

実行時エラー 91、オブジェクト変数またはブロック変数が行に設定されていないことを示していますSet qd = db....

また、(同じページから):

Dim strSql As String
strSql = "select * from analysts"
CurrentDb.QueryDefs("qryExport").SQL = strSql
DoCmd.OpenQuery "qryExport"

行で同じエラーを返しますCurrentDb.QueryDefs....

アイデアや回避策はありますか?

4

3 に答える 3

1

Access ADP は、おそらく使い慣れた通常の MDB とはまったく異なる獣です。DAO は通常、ADP では使用されません。上記のコードの一部を機能させるには、おそらく DAO への参照を追加する必要がありました。ADP は、ADO を使用してソース データベースと対話するように設計されています。データに対してレコードセットを開きたいだけの場合は、これらの行に沿って何かを使用してください。

Dim strSql As String
Dim rs as ADODB.Recordset
strSql = "select * from analysts"
set rs = New ADODB.Recordset
Set rs.ActiveConnection = CurrentProject.Connection
rs.Source = strsql
rs.Open

その後、そのレコードセットを操作できます。データを表示できるようにそのレコードセットをフォームにバインドする場合は、次を使用できます。

Set Me.Recordset = rs
于 2014-04-25T17:39:03.283 に答える
0

これは私が望むように機能しています:

Dim frm As Form  ' create a form dynamically
Set frm = CreateForm
Dim rs As New ADODB.Recordset
rs.Open Replace(txtQry, vbCrLf, " "), CurrentProject.Connection  ' replace "enters" (vbCrLf) with space because it was throwing error while executing query!
Dim c As Control
For Each f In rs.Fields
    Set c = CreateControl(frm.Name, IIf(f.Type = 11, acCheckBox, acTextBox))  ' if field type is "bit", add checkbox; for other datatypes, add textbox
    c.ControlSource = f.Name
    c.Name = f.Name  ' sets column header to the same name as of field's name
Next
rs.Close
frm.RecordSource = txtQry
DoCmd.OpenForm frm.Name, acFormDS  ' open form in "DataSheet" view otherwise it will be in "Form" view

このコードは、ボタンのクリック イベントに配置されます。

rs.Fields(x).Type(here, )の他の可能なデータ型f.Typeは (3 = int、200 = varchar) です。

于 2014-04-30T06:54:05.563 に答える