모두 에러가 나는 건 아니고요 어떤 컴에서 돌리면 에러가 나거든요
interface not supported 라고요.
윈98이고 MSExcel 깔려 있는데서 실행해도 에러가 나는 컴이 있고 아닌 컴이
있는데 코딩으로 해결할 수 있을까요?
다음은 문제의 소스입니다.
엑셀파일을 불러와서 (openExcelFile)
테이블에 insert 시키는 거거든요..(StartExcelTODB)
제 생각에는
with ADOQuery1 do
begin
if (Active) then Close;
ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' +
OpenDialog1.FileName + ';Extended Properties=Excel 8.0;Persist Security Info=False';
SQL.Clear;
SQL.Text := 'SELECT * FROM ['+fname+'$]';
Try
open;
except
Application.messageBox('지정하신 Sheet명과 일치하는 Sheet가 없습니다. Sheet명을 확인하여 주십시요','오류',0);
edSheetName.SelectAll;
exit;
end;
이부분에 문제가 있는 것 같거든요....아시는 분은 좀 갈켜주세요
procedure TFoodCodeForm.openExcelFile;
var
FName : string;
begin
if edSheetName.Text = '' then FName := 'Sheet1'
else FName := edSheetName.Text;
with ADOQuery1 do
begin
if (Active) then Close;
ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' +
OpenDialog1.FileName + ';Extended Properties=Excel 8.0;Persist Security Info=False';
SQL.Clear;
SQL.Text := 'SELECT * FROM ['+fname+'$]';
Try
open;
except
Application.messageBox('지정하신 Sheet명과 일치하는 Sheet가 없습니다. Sheet명을 확인하여 주십시요','오류',0);
edSheetName.SelectAll;
exit;
end;
if (ADOQuery1.findField('상품코드') = nil) or
(ADOQuery1.findField('품 명') = nil) or
(ADOQuery1.findField('단위') = nil) then
begin
AppliCation.MessageBox('올바르지 않은 엑셀 화일입니다.','오류',0);
exit;
end else
begin
BtnCancel.Enabled := False;;
ProgressBar1.Visible := True;
ProgressBar1.Position := 0;
StartExcelTODB;
RefreshFoodCodeQry;
end;
end;
BtnCancel.Enabled := True;
pnExcelToDB.Visible := False;
lblFileName.Caption := '';
edSheetName.Text := '';
ProgressBar1.Visible := false;
end;
procedure TFoodCodeForm.StartExcelTODB;
begin
//////불러온 자료를 DB에 연결하기///////////////////////
ProgressBar1.Max := ADOQuery1.RecordCount;
ADOQuery1.First;
while not ADOQuery1.Eof do
begin
With Query1 do
begin
ProgressBar1.Position := ProgressBar1.Position + 1;
Close;
SQl.Clear;
SQL.ADD('Insert into FOOD_TBL (FOOD_CODE , FOOD_NAME , FOOD_UNIT)');
SQL.ADD('VALUES (:pFood_Code,:pFOOD_NAME,:pFOOD_UNIT)');
if exist1(ADOQuery1.findField('상품코드').DisplayText,ADOQuery1.findField('품 명').DisplayText) then
begin
end else
begin
if Length(ADOQuery1.findField('상품코드').DisplayText) = 7 then
begin
ParamByname('pFood_Code').AsString := ADOQuery1.findField('상품코드').DisplayText;
ParamByname('pFOOD_NAME').AsString := ADOQuery1.findField('품 명').DisplayText;
ParamByname('pFOOD_UNIT').AsString := ADOQuery1.findField('단위') .DisplayText;
ExecSQl;
end;
end;
ADOQuery1.Next;
end;
end;
ProgressBar1.Position := ProgressBar1.Max;
ADOQuery1.First;
end;
MS 사이트 가면 Mdac(M$ Data Access Components) 이라는 설치 파일 있을꺼예여..
그런 에러가 발생하는 컴에는 그걸 깔아주셔야 할꺼예요.
흠.. 그게 아니라면 DCOM인가를 깔아주어야 할지두.. 쩝..
잘 알지 못하니까 횡설수설하네요.