With Query2 do
begin
SQL.Clear;
SQL.Add('INSERT INTO ' + Edit_Table.Text);
SQL.Add(' VALUES ');
SQL.Add(' (' + value_arr + ')');
end;
Li_Row := 2;
first_field := ExcelIns.ActiveSheet.Cells[Li_Row, 1].Value;
While (first_field <> '') do
Begin
With Query2 do
begin
Close;
for i := 0 to field_count-1 do
begin
Params[i].value := Trim
(ExcelIns.ActiveSheet.Cells[Li_Row,(i+1)].Value);
end;
EXECSQL;
<질문>
query를 사용해서 excel의 값을 insert하는 프로그램입니다. 그 db는 유동적으로 바뀔수 있는 있구요..db의 field type과 같은 형태로 excel값을 넣을수 있는 방법이 없을까요?
위와같이 코딩을 햇을경우 db field type이 decimal인 경우 invalid expression error 가 발생합니다.
param[i].value 값을 data type에 따라 맞춰줘야 하는데 String값밖에 안되더라구요...
field type을 알수있는 함수가 있을까요?
또는 field가 integer 값인경우에도 cell의 값을 db field에 넣을수 있는방법을 알고 싶습니다.
두개의 데이터 형을 비교해보시면 되겠죠... 엑셀의 값은 Variant형으로 TVarData.VType을 이용하시면 아실 수 있구요. 파라매터는 DataType속성으로 아실 수 있습니다. case나 if문으로 두 값을 비교해서 알맞게 뿌려주시면 되겠죠...
var
ExcelValue: Variant;
begin
......
ExcelValue := ExcelIns.ActiveSheet.Cells[Li_Row,(i+1)].Value;
case Params[I].DataType of
ftString:
begin
case TVarData(ExcelValue).VType of
varInteger: Params[i].Value := IntToStr(ExcelValue);
varString: Params[i].Value := Trim(ExcelValue);
........
end;
ftInteger:
begin
case TVarData(ExcelValue).VType of
varInteger: Params[i].Value := ExcelValue;
varString: Params[i].Value := StrToInt(ExcelValue);
........
end;
.......
end;
......
end;
^^ 항상 즐코하세요...