2017-05-17 16 views
1

이 문제는 익숙한 것처럼 들리지만이 포럼이나 다른 곳에서 본 비슷한 질문에 대한 비틀어 짐이 있기 때문에 끝까지 읽으십시오. Access 2010을 사용하여 다른 시스템에서 실행할 코드를 만드는 간단한 응용 프로그램을 작성하고 있습니다. 그 중 하나는 모든 사용자 항목을 쉼표로 구분하여 사용자 당 레코드 수를 단일 레코드로 변환하는 것입니다. 여기에 설명하기 위해 나의 입력의 샘플입니다 :MS 액세스 메모 필드 잘림

USER MBR 
---- ---- 
USR1 DRG 
USR1 ABC 
USR1 XYZ 
USR2 123A 
USR2 ABS2 

그리고이 형식으로 필요합니다

USER MBR_LIST 
----- --------------- 
USR1 DRG, ABC, XYZ 
USR2 123A, ABS2 

지금까지 너무 잘 알고. Allen Brown이 2008 년에 게시 한 코드를 사용했지만 (http://allenbrowne.com/func-concat.html) 문제가 발생했습니다. 코드가 제대로 작동합니다. 디버깅 할 때 예상대로 출력 문자열 ("strOut")에 단일 사용자에 대한 모든 MBR이 있음을 알 수 있습니다. 이 문자열은 7,000자를 넘는 경우가 있습니다.

INSERT INTO Table2 ([USR], MBR_LIST) 
SELECT B.USR, ConcatRelated("MBR","Table1","Table1.USR = '" & B.USR & "'","USR") AS Mbr_List 
FROM (SELECT Table1.USR FROM Table1 GROUP BY Table1.USR) AS B; 

(참고 : 쿼리가 일을 피하기 위해 같은 내장 그래서 다시 훌륭한 조언 다음은, 내가 메모로 설정 MBR_LIST 필드와 테이블을 만들었습니다, 나는 알렌의 기능을 수행 주위 발견 메모 필드를 자르는 것으로 알려진 메모 필드에서 그룹화)

여전히 이렇게하면 테이블의 내 MBR_LIST 필드에 320 자 (?) 만 표시됩니다. MID에를 (사용, 최후의 수단으로

INSERT INTO Table2 ([USR], MBR_LIST) 
SELECT B.USR, "" as Mbr_List 
FROM [Table2] as B Where (False) 
UNION ALL 
SELECT B.USR, ConcatRelated("MBR","Table1","Table1.USR = '" & B.USR & "'","USR") AS Mbr_List 
FROM (SELECT Table1.USR FROM Table1 GROUP BY Table1.USR) AS B; 

: - :

은이 게시물에 제안에도 빈 행을 추가하는 시도 분야는 여전히 320 개 문자로 잘립니다 MS Access Create Table is Truncating Memo Field,하지만 성공) 나는 SELECT 문에서 각각 300 개의 문자 (Mbr_1 ~ Mbr_20)로 20 개의 "덩어리"를 만들었고, 모두 괜찮 았어. 그런 다음 이것을 연결된 다른 덩어리로 감쌌다. (Mbr_1 & Mbr_2 & ... & Mbr_20) AS Mbr_LIST, got - 320 chars!

왜 그런지 그리고 어떻게 삽입하여 전체 문자열을 표시합니까?

감사합니다, 부족

+0

죄송합니다. 테이블 모양의 코드를 만드는 방법을 모르므로 샘플이 엉망입니다. 잘하면 당신은 내 의도를 이해할 것입니다, 또는이 포럼에서 이것을 올바르게 코딩하는 방법을 알려주십시오. – tribe

+1

시도한 다음, 생성 된 각 필드의 데이터 유형을 확인하여, 테이블을 먼 길을 만들지 만 입력을 기반으로하거나 열을 조정 한 다음에 삽입해야 할 수도 있습니다. 원본 및 dest 모두에서 "select *"레코드를 열고 MBR_LIST 필드 유형을 확인하십시오. ""필드보다는 먼저 선택을 시도해보십시오. –

+0

'INSERT INTO' 부분을 생략하면 어떻게됩니까? SELECT 만 실행하면됩니까? – Andre

답변

0

내가 도우미 함수에 대한 DLookup를 사용하여 년 전에 생성 된 해결 방법이 있습니다.

하지 가장 빠른 물론, 아무것도하지만 다른 실패하면 ...

Access Query truncates Memo Field

긴 텍스트를 삽입하려면, 당신은 USR 및 MBR_LIST의 값을 검색 할 때 VBA를 사용

Dim rs As DAO.Recordset 

Set rs = CurrentDb.OpenRecordset("Select [USR], MBR_LIST From Table2") 

rs.AddNew 
    rs!USR.Value = USR 
    rs!MBR_LIST.Value = MBR_LIST 
rs.Update 
rs.Close 

Set rs = Nothing 
+0

테이블에서 전체 메모 필드를 추출하는 것이 코드에 도움이되는 것 같다. 내 문제는 전체 문자열 (7000 + 문자) 테이블에 메모 필드에 삽입하는 방법입니다, 그래서 만약 내가 당신의 코드에 대해 맞다면, 나를 위해 일하지 않을 수도 있습니다. 어쨌든, 덕분에 나중에 유용 할 것입니다. – tribe

+0

VBA를 사용하여 레코드를 추가하십시오. 편집을 참조하십시오. – Gustav

+0

감사합니다. 유감스럽게도 결국이 출력을 문자열에 추가하고 텍스트 파일로 내보낼 필요가 있습니다. 그런 다음 버그가 발생하고 250 자 이상의 문자가 나오는 경우 쓰레기가 발생합니다 ... 결론은 너무 오래 걸립니다. 내가 필요한 것을 위해 Access에서 이것을 할 수 있습니다. 그래도 도움을 주신 모든 분들께 감사 드리며 훌륭한 커뮤니티입니다! – tribe