어디서 잘못된건지......
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;
{
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으로 했습니다..