간단한 팁을 쓰겠다.
나름 찾는냐고 고생했으니 말이다.
1. 폼을 만들고, 버튼이나 폼 내에서 스크립트를 실행할 경우
컴포넌트네임.Value 로 하면 값을 받아낼수 있다.
텍스트 박스나 선택목록이 아닌 이상 간단한데
콤보박스나 기타를 이용할 경우
거기서 지정한 필드들중에 가장 처음값이 넘어온다.
밑에서 언급하겠지만 확실하진 않고 선택값 중 각 필드로 접근하는 방법이 있는거 같다.
2. VBA 내에서 SQL 쿼리문을 쓰고 싶다면
DAO 를 이용하는게 좋다.
물론 ADO 나 여러가지 있지만 내가 쓰면서 찾고 또는 VBA 내에서만 설정하면 되고
(ADO 의 경우 윈도우 관리에서 설정해줘야한다.)
엑세스 내에 탑재되어 있는 SQL JET엔진을 이용하기 때문에
특별히 손댈 필요는 없다.
예제 )
Dim rst As DAO.Recordset
Dim strSQL As String
Dim strVal As String
strSQL = "SELECT 보정치, 역상성 FROM " + 변수_상성테이블 + " WHERE 상성
= ( (SELECT 성향 FROM " + 변수_캐릭터테이블 + " WHERE ID = " + 변수_공격자ID + " ) +
(SELECT 성향 FROM " + 변수_캐릭터테이블 + " WHERE ID = " + 변수_방어자ID + ") );"
Set rst = CurrentDb.OpenRecordset(strSQL)
strVal = rst!필드명.Value
여기서 DAO.Recordset 은 DAO 에서 제공하는 인터페이스라고 보면 된다.
ASP 로 DAO 를 이용한 MSSQL 에 접근해 본 사람은 이해가 편할 것이다.
(본인은 한 6년만에 해봐서 그런지 햇갈린다.)
CurrentDb.OpenRecordset(strSQL) 로 쿼리를 날려주면,
쿼리값이 rst(DAO.Recordset 인터페이스)로 들어간다.
이후 rst!필드명.Value 식으로 접근해서 값을 뽑아내면 된다.
위 예제의 경우는 쿼리값의 레코드가 하나만 나왔을 때의 예이다.
ID로 Select 해서 얻었으니 그 값은 절대하나라는 보장이 있기 때문에 저런 예가 나온 것이다.
하지만 그렇지 않을 경우는 레코드값이 다중 일수 있기 때문에
http://www.n2u.co.kr/lecture2007.asp?rnd_no=8 로 가서
1. 검색(선택) 하기 를 보면 다중 레코드에 대처하는 법을 알수 있을 것이다.
3. 위의 접근법으로 1번 마지막에 해답을 찾아보자면
콤보박스의 Value 역시 다중 필드의 경우
(레코드는 하나다. 콤보박스에서 선택된 값만 Value 로 넘어온다.)
콤보박스명.Value!필드명.Value 로 접근할수 있을꺼 같다.
실험은 귀찮아서 안해봤다.
후문
VB 문법은 한 8년만에 처음 봐서 거의 새로 공부하는 식으로 했고,
액세스는 써본적도 없어서 내부 쿼리로만 하려고 했는데,
식 작성기나 스크립트가 아닌 걸로 다른 컴포넌트 값에 접근하려고 하니
접근법을 몰라서 편한 스크립트로 짰다.
SQL 문은 좀더 최적화가 가능하겠지만 본인 SQL 도 7년만에 써봐서 질질 쌌다.
Posted by NFIsNOT


