계속 데브피아에서 도움만 받기에 그동안의 고마운 마음을 담아,

허접한 자료이지만 데브피아에서 얻은 자료와 개인적으로 알아낸 방법들을 모아서 MDB사용하는데 어려움을 느끼시는 분들을 위해 올립니다.

 

흑흨~ 이거 알아 내는데 너무도 많은 시간이 결렸습니당~

 

처음엔 데이터를 엑셀로 옮겨서 사용했었는데, 옮기는 시간이.. 장난이 아니더군요, DAO를 사용하면 엄청난 속도 향상을 느끼실 수 있을 겁니다.

다량의 데이터를 사용하실 때는 MDB로 옮겨서 엑셀로 보내는 것이 정신건강상 유리할듯 ㅎ~

 

먼저 DAO를 이용했기 때문에 DAO를 참조하고, 나중에 압축할 것이기 때문에 JDO도 참조하셔야 합니다.

그리고 임시파일을 제거할 때 IO를 사용하기 때문에, DAO가 소문자로 참조되었기 때문에 개인적으로 불편해서 넣은 코드인

 

using System.IO;

using DAO = dao;

 

를 넣어줘야 합니다.

 

 

아래 부터 코드입니다. 현재 작업중인 관계로 원본 코드 그대로 올리니, 이해바랍니당~ ㅋㅋ~

 

                string mdbName = "분석자료";

                

                string 원본mdb = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\" + mdbName + ".mdb";

                string 임시mdb = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\" + "tmpdb" + ".mdb";

 

                DAO.DBEngineClass db = new DAO.DBEngineClass();

                DAO.Workspace dbw = db.Workspaces[0];

                DAO.Database db1;

 

            

                //MDB 생성

                dbw.CreateDatabase(임시mdb, DAO.LanguageConstants.dbLangKorean, DAO.DatabaseTypeEnum.dbVersion40);

 

                //MDB 열기

                db1 = dbw.OpenDatabase

(임시mdb, DAO.DatabaseTypeEnum.dbVersion40, (object)false, DAO.LanguageConstants.dbLangKorean);

 

                //테이블 생성

                DAO.TableDef dt = db1.CreateTableDef("T인력분석",Type.Missing,Type.Missing,Type.Missing);

                DAO.Field df = dt.CreateField("ID_인력분석",DAO.DataTypeEnum.dbLong,4);

                df.Attributes = 17; //중요! 해당 필드를 일련번호로 만듬

 

                dt.Fields.Append(df);

 

                for(int i=0; objds자봉자료.T인력분석.Columns.Count -1 >= i; i++)

                {

                    if((objds자봉자료.T인력분석.Columns[i].ColumnName.ToString() != "") && (objds자봉자료.T인력분석.Columns[i].ColumnName != "ID_인력분석"))

                    {

                        string 필드이름 = objds자봉자료.T인력분석.Columns[i].ColumnName.ToString();

                        DAO.Field df1 = dt.CreateField(필드이름,DAO.DataTypeEnum.dbText,50);

                        df1.AllowZeroLength = true;

                        df1.Required = false;

                        dt.Fields.Append(df1);

                    }

                                                                                                                            

                }

 

                db1.TableDefs.Append(dt);

 

                //인덱스 생성

                DAO.Index di = dt.CreateIndex("ID");

                di.Fields = "ID_인력분석";

                di.Primary = true;

                

                db1.TableDefs["T인력분석"].Indexes.Append(di);

 

                dao.Recordset rs =

                db1.TableDefs["T인력분석"].OpenRecordset(dao.RecordsetTypeEnum.dbOpenDynaset,dao.RecordsetOptionEnum.dbDenyWrite);

 

 

                for(int ii = 0; objds자봉자료.T인력분석.Count-1 >= ii; ii++)

                {

                    rs.AddNew();

 

                    for(int i=0; objds자봉자료.T인력분석.Columns.Count -1 >= i; i++)

                    {

                        if(objds자봉자료.T인력분석.Columns[i].ColumnName != "ID_인력분석")

                        {

                            rs.Fields[i].Value = objds자봉자료.T인력분석[ii][i].ToString();

 

                        }

                                                                                                                            

                    }

 

                    rs.Update(1,false);  //이거 알아내느라 또 몇시간 보냄 위에서 오픈할때의 타입과 연관있음.

                }

 

                

                //사용했던것 모두 닫습니다. 안닫으면 압축할때  에러납니다.

                rs.Close();

                db1.Close();

                dbw.Close();

                

                rs = null;

                db1 = null;

                dbw = null;

                db = null;

 

 

 

                //MDB 압축하기 강좌에 있는 TIP 그대로 배꼈습니다.

                JRO.JetEngineClass jro = new JRO.JetEngineClass();

                jro.CompactDatabase("Provider=Microsoft.jet.OLEDB.4.0;Data Source=" + 임시mdb,"Provider=Microsoft.jet.OLEDB.4.0;Data Source=" + 원본mdb);

 

 

                //임시 파일이 남아있으면 나중에 다시 압축할 때 에러납니다. (지금까지 작업했던 임시mdb가 임시파일임)

                FileInfo ff = new FileInfo(임시mdb);

                ff.Delete();

 

 

                MessageBox.Show("완료되었습니다.");

 

이상입니다.

허접한 코드이지만 용기내서 올려봅니다.


Posted by 뭉치냐옹
: