char buffer[30];
char len;
... (buffer, len에 값 설정)
buffer[len] = '\0';
와 같은 코드로 작성할 경우 len의 값이 음수가 될 수 있기 때문에 경고 문구가 발생
len을 unsigned형으로 해야 안나타날듯 하다.
char buffer[30];
char len;
... (buffer, len에 값 설정)
buffer[len] = '\0';
와 같은 코드로 작성할 경우 len의 값이 음수가 될 수 있기 때문에 경고 문구가 발생
len을 unsigned형으로 해야 안나타날듯 하다.
- expected specifier-qualifier-list before 'type'
type이 소스코드 내에 정의되지 않았다. 정의해달라.
- expected '=', ',', ';', 'asm' or '__attribute__' before 'type'
? 내 코드에선 왜 발생하는지 원인분석 불가.. 미해결...
-> 내 코드에선 pthread.h 를 사용했을 때 발생한 문제인데.. gcc 옵션에서 -lpthread 라는 옵션을 주면 된다고 함.
제목 그대로 해보도록 하겠습니다.
기본적으로 윈도우 폼 1개를 생성하여 버튼 클릭시 MS Access 파일을 생성토록 하는 것이 최종 목표 입니다. 저는 DBConnection이라는 프로젝트명으로 생성했습니다.
아래와 같이 폼디자인을 설계했습니다. 컨트롤은 TextBox 1개(tbFilePath), Button 1개(btCreateDB), 그리고 보이지는 않지만 SaveFileDialog(sfdCreateDB)로 이루어져있습니다.
현재 우리가 목표로 하는 기능은 [DB생성]이라는 버튼을 눌렀을 때 원하는 위치에 MS Access에서 정상적으로 인식하는 mdb파일를 생성하는 것이 목표가 되겠습니다.
차후엔 생성된 이 mdb파일을 이용해서 무엇인가 작업을 할 수 있겠죠?
우리는 ADOX를 이용하여 하기때문에 먼저 참조를 추가해줘야 합니다.
Microsoft ADO Ext. 2.8 for DDL and Security 를 추가해 줍니다. 없으신 분들은 마이크로스프트 사이트에서 MDAC 2.8를 다운받으시면 되겠습니다.
다음으로는 데이터베이스에 접속하고 컨트롤할 클래스 하나 만들어보겠습니다. 폼 클래스에서 바로 해도 되지만... 별도로 빼두는 것이 다른 폼에서 이용하기 쉽게 할 수 있기 때문에 나중을 위해 빼두겠습니다.
클래스명은 cDBControl입니다.
// 네임스페이스를 추가 using ADOX; using System.IO;
private string strFilePath = ""; private string strDBConnection = ""; public cDBControl(string strPath) { // 파일의 경로를 저장 this.strFilePath = strPath; // DB에 연결하기위한 명령줄 생성 this.strDBConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strPath + ";"; // 데이터베이스에 암호를 설정하고 싶다면 아래내용을 strDBConnection에 추가하면된다. // 예시) // this.strDBConnection += "Jet OLEDB:Database Password=1234"; } public void funcAccessCreate() { try { FileInfo fiStaticDB = new FileInfo(this.strFilePath); if (!fiStaticDB.Exists) // 파일의 유무를 확인, 없으면 { // 생성 funcCreate(); } else // 있으면 { // 기존 파일을 제거 fiStaticDB.Delete(); // 생성 funcCreate(); } } catch (Exception ex) { throw ex; } } private void funcCreate() { try { // MDB파일을 동적으로 생성 ADOX.CatalogClass adoxCC = new ADOX.CatalogClass(); adoxCC.Create(strDBConnection); // 연결을 끊기위해 null을 할당. adoxCC.ActiveConnection = null; adoxCC = null; // 연결을 끊었다고 adoxCC = null을 해줘도 가비지컬렉션이 작동안하면, // 프로그램 실행 중에는 언제될지 모른다. 수동으로 가비지컬렉션 작동 GC.Collect(); } catch (Exception ex) { throw new Exception("데이터베이스를 생성 중 에러 발생.", ex); } }
그리고 혹시 특이사항으로...
cAccessCarete 메소드의 CatalogClass 부분에서 에러가 발생할 경우 아래처럼 해결해주시면 되겠습니다.
private void btCreateDB_Click(object sender, EventArgs e) { // SaveFileDialog에서 예를 누를 경우 if (sfdCreateDB.ShowDialog() == DialogResult.OK) { string strFilePath = sfdCreateDB.FileName; cDBControl cdbc = new cDBControl(strFilePath); // DBControl 클래스 생성 cdbc.funcAccessCreate(); // Access DB를 생성 tbFilePath.Text = strFilePath; // 화면상의 텍스트박스에 경로를 보여줌 } }
아차차..
그리고 SaveFileDialog 컨트롤을 선택해서 Filter부분에
MS Access 파일|*.mdb을 넣어주세요
여기까지 입니다.
1. C는?
벨 연구소에서 1971년경부터 리치(D.M.Ritchie) 등에 의해서 설계 개발된 시스템 기술용의 프로그래밍 언어입니다. UNIX 오퍼레이팅 시스템의 기술에 사용할 것을 목적으로 설계한 언어로 UNIX OS의 대부분이 이 언어로 개발되었습니다. 컴퓨터의 구조에 밀착한 기초 기술이 가능한 것과 간결한 표기가 될 수 있는 것 등을 특징으로 하고 있습니다.
시스템 기술용 언어의 경우에는 기억장치의 주소(address) 등과 같은 하드웨어 자원까지 기술의 대상으로 할 것을 요구하고 있는데, C 언어에서는 이러한 수준의 개념을 데이터 형이나 함수 등의 고수준 언어의 개념에 잘 대응하고 있습니다. 따라서 언어의 성격상 일반적인 범용의 언어와 거의 다를 바가 없습니다. 프로그램을 다른 종류의 컴퓨터에 이식하는 것도 용이하며, 범용 언어이기는 하지만 강력하고 고수준의 언어로 하는 것을 목표로 하고 있지 않습니다.
C 언어는 프로그램 오류를 쉽게 발견하기 위한 기능은 부족하지만, 고수준 언어에서 자주 볼 수 있는 기술상의 제약이 적기 때문에 오히려 프로그래밍하기 쉬운 편리한 언어로 평가되며, 프로그램을 간결하게 쓰기 위하여 많은 연구를 한 언어입니다.
C 언어의 기본 특징은 ASCII코드 체계로 영문 소문자 집합을 바탕으로 하고 있으며, 함수(function)의 정의문들의 집합으로 구성되어 있고, 분할 컴파일을 할 수 있어 함수 정의부 밖의 외부 변수를 정의함으로써 컴파일 단위가 다른 함수의 외부 변수를 참조할 수 있게 되어 있습니다. 또한 프로그램의 함수 기능에는 FORTRAN의 SUBROUTINE 기능과 FUNCTION 기능을 가지고 있으며, 함수 호출시 매개변수의 값만 넘겨주는 호출 방식을 따르고 있고, 자료의 주소를 자유롭게 조작할 수 있는 점들입니다.
2. C의 특징
1. JDK(Java Development Kit) 설치
Java를 사용하기 위해서는 Java가 실행이 가능한 환경을 만들어 주어야 합니다.
Sun Microsystems 사에서 JDK의 다운로드 주소는 아래와 같습니다.
http://java.sun.com/javase/downloads/index.jsp
1. Java는?
네트워크상에서 쓸 수 있도록 Sun Microsystems 사에서 개발한 객체 지향 프로그래밍 언어입니다.
1995년 5월에 발표, 1996년 1월부터 정식 버전을 배포하였습니다. C++를 바탕으로 언어 규격을 규정하였습니다. 버그의 원인이 되기 쉬운 기능, 예를 들면 지시자(pointer) 연산을 생략하였으며, C++에서는 사용이 끝난 객체(object)를 명시적으로 폐기하도록 프로그램에 기술하였으나 그 대신 자동 폐영역 회수(garbage collection) 기능을 추가하였습니다. 이와 같이 기억 장치 관리의 오류에서 기인하는 버그를 방지합니다.
Java는 객체 클래스의 계승(inheri-tance) 관계를 실행할 때에 확정하는 동적 모델을 채용하였습니다. C++에서는 컴파일 시에 확정하기 때문에 상위 클래스에 새로운 기능을 추가하면 그 클래스와 계승 관계가 있는 모든 클래스를 재컴파일 해야 합니다. 자바에서는 클래스의 계승 관계를 실행할 때 확정하기 때문에, 하위의 클래스를 재컴파일 할 필요가 없습니다.
자바로 작성한 프로그램의 원시 코드는 자바 컴파일러로 컴파일합니다. 자바 컴파일러는 바이트 코드라는 중간 코드를 생성합니다. 이 중간 코드를 자바 가상 머신이라는 소프트웨어로 해석해서 실행합니다. 이 소프트웨어를 설치한 컴퓨터라면 컴퓨터의 명령 집합 아키텍처나 운영 체계(OS)에 관계없이 같은 바이트 코드를 변경하지 않고 실행할 수 있습니다. 자바의 원시 코드를 고쳐 쓰거나 재컴파일 할 필요가 없습니다. 그렇기 때문에 자바는 기종이나 운영 체계와 무관한 응용 프로그램의 개발 도구로 각광받고 있습니다.
자바 가상 머신의 실현 방법으로는 현재 3종류가 있습니다. 즉, 바이트 코드를 해석하여 축차적으로 실행하는 자바 해석기, 바이트 코드를 일괄적으로 2진 코드로 변환하고 실행하는 JIT 컴파일러, 바이트 코드를 고속으로 해석하여 실행하기 위한 자바 칩(마이크로프로세서)입니다.
2. Java의 특징