다음의 코드의 문제가 무엇인지 좀 봐주시겠어요? 한번은 되는데 다시 한번 버튼을 누르면 에러가 나요.
AQuery := TQuery.Create(self);
UserDataBase := RunTimeDbCreate('Mydb', ''); //데이터 베이스 생성하는 부분
UserDataBase.AliasName := 'UMS_dbNode1';
UserDataBase.loginPrompt := false;
UserDataBase.Params.add('USERNAME=trafman');
UserDataBase.Params.add('PASSWORD=trafman');
AQuery.DatabaseName := 'Mydb';
///////////////중간 생략 ///////////////
AQuery.Close ;
AQuery.SQL.Clear ;
AQuery.SQL.Add(SQLStr) ;
AQuery.Open ;
AQuery.First ;
function TUSer_01Form.RunTimeDBCreate(const DataBaseName, SessionName : string) : TDataBase;
var TmpDataBase : TDataBase;
begin
TmpDataBase := nil;
Try
Sessions.OpenSession(SessionName);
with Sessions do begin
with Findsession(SessionName) do begin
result := FindDataBase(DataBaseName);
if Result = nil then
begin
tmpDataBase := TDataBase.Create(self);
tmpDataBase.DataBaseName := DataBaseName;
tmpDataBase.SessionName := SessionName;
tmpDatabase.KeepConnection := true;
end;
result := tmpDataBase;
end;
end;
except
tmpDataBase.free;
raise;
end;
end;
이렇게 했는데요 한번만 쿼리가 되고요 다시한번 버튼을 누르면 에러가 납니다. 왜 그럴까요?
> 다음의 코드의 문제가 무엇인지 좀 봐주시겠어요? 한번은 되는데 다시 한번 버튼을 누르면 에러가 나요.
> AQuery := TQuery.Create(self);
>
> UserDataBase := RunTimeDbCreate('Mydb', ''); //데이터 베이스 생성하는 부분
> UserDataBase.AliasName := 'UMS_dbNode1';
> UserDataBase.loginPrompt := false;
> UserDataBase.Params.add('USERNAME=trafman');
> UserDataBase.Params.add('PASSWORD=trafman');
>
>
> AQuery.DatabaseName := 'Mydb';
>
> ///////////////중간 생략 ///////////////
>
> AQuery.Close ;
> AQuery.SQL.Clear ;
> AQuery.SQL.Add(SQLStr) ;
> AQuery.Open ;
>
> AQuery.First ;
>
> function TUSer_01Form.RunTimeDBCreate(const DataBaseName, SessionName : string) : TDataBase;
> var TmpDataBase : TDataBase;
> begin
> TmpDataBase := nil;
> Try
> Sessions.OpenSession(SessionName);
> with Sessions do begin
> with Findsession(SessionName) do begin
> result := FindDataBase(DataBaseName);
> if Result = nil then
> begin
> tmpDataBase := TDataBase.Create(self);
> tmpDataBase.DataBaseName := DataBaseName;
> tmpDataBase.SessionName := SessionName;
> tmpDatabase.KeepConnection := true;
> end;
> result := tmpDataBase;
> end;
> end;
> except
> tmpDataBase.free;
> raise;
> end;
> end;
>
>
> 이렇게 했는데요 한번만 쿼리가 되고요 다시한번 버튼을 누르면 에러가 납니다. 왜 그럴까요?
>
안녕하세요?
저두 소스를 바탕으로 테스트 해보니 Access Vio... 에러가 나더군요..
혹시 이런 에러가 나는건 아닌지요..
소스를 아래와 같이 수정해보세요..
if UserDataBase <> nil then
begin
> UserDataBase := RunTimeDbCreate('Mydb', ''); //데이터 베이스 생성하는 부분
> UserDataBase.AliasName := 'UMS_dbNode1';
> UserDataBase.loginPrompt := false;
> UserDataBase.Params.add('USERNAME=trafman');
> UserDataBase.Params.add('PASSWORD=trafman');
end;
정리하면 데이터베이스가 생성되었으면 다시 생성하지 말라는것이지요..
퀴리도 마찬가지로 해주시면 좋겠네요..
if AQuery <> nil then
begin
> AQuery := TQuery.Create(self);
end
그리구 참고로 아랫 부부은 프로그램 실행시 로그인 박스가 안나타나게 할려고 한것이겠지요?
그러면 아래 세줄만 삭제 해주세요,그리고 UserDataBase.DataBaseName := 'UMS_dbNode1';이런 식으로하세요. DatabaseName속성에는 해당 데이터베이스의 Alias Name을 넣어주면되는 거에요..그러면 로그인 상자가 안나타날거에요..
> UserDataBase.AliasName := 'UMS_dbNode1';
> UserDataBase.Params.add('USERNAME=trafman');
> UserDataBase.Params.add('PASSWORD=trafman');