2009-08-21 23 views
8

SQLを使用してアクセスフォームのテキストフィールドの値を入力する方法はありますか?アクセスフォームのコントロールソースとしてのSQLフィールド

単純にコントロールソースとしてSQLを入力することはできません。これは本当ですか?任意のHALPため

感謝:)

--edit--

私はこのクエリを実行する必要があります。

SELECT tblCaseIssues.IssueDesc FROM tblCaseIssues INNER JOIN tblCaseNewHS_Issues ON tblCaseIssues.ID = tblCaseNewHS_Issues.IssueID WHERE(tblCaseNewHS_Issues.HS_ID = 81)) 
+0

フォームの基礎となるレコードソースにデータを含めないでください。 –

答えて

9

それが本当SQLですが、機能を使用することができますかなり確信:
=DLookUp("field_name","table_name","any_fieldname = 'value'")

+0

はtblCaseIssues INNER FROM SELECT tblCaseIssues.IssueDesc のような複雑な何かをすることが可能になるような機能を tblCaseIssues.ID = tblCaseNewHS_Issues.IssueID WHERE(tblCaseNewHS_Issues.HS_ID = 81)ON tblCaseNewHS_Issuesを登録しようか! – Jambobond

+2

すべてのテーブルが結合されているAccessでクエリを作成します。 DBLookupでは、table_nameをクエリの名前に置き換えることができます(Sorryはテーブルを示し、クエリがうまくいくと仮定します)。注:VBAで行うより良い方法があります。 – JeffO

2

あなたは、関数名に自分のフィールドのコントロールソースを設定することができます。その関数はSQLを簡単に実行したり、変数を渡したりすることができます。ここでは、SQL文をレコードセットに実行して最初の値を返す関数の簡単なボイラープレートを示します。私の世界では、通常、非常に具体的なwhere句が含まれていますが、あなたはこの関数を必要に応じてより強固にすることができます。

=fnName(sVariable, iVariable) 

Public Function fnName(_ 
    sVariable as String, _ 
    iVariable as Integer _ 
    ) As String 

On Error GoTo Err_fnName 

    Dim con As ADODB.Connection 
    Dim rst As ADODB.Recordset 
    Dim sSQL As String 

    sSQL = "" 

    Set con = Access.CurrentProject.Connection 
    Set rst = New ADODB.Recordset 

    rst.Open sSQL, con, adOpenDynamic, adLockOptimistic 

     If rst.BOF And rst.EOF Then 

      'No records found 
      'Do something! 

     Else 

      'Found a value, return it! 
      fnName = rst(0) 

     End If 

    rst.Close 
    Set rst = Nothing 

    con.Close 
    Set con = Nothing 

Exit_fnName: 

    Exit Function 

Err_fnName: 

    Select Case Err.Number 
    Case Else 
     Call ErrorLog(Err.Number, Err.Description, "fnName", "", Erl) 
     GoTo Exit_fnName 
    End Select 

End Function 
1

コンボボックスを使用してクエリに行ソースを設定するのが最も簡単かもしれません。あるいは、DAOはAccessにとってネイティブです。

Private Sub Form_Current() 
''Needs reference to Microsoft DAO 3.x Object Library 
Dim db As Database 
Dim rs As DAO.Recordset 
Dim strSQL As String 
Dim strResult As String 


strSQL = "SELECT ci.IssueDesc FROM tblCaseIssues ci " _ 
     & "INNER JOIN tblCaseNewHS_Issues cni ON ci.ID = cni.IssueID " _ 
     & "WHERE cni.HS_ID = 81" 

Set db = CurrentDb 
Set rs = db.OpenRecordset(strSQL) 

If rs.RecordCount > 0 Then 
    Do While Not rs.EOF 
     strResult = strResult & ", " & rs!IssueDesc 
     rs.MoveNext 
    Loop 

    strResult = Mid(strResult, 3) 
Else 
    strResult = "Not found" 
End If 

Me.TextBoxName = strResult 

End Sub 
2

SQLクエリを取得してクエリとして保存してください。テキストボックスに続いて

、ちょうど場所:

=(のDLookup(「IssuesDesc」、」クエリの名前」))

Iのwhacksを示唆し、すべてのこれらのポスターにとしてかなり大きな損失でどこにも何も必要ないコード。 sqlをクエリとして保存してから、テキストボックスのデータソースとしてdlookup()関数を使用すれば、完了です。

+0

最初の答えはあなたの解決策を示唆していたので、OPは依然としてクエリのソースとしてSQL文を利用できる方法を探していました。 –

0
Private Sub Form_Load() 
    Me.Text0 = CurrentDb.OpenRecordset("SELECT COUNT(name) AS count_distinct_clients FROM (SELECT DISTINCT name FROM Table1 WHERE subject='Soc') AS tmp;").Fields(0) 
End Sub 
+1

コードだけの回答ではなく、説明やコンテキストを含める方が良いです。 – EJoshuaS

+1

ようこそスタックオーバーフロー!このコードは質問に答えるかもしれませんが、なぜこのコードが質問に答えるか、および/またはどのようにして追加の文脈を提供すれば、長期的な価値が向上します。コードのみの回答はお勧めできません。 – Ajean

0

この問題を解決するために、以下の関数を作成しました。 私はこのソリューションが気に入っています。なぜなら、ナビゲーションペインを詰まらせる保存されたクエリや長い回避策を扱う必要がないからです。

Public Function DAOLookup(SQLstatement As String) 
    'once you are finished with your SQL statement, it needs to be 
    'formatted for VBA and it also needs to be on one line. 
    'example, you would set the control source of a text box to the following 
    '=DAOLookup("Select ls_number FROM FROM ls INNER JOIN ls_sort ON ls.ls_id = ls_sort.ls_id WHERE ls_sort.number =" & forms!frmMenu!combo_sort & ";") 
    'Please note, this function only work for single column single row sql statements 
    Dim db As DAO.Database 
    Dim rs As DAO.Recordset 

    Set db = CurrentDb 
    Set rs = db.OpenRecordset(SQLstatement) 
    If Not rs.BOF Then rs.MoveFirst 
    If rs.BOF And rs.EOF Then Exit Function 
    DAOLookup = rs(0) 
    rs.Close 
    Set rs = Nothing 
    db.Close 
    Set db = Nothing 
    End Function 

これは私が上司に説明した方法でした。 "テキストボックスのコントロールソースとしてDLookUp()関数を持たせることができます。クエリを実行する関数を作成し、その関数をコントロールのソースとして使用するだけではどうですか? それを試して、それは私の状況を修正した。

関連する問題