본문 바로가기
다양한 실전소스코드/EXCEL, ACCESS

[Solved] ms access db 연동 + app crash 해결

by aibattle 2021. 5. 14.
728x90
반응형

아주 오래전 기억인데,

하지만 아직도 access를 하는 분들이 있을것같아서 글을남겨본ㄷ다.

무려 5시간 동안 확인한 엑세스의 APP CRASH 에러 문제점

MSSQL DB 연동 까지 했는데 데이터를 조회하는 과정에서 app crash 에러가 났다.

ㅁ 문제의 상황

listbox1에 DB의 데이터 목록 일부를 불러온다.

listbox1에 조회된 목록의 내용 클릭했을때 값을 DB에 넘겨 또다른 결과물을 listbox2에 표시하고 싶은데 에러가 난다.

 

APP CRASH 발생. 힙 할당에런지 뭔지 Ntdll.dll인거같은데 구글에 안나옴

중요한건 로컬DB를 다룰때는 안난다는점과,

검색결과로 표시된 LIST를 건드리지 않으면 APP CRASH가 발생되지 않는다는 점을 확인하는데 4시간걸림

LIST를 건드리지 않고 조회만 하면 하위 세부 결과를 얻을수 없으니 클릭은 해야함.

그래서 LIST에 값을 뿌릴때 내가 만들어놓은 값형태의 LIST2번에다가 똑같은 값복사 형식으로 LIST를 만들어주고

그 사본으로 작업을 하게 됨

생각해보면, LIST에 레코드셋이 뿌려졌고, 그걸 선택한 동작에서 어떤 메모리 변화가 있었는지 파악을 하는것도 중요함

LIST를 선택하는 순간.. 다시 선택 해제를 한 상태라도 무조건 에러가 발생 되더라.

LIST를 선택한 순간. LIST의 값을 모두 로컬테이블값으로 덮어써서 초기화 해줘도 에러가 발생되더라.

DB에서 얻은 결과물 LIST의 값을 핸들링하려고 클릭이벤트 같은거 하면 안되더라 ★★★★

실전

Dim cn As New ADODB.Connection

Dim rs As New ADODB.Recordset

cn.Open "Provider=SQLOLEDB; Data Source=아이피; Network Library=DBMSSOCN;" & _

"Initial Catalog=DB명; User ID=sa; Password=비번;

 

 

 

 

 

 

 

'----- DB의 뷰1값을 가져온다.

Dim Sql5 As String

Sql5= " SELECT * From 뷰1 WHERE Line = " & Me.text1.value & " ORDER BY Time desd;"

 

 

rs.Open Sql5, cn, adOpenStatic, adLockReadOnly

Set Me.List1.Recordset = rs

rs.close : cn.close

 

 

 

 

여기서 이렇게 가져다 쓰면 appcrash를 유발한다.

 

Me.List결과.RowSource = "select * from 뷰1"

 

 

 

 

 

 

 

'아래와 같이 처리

 

 

Dim i,j As Integer

Dim colv As String

 

 

' ------------------결과를 보여주는 값형식 ListBox의 데이터를 먼지 지워주는 과정

 

'-- List결과에 DB의 내용을 가져와서

For i=0 To Me.List결과.ListCount - 1

Me.List결과.RemoveItem 0

Next I

 

'-----------------------결과 리스트 박스에 값을 채워넣음

For i= 0 To Me.List1.ListCount -1

colv = ""

 

 

 

 

'여기의 for문은 한 행, 한행을 세미콜론 구분자로 colv 변수에 넣었고,

For j= 0 To Me.List1.ColumnCount - 1

colv = colv & ";" & NZ(Me.List1.Column(j,i), "")

Next j

 

 

 

 

'아래와같이 모든행을 반복하며 List결과에 한행씩 Add한다.

Me.List결과.AddItem "" & Mid(colv,2,1000) & ""

Next I

 

 

 

 

그러면 List결과를 클릭해서 값을 얻어서 쓰는것에 에러는 없다.

 

 

 

 

 

 

 

문의사항은 댓글을 주세요.

 

감사합니다.

728x90
반응형

댓글