質問

ちょっとした用事がある場合のアクセスの2007年相当のSQLサーバーの合体機能です。

SQLサーバーなにができるようなもの:

John
Steve
Richard

SQL

DECLARE @PersonList nvarchar(1024)
SELECT @PersonList = COALESCE(@PersonList + ',','') + Person
FROM PersonTable

PRINT @PersonList

を生み出す:ジョンスティーブ-リチャード-

いに同一であるが、アクセスの2007年

なんだろうけど、日本人を組み合わせる方法列をこのようなアクセスの2007年か?

役に立ちましたか?

解決

ここではサンプルユーザー定義関数(UDF)および可能です。

機能:

Function Coalsce(strSQL As String, strDelim, ParamArray NameList() As Variant)
Dim db As Database
Dim rs As DAO.Recordset
Dim strList As String

    Set db = CurrentDb

    If strSQL <> "" Then
        Set rs = db.OpenRecordset(strSQL)

        Do While Not rs.EOF
            strList = strList & strDelim & rs.Fields(0)
            rs.MoveNext
        Loop

        strList = Mid(strList, Len(strDelim))
    Else

        strList = Join(NameList, strDelim)
    End If

    Coalsce = strList

End Function

使用量:

SELECT documents.MembersOnly, 
    Coalsce("SELECT FName From Persons WHERE Member=True",":") AS Who, 
    Coalsce("",":","Mary","Joe","Pat?") AS Others
FROM documents;

ADO版のインスピレーションのコメントonedaywhen

Function ConcatADO(strSQL As String, strColDelim, strRowDelim, ParamArray NameList() As Variant)
   Dim rs As New ADODB.Recordset
   Dim strList As String

   On Error GoTo Proc_Err

       If strSQL <> "" Then
           rs.Open strSQL, CurrentProject.Connection
           strList = rs.GetString(, , strColDelim, strRowDelim)
           strList = Mid(strList, 1, Len(strList) - Len(strRowDelim))
       Else
           strList = Join(NameList, strColDelim)
       End If

       ConcatADO = strList

   Exit Function

   Proc_Err:
       ConcatADO = "***" & UCase(Err.Description)
   End Function

http://wiki.lessthandot.com/index.php/Concatenate_a_List_into_a_Single_Field_%28Column%29

他のヒント

と思いNzは、構文 Nz(variant, [if null value]).この文書のリンク: Nz機能

---Person--- 
John
Steve
Richard

DECLARE @PersonList nvarchar(1024)
SELECT @PersonList = Nz(@PersonList + ',','') + Person
FROM PersonTable

PRINT @PersonList

がNzは同等のものを合体は使用できなくなのでアクセスに操作できます。なに合体するビルにリストの列値をconcatenatiionに変更します。

残念ながらこれができないから内部にアクセスのクエリを単一のSQL文が施設はありません宣言した変数に格納されます。

と思うのを作成する必要があり、機能と開resultset,対して繰り返し処理を実行し、連結列の値を文字列です。

を行アクセス、まるので,それをコードするとどうなるのかわかりません

Public Function Coalesce(pstrTableName As String, pstrFieldName As String)

Dim rst As DAO.Recordset
Dim str As String

    Set rst = CurrentDb.OpenRecordset(pstrTableName)
    Do While rst.EOF = False
        If Len(str) = 0 Then
            str = rst(pstrFieldName)
        Else
            str = str & "," & rst(pstrFieldName)
        End If
        rst.MoveNext
    Loop

    Coalesce = str

End Function

しょうを追加したいエラーコードの取り扱いラットフォーム上で時間をrecordset、これに若干の変化がご利用の場合はADOの代わりにDAOが、一般的にアイデアは同じです。

私はここでテーブルを"人"の3つの記録です。あなどについて説明していただけまでのアクセス。

"標準"アクセス(DAO recordsetっているため開recordsetを使用しgetrows方法にてお客様のデータ

Dim rs as DAO.recordset, _
    personList as String, _
    personArray() as variant

set rs = currentDb.open("Person")
set personArray = rs.getRows(rs.recordcount)

rs.close

一度この配列に含まれておりますbidimensional)で操作で抽出し、"カラム"しょう。がある場合がございますスマートを抽出する方法を一次元に配列からこのくに"参加"の指導を連結各配列値に一つの文字列になります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top