뒤(2번)에서부터 설명을 드려야 해결이 되겠군요.
이전 질문에서도 말씀드렸다시피 SQL과 스팟은 별개입니다.
SQL에서 뭘 어떻게 만들더라도 GetFieldValue method 리턴값의 데이터형은 그냥 String 이지요.
여기서부터 출발해야합니다.
편집기의 객체정보 라는 창에 보면 스팟에서 제공하는 method, property, event 들의 설명이 나오지요.
Database 객체의 GetFieldValue method 의 리턴값이 문자열이라고 나와있습니다.
자, 그럼 2번 질문에 대한 답은 나온 거죠. 데이터 변환이라기보다는 리턴값이 문자열이니
그에 맞게 처리하면 되는 겁니다.
따라서, 1번 질문에 대한 답도 문자열을 숫자로 바꿔주면 된다가 되겠네요.
배열요소에 값만 정상적으로 들어있다면 이건 parseFloat로 처리할 수 있습니다.
그런데, parseFloat 로 안된다고 하셨으니 먼저 arr2 에 어떤 값들이 들어있는지부터 확인해야합니다.
일반적으로 var a = [1,2,3,4,5]; 와 같은 배열이 있을경우
Main.MessageList(a) 를 실행하면 1,2,3,4,5 가 디버깅창에 표시됩니다.
그런데 배열요소가 숫자나 문자열이 아닌 객체일 경우는
[object Object],[object Object], ... 로 표시되죠.
"데이터형이 object 로 나오는데요..." 라고 하셨으니 여기까지 확인되신건가요?
그럼, 이제 저 object가 어떤 건지 확인하는 일만 남았군요.
이건 JSON 객체로 해결할 수 있습니다. JSON객체에는 parse 와 stringify 두 개의 method 가 있습니다.
parse 는 JSON 형식의 문자열을 객체로 변환시켜주고 stringify 는 객체를 JSON 형식의 문자열로 변환시켜줍니다. 따라서 배열요소의 값이 뭔가 이상하다면
Main.MessageList(JSON.stringify(arr2));
로 확실하게 내용을 확인할 수 있습니다. 여기까지가 제가 드릴 수 있는 조언입니다.
그런데, 스크립트만 놓고 보면, 특히 Sel ect 문만 정상적으로 실행됐다면 arr2의 배열요소가 객체일 여지가 없어보입니다.
GetFieldValue를 arr2에 넣은 게 전부이니 말이죠.
이건 직접 스크립트를 작성하신 본인만이 직접 찾아서 해결하는 수 밖에 없습니다.
저도 엑셀, 데이터베이스 등 스팟의 대부분의 기능을 사용하고 있는데 스팟자체에 문제가 있었던 적은 없었네요.
스크립트를 보면 해결에 그리 오랜 시간이 걸리시진 않을 듯 합니다.
포인트만 짚어 드리면 실력이 비약적으로 발전하실 것 같네요. ^^
예스스팟이 많이 활성화되길 바라는 사람으로써 결례가 안된다면 힘 닿는대로 댓글 달아드리겠습니다.(오지랖이었다면 죄송. ^^)
> 검시관덱스터 님이 쓴 글입니다.
> 제목 : 데이터베이스에서 리턴 받은 데이터의 데이터형식 문제...
> 고생이 많으십니다~~
<CODE>
var ItemCode
var ItemVol
var ItemAvg
var ItemCrt
var ItemBPL
var ItemSPL
var c
var d
var cond = false;
var cond2 = false;
var arr = new Array;
var arr2 = new Array;
var i
// 변수들을 지정하고
function Main_OnStart()
{
Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code), 0);
ItemCode = Account1.Balance.code;
ItemVol = Account1.Balance.count;
ItemAvg = Account1.Balance.avgUnitCost;
ItemCrt = MarketData1.current;
ItemSPL = (ItemAvg - ItemCrt - 0.0003)*100000/1375;
d = ItemSPL
var cond = DataBase1.Selec*t("* FROM [NKD] ", "idx" );
if (cond == true)
{
DataBase1.MoveFirst();
while (DataBase1.IsEOF() == false)
{
arr.push(DataBase1.GetFieldValue(0));
DataBase1.MoveNext();
}
}
c = arr.length
Main.MessageList(c+1,d)
DataBase1.Inser*t("[NKD] VALUES("+(c+1)+","+d+")") // 이번거래에서 얻어진 수익률을 데이터베이스에 반영(Inser*t)한 후
for(i=1; i<=(c+1); i++)
{
var cond2 = false;
var cond2 = DataBase1.Selec*t(" Test_column FROM [NKD] WHERE idx ="+i+"", "Test_column" ); //이전 수익률값까지 모두 받아서
if (cond2 == true)
{
DataBase1.MoveFirst();
while (DataBase1.IsEOF() == false)
{
arr2.push(DataBase1.GetFieldValue(0));
DataBase1.MoveNext();
}
}
}
Main.MessageList(arr2)
sum = function(x,y) { return x+y; };
mean = arr2.reduce(sum)/(c+1);
Main.MessageList(mean)
}
// 구해진 수익률을 업데이트 한 새로운 평균을 내는 코드를 작성하는데
성공하였습니다만...
문제가 있습니다.
arr2 의 배열의 요소들을 숫자로 인식하지 않습니다. 데이터형이 object 로 나오는데요...
parseFloat, Number 로도 안되고
1.어떤방법으로 arr2 배열의 요소를 숫자(실수형)으로 변환 가능할까요?
2.처음부터 SQL에서 컬럼을 만들당시에 실수형(Float)으로 지정하였음에도 불구하고 데이터를 받아오는 과정에서 테이터 변환이 일어났는데 데이터 변환이 일어나지 않도록 데이터를 받아올 수는 없을까요?
구력이 얼마 안되고 코딩 센스도 부족하여
기초적이고 허접한 질문을 드려 죄송합니당^^
지도편달 부탁드려요~