Q&A

  • ADO 컴포넌트 사용해서 엑셀 - > DB 변환시 에러 - interface not supported
모두 에러가 나는 건 아니고요 어떤 컴에서 돌리면 에러가 나거든요
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;
1  COMMENTS
  • Profile
    최석기 2002.05.03 03:15
    제가 알기로는 ADO를 사용할려며는 ADO에 해당하는 DCOM이 컴터에 깔려있어야 하거든요.

    MS 사이트 가면 Mdac(M$ Data Access Components) 이라는 설치 파일 있을꺼예여..

    그런 에러가 발생하는 컴에는 그걸 깔아주셔야 할꺼예요.

    흠.. 그게 아니라면 DCOM인가를 깔아주어야 할지두.. 쩝..

    잘 알지 못하니까 횡설수설하네요.