커뮤니티

데이터베이스 질문드립니다

프로필 이미지
재령
2016-09-04 14:02:38
2286
글번호 223983
답변완료

첨부 이미지

항상수고 많으십니다. MS SQL 데이터 베이스를 배열로 가져오는 방법을 알고 싶습니다. 금칙어 셀렉트 는 Selec*t로 표시했습니다. 예스스팟 데이터베이스 객체 항목의 Selec*t를 보면 Selec*t(sQuery, sTabTitle) 이렇게 나와있고 sTabTitle 에 대해 " sTabTitle – 문자열, YesSpot Studio의 실행결과창에서 추가/수정할 탭의 이름을 입력합니다. " 라고 나와 있는 데 잘 이해가 되지 않습니다. 실례로 MS SQL 데이터베이스를 스팟과 ODBC로 올바르게 연동하고, 다음의 스팟 구문을 실행해 보면 var sTabTitle = new Array(6); function Main_OnStart() { Table = DB.Selec*t(" * FROM [dbo].[ENTRY] ", sTabTitle ); } 실행결과 창에 아래와 같이 사전에 만들어 놓았던, MS SQL "ENTRY" 테이블이 출력되 있는 걸 볼수 있습니다. " 그림1 " Main.MessageList(sTabTitle); 로 확인해보면 결과가 쉼표 다섯개로 , , , , , 나오는 걸로 보아 제대로 선언된거 같지 않습니다. 8월 5일 진입한 코드를 보고자 var sTabTitle = new Array(6); function Main_OnStart() { Table = DB.Selec*t(" code FROM [dbo].[ENTRY] WHERE EntryDay = 20160805 ", sTabTitle ); } 로 하면 실행결과창이 "그림2" 로 되고 8월 7일 진입한 코드를 보고자 var sTabTitle = new Array(6); function Main_OnStart() { Table = DB.Selec*t(" code FROM [dbo].[ENTRY] WHERE EntryDay = 20160807 ", sTabTitle ); } 로 하면 데이터베이스에 자료가 없는지 스팟에러가 발생합니다. 에러 메세지는 "TypeError : 데이터의 끝 또는 시작 부분을 지나서 스크롤하려고 했습니다." 그래서 제가 하고자 하는 것은 SQL 데이터를 가져오는 것인데요, 1. sTabTitle 혹은 Table 을 올바르게 선언하는 법을 알고 싶습니다. 2. 원하는 날짜에 진입된 종목코드를 배열로 가져오는 방법을 알고 싶습니다. 3. 데이터가 없는 부분을 지정하였을 때 스팟 에러가 발생하지 않게 하는 방법을 알고 싶습니다.
답변 2
프로필 이미지

예스스탁 예스스탁 답변

2016-09-23 16:58:41

안녕하세요 예스스탁입니다. 1 DB.Selec*t에서 sTabTitle은 실행결과창의 탭의 이름을 지정하는 부분입니다. 엑셀의 쉬트와 같이 지정한 이름으로 스팟스튜디오의 실행결과창에 탭이 만들어지므로 스트링으로 지정하셔야 합니다. 2 아래 내용 참고하시기 바랍니다. var cond = false; var arr = []; function Main_OnStart() { //정상실행되면 실행결과창에 코드라는 이름으로 탭생성하고 cond가 false var cond = DB.Selec*t("Code FROM [테이블이름] WHERE EntryDay = 20160807 ", "코드" ); //cond가 true이면 if (cond == true) { //첫번째 레코드로 이동 DataBase1.MoveFirst(); //마지막 레코드가 아니면 while (DataBase1.IsEOF() != false) { //arr배열변수에 값추가 arr.push(DataBase1.GetFieldValue(0)); //다음 레코드로 이동 DataBase1.MoveNext(); } } } 3 DB객체의 GetFieldCount()로 필드의 갯수를 알수 있습니다. 해당 값 이용해 제어하셔야 합니다. 좀더 자세한 내용은 02-3453-1060으로 전화주셔서 당담자 찾아주시기 바랍니다. 즐거운 하루되세요 > 재령 님이 쓴 글입니다. > 제목 : 데이터베이스 질문드립니다 > 항상수고 많으십니다. MS SQL 데이터 베이스를 배열로 가져오는 방법을 알고 싶습니다. 금칙어 셀렉트 는 Selec*t로 표시했습니다. 예스스팟 데이터베이스 객체 항목의 Selec*t를 보면 Selec*t(sQuery, sTabTitle) 이렇게 나와있고 sTabTitle 에 대해 " sTabTitle – 문자열, YesSpot Studio의 실행결과창에서 추가/수정할 탭의 이름을 입력합니다. " 라고 나와 있는 데 잘 이해가 되지 않습니다. 실례로 MS SQL 데이터베이스를 스팟과 ODBC로 올바르게 연동하고, 다음의 스팟 구문을 실행해 보면 var sTabTitle = new Array(6); function Main_OnStart() { Table = DB.Selec*t(" * FROM [dbo].[ENTRY] ", sTabTitle ); } 실행결과 창에 아래와 같이 사전에 만들어 놓았던, MS SQL "ENTRY" 테이블이 출력되 있는 걸 볼수 있습니다. " 그림1 " Main.MessageList(sTabTitle); 로 확인해보면 결과가 쉼표 다섯개로 , , , , , 나오는 걸로 보아 제대로 선언된거 같지 않습니다. 8월 5일 진입한 코드를 보고자 var sTabTitle = new Array(6); function Main_OnStart() { Table = DB.Selec*t(" code FROM [dbo].[ENTRY] WHERE EntryDay = 20160805 ", sTabTitle ); } 로 하면 실행결과창이 "그림2" 로 되고 8월 7일 진입한 코드를 보고자 var sTabTitle = new Array(6); function Main_OnStart() { Table = DB.Selec*t(" code FROM [dbo].[ENTRY] WHERE EntryDay = 20160807 ", sTabTitle ); } 로 하면 데이터베이스에 자료가 없는지 스팟에러가 발생합니다. 에러 메세지는 "TypeError : 데이터의 끝 또는 시작 부분을 지나서 스크롤하려고 했습니다." 그래서 제가 하고자 하는 것은 SQL 데이터를 가져오는 것인데요, 1. sTabTitle 혹은 Table 을 올바르게 선언하는 법을 알고 싶습니다. 2. 원하는 날짜에 진입된 종목코드를 배열로 가져오는 방법을 알고 싶습니다. 3. 데이터가 없는 부분을 지정하였을 때 스팟 에러가 발생하지 않게 하는 방법을 알고 싶습니다.
프로필 이미지

재령

2016-10-05 12:41:12

답변 감사드립니다. 예스스팟 편집기( Yesspot studio )가 실행되고 있을 때에만 제대로 된 값을 리턴하고 있어, 제가 뭔가 잘못 알고 있는 건지 확인 부탁드립니다. 예스스팟 편집기( Yesspot studio )가 실행되지 않고 있을 때에는 스크립트 메세지 상에 아무런 값도 리턴하지 않습니다. 위에 주신 참고수식을 아래처럼 바꿔서, var cond = false; var arr = []; function Main_OnStart() { //정상실행되면 실행결과창에 코드라는 이름으로 탭생성하고 cond가 false var cond = DB.Selec*t(" code FROM [dbo].[ENTRY] WHERE EntryDay = 20160807 ", "코드" ); if (cond == true){ //첫번째 레코드로 이동 DB.MoveFirst(); //마지막 레코드가 아니면 while (DB.IsEOF() == false){ //arr배열변수에 값추가 arr.push(DB.GetFieldValue(0)); //다음 레코드로 이동 DB.MoveNext(); } } } 8월 5일 진입한 코드를 보면 스팟편집기가 실행중일때는 Main.MessageList(arr); 를 통해보면 스크립트 메세지에 제대로 된 배열값을 리턴함을 확인하였습니다. 스팟편집기가 종료된 상태에서는 Main.MessageList(arr); 는 아무런 값도 리턴하지 못합니다. (이건 실행결과창이 없기 때문인듯합니다)