Q&A

  • mdb파일 생성(SQLConfigDataSource)사용시 Error발생.
어디서 잘못된건지......
mdac 2.5, mdac 2.6 를 다시 깔아서 해봤는데 안되네요.......
제가 알고있는 싸이트를 다 돌아다녀 QnA를 봤는데 잘 모르겠네요...
제어판 odbc에서는 mdb파일이 제대로 생성이 되더라구요....
근데 프로그램에서는 에러가 나는지.......??????
-----------------Error메세지------------------
Project Project1.exe raised exception class EAccess Violation with message 'Access violation at address1F805DE8 in module ODBCCP32.dll read address FFFFFFFF'

------------------사용환경 -------------------
   - o/s : win98
   - tool : delphi 5.0
   - db   : Access 2000 또는 97 사용하려 합니다.
------------------프로그램--------------------
Function SQLConfigDataSource (hwndParent : Integer; fRequest :Integer ; lpszDriver : PChar; lpszAttributes : PChar) : Integer; stdcall;
...

implementation

function TFuncFrm.SQLConfigDataSource;external 'ODBCCP32.DLL' name 'SQLConfigDataSource';
...

function TFuncFrm.pri_CreateDB : integer;
    var dat,DataDir, CurDir,tmpStr: string;
begin
   CurDir :=  GetCurrentDir;
   DataDir := CurDir + 'data';
   tmpStr :=  'CREATE_DB=''' + DataDir + 'Mdp_cc.mdb General''';
   Dat := Copy(DateToStr(Date),1,4) +
                   Copy(DateToStr(Date),6,2) +
                   Copy(DateToStr(Date),9,2);
   result := SQLConfigDataSource(handle ,1, LPCSTR('Microsoft Access Driver (*.mdb)'),  LPCSTR(tmpStr));

end;
2  COMMENTS
  • Profile
    한만교 2003.01.16 09:54
    procedure TForm2.MakeMDB;
    {
      MDB를 만들고자 하는 것은 WriteDB함수에서 호출을 하며 디비파일이 있는지 없는지
      검사하여 쓰기를 행한다.
    }
    var
      S, DirName : String;
      i : integer;
    begin
      DirName := 'C:';

      // 파일존재여부(true(존재),false(없음)
      If Not ChkFile(DirName + 'FANTrend.mdb') Then // 파일이 없으면.
      Begin
        if SQLConfigDataSource(Handle, 1, LPCSTR('Microsoft Access Driver (*.mdb)'),
                               LPCSTR('CREATE_DB=' + DirName + 'FANTrend.mdb General')) then // FANTrend.mdb를 만들고,
        Begin
          ADOConnect.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;' +
             'Data Source=' + DirName + 'FANTrend.mdb'+';Persist Security Info=False'; // 트랜드 mdb파일과 연결시키고
          AQ.SQL.Clear;
          AQ.SQL.Add('CREATE TABLE Trend ('); // Trend 라는 Table를 만들고

          // 인덱스 설정부분
          AQ.SQL.Add('ID Counter Primary Key,');
          // 각 필드 설정
          AQ.SQL.Add('Trd_DateTime TEXT(20) NOT NULL,');
          for i:=0 to TrdNo.Value-1 do
          begin
            S := '';
            S := AdvColumnGrid1.Cells[1,i+1]+' INT NULL,';
            AQ.SQL.Add(S);
          end;
          AQ.SQL.Add('REST INT NULL)');
          AQ.ExecSQL;
          Sleep(50);
          ADOConnect.Connected := true;
          ADOConnect.BeginTrans ;
          AQ.Connection := ADOConnect;

          Exit;
        End;
      End Else
      begin

    {
        if MessageDlg('파일이 이미 존재합니다. 다시만들까요?',
                       mtConfirmation, [mbYes, mbNo], 0) = mrYes then
        begin

          if DeleteFile('C:FANTrend.mdb') then
          begin
            if SQLConfigDataSource(Handle, 1, LPCSTR('Microsoft Access Driver (*.mdb)'),
                                   LPCSTR('CREATE_DB=' + DirName + 'FANTrend.mdb General')) then // FANTrend.mdb를 만들고,
            Begin
              ADOConnect.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;' +
                 'Data Source=' + DirName + 'FANTrend.mdb'+';Persist Security Info=False'; // 트랜드 mdb파일과 연결시키고
              AQ.SQL.Clear;
              AQ.SQL.Add('CREATE TABLE Trend ('); // Trend 라는 Table를 만들고

              // 인덱스 설정부분
              AQ.SQL.Add('ID Counter Primary Key,');
              // 각 필드 설정
              AQ.SQL.Add('Trd_DateTime TEXT(20) NOT NULL,');
              for i:=0 to TrdNo.Value-1 do
              begin
                S := '';
                S := AdvColumnGrid1.Cells[1,i+1]+' INT NULL,';
                AQ.SQL.Add(S);
              end;
              AQ.SQL.Add('REST INT NULL)');
              AQ.ExecSQL;
              Sleep(50);
              ADOConnect.Connected := true;
              ADOConnect.BeginTrans ;
              AQ.Connection := ADOConnect;

              Exit;
            End;
          end;
        end;

    }
      end;
    End;

    참조하시구여...테스트는 Windows 2000, Delphi50으로 했습니다..


  • Profile
    정진하 2003.01.16 18:51
    선언부 없이 IMPLEMENT아랫부분 부터 쓰니까 잘 되네요...

    큰 도움 되었습니다... 감사합니다.


    • 나정훈
    • 2003.01.16 21:15
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2003.01.17 00:02
      안녕하세요 하얀까마귀 입니다. 이상하군요. qrMemo에서도 캐리지 리턴을 인식할텐데요? 원래 그값으로...
    • 박성훈
      2003.01.16 21:44
      안녕하세요? 아래에 간단한 코드를 만들어 봤습니다. 관련함수들은 SysUtils.pas에 있습니다. proced...
    • Angel
      2003.01.16 22:46
    • 양충규
    • 2003.01.16 20:54
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 권태균
      2003.01.20 21:43
      만드시지 마시고 STL에서 제공하는 vector같은 것을 그냥 쓰시면 됩니다..
    • 최용일
      2003.01.16 21:02
      안녕하세요. 최용일입니다. System call이란게 뭔가요? TList도 pascal로 구현되어 있는데... 배열을...
    • 양충규
      2003.01.16 21:15
      제가쓴 system call 이란의미는  Tlist 의 source 를 보면 결국 window 의 API 를 사용하게 되었...
    • 최용일
      2003.01.16 21:33
      안녕하세요. 최용일입니다. 흠~~ 뭔가 질문을 잘못하신거 같은데요.. 제가 델파이 5, 7 둘다 찾아봤지만...
    • 최용일
      2003.01.16 20:52
      안녕하세요. 최용일입니다. 델파이 메뉴의 Tools/Environment Options에 찾아보시면 폼그리드 조정하는 ...
    • 김수경
      2003.01.16 20:49
      Tools/Environment oprions...를 누르면 나타나는 Dialog의 Tab중 preferences Tab내 form designer Group...
    • 임기섭
    • 2003.01.16 20:18
    • 0 COMMENTS
    • /
    • 0 LIKES
    • geo
    • 2003.01.16 08:47
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 조규춘
      2003.01.16 12:05
      http://www.delphiworld.net/zboard.php?id=letter&page=1&category=&sn=off&ss=on&sc=on&keyword=&sel...
    • Galaxy
      2003.01.16 20:41
    • 조규춘
      2003.01.16 20:59
    • 최용일
      2003.01.16 21:04
      규춘님 오랜만이네요... 잘 지내시죠? 언제 귀국하면 술한잔 해요... 아기는 무럭무럭 잘 자라겠죠... ...
    • 정진하
    • 2003.01.16 06:02
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 한만교
      2003.01.16 09:54
      procedure TForm2.MakeMDB; {   MDB를 만들고자 하는 것은 WriteDB함수에서 호출을 하며 디비...
    • 정진하
      2003.01.16 18:51
      선언부 없이 IMPLEMENT아랫부분 부터 쓰니까 잘 되네요... 큰 도움 되었습니다... 감사합니다.
    • 2003.01.16 05:39
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 2003.01.17 06:08
      자답입니다.. QRDetailLink 은 퀵리포트 2.0 에서 사용하다가 지금은 QRSubDetail 로 바뀌었더군요.....
    • 전태술
    • 2003.01.16 03:50
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 전태술
      2003.01.23 23:52
      vcl50.bpl을 다시 컴파일 하니까 되네요 그런데 vcl50을 컴파일 하는 과정중에 LibIntf파일이 없어서 에러...
    • 신강섭
    • 2003.01.16 01:57
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 신강섭
      2003.01.16 02:48
      해당 쎌 위에다가 TImage를 올려놓고 그위에 선을그렸더니 잘 되네요...
    • 하얀까마귀
      2003.01.16 03:24
      안녕하세요 하얀까마귀 입니다. 어떤 그리드를 쓰시죠? 프로퍼티에 DefaultDraw 를 False 로 하시면...
    • 하얀까마귀
      2003.01.16 01:47
      안녕하세요 하얀까마귀입니다. PostMessage로 해당 프로그램으로 메세지를 주셔도 될꺼구요. 좀더 쉽...
    • 리버
    • 2003.01.16 01:20
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2003.01.16 02:11
      안녕하세요 하얀까마귀 입니다. 답변은 아니고 참고하세요.. '파수' 라는 프로그램은 제가 본적이 없...
    • 리버
      2003.01.16 19:42
      하얀까마귀님 고맙습니다. 에러메세지는 다음과 같습니다. Application Error   Exception E...
    • 박성훈
      2003.01.18 09:58
      안녕하세요? 저두 비슷한 메세지를 본 적이 있는데, 똑같은 상황은 아니군요. 머라 정확한 답은 드릴 ...
    • 김윤곤
    • 2003.01.16 00:49
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2003.01.16 02:06
      안녕하세요 하얀까마귀 입니다. 같은 모듈에서만 적용되는걸로 알고 있습니다. 다른모듈에 선언된 컴...
    • 이홍석
      2005.09.19 04:05
      혹시 이방법 써 보실래요......... 프로젝트 옵션화면에 보시면 "Directorys/Conditionals" 탭에서 ...
    • 정용광
    • 2003.01.16 00:26
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2003.01.16 02:09
      안녕하세요 하얀까마귀 입니다. 말씀대로 메모리를 잘못 읽어서 나는 에러같은데 지금 말씀하신 내용으...
    • 김상수
    • 2003.01.15 23:37
    • 0 COMMENTS
    • /
    • 0 LIKES
    • Runo
      2003.01.15 22:38
      없다면 혹시 같은 드라이브에 98과 2000을 같이 설치 한경우에는 없어집니다..
    • 최재영
      2003.01.16 02:34
      아무리 찾아봐도 없는데.. 지금 윈2000써버를 쓰고 있습니다. 98은 안쓰구요 어디서 찾아봐야하죠?
    • 송정환
    • 2003.01.15 20:13
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2003.01.16 01:29
      안녕하세요. 최용일입니다. IWebBroswer2인터페이스 얻어가지고 Navigate2메소드를 이용하세요... Ac...