2014-11-12 4 views
2

Zeoslib 구성 요소를 사용하여 SQLite 데이터베이스 파일과 상호 작용합니다. 폴더에 여러 SQLite 데이터베이스 파일이 있습니다. Zeoslib 구성 요소를 사용하여 그 중 하나를 열 수 있기를 원합니다. 그러나, 그것은 나를시키지 않을 것이다. 첫 번째 데이터베이스가 성공적으로 열리지 만 그 이후에 열리는 데이터베이스 파일은 액세스 위반 오류가 발생합니다. 내 인생에서 나는 그걸 알아낼 수 없다.Zeoslib에서 데이터베이스를 전환 할 수 없습니까?

다음은 데이터베이스 파일을 여는 방법입니다.

procedure TMainFrm.Open1Click(Sender: TObject); 
var currdb:string; 
begin 
OpenDlg.InitialDir := BaseDir; 
if OpenDlg.Execute = true then 
begin 
     currdb := Extractfilename(OpenDlg.FileName); 
     DataModule1.ZConnection1.Disconnect; 
     DataModule1.ZConnection1.Protocol := 'SQLite-3'; 
     DataModule1.ZConnection1.Database :=baseDir + currdb; 

     DataModule1.Query1.SQL.Clear; 
     DataModule1.Query1.SQL.Add('SELECT * FROM MyTable'); // <<<<--- ZConnection1 is Query1 database connection. 

     DataModule1.ZConnection1.Connect; // <<<<<-------Here is where I get ACCESS VIOLATION all the time. 
     UpdateGrid; // <<<<<<<----- Here is where the Query is executed and the DBGrid is updated. 
end; 
end; 

이유가 무엇인지 알 수 없습니다. Zeoslib 구성 요소를 사용하여 다른 데이터베이스에서 데이터베이스를 전환 할 수 없다는 뜻입니까?

+2

''SQLite-3 '대신'ZConnection1.Protocol : ='sqlite-3 ';으로 시도 할 수 있습니다. –

+0

@ moskito-x 오, 날 키웠어. 나는 벽에 머리를 치며 하루 종일 보냈다. 대문자로 된 편지가 거의 없었기 때문이다. OMG !!! 나는 그것이 중요하지 않다고 생각했다. 그러나 명백하게 그것은한다. – ThN

+2

'ZConnection1.Protocol'은 대소 문자를 구별합니다. 그리고 메모로서, 연결 해제하기 전에 데이터 집합을 닫는 것이 좋습니다. "데이터베이스 연결 해제"에 의해 자동으로 항상 신뢰하지 마십시오. 'Query1.Active then then ... ' –

답변

2

문제는 TZConnection.Protocol 값 대문자에 있습니다. Protocol 값을 SQLite-3에서 sqlite-3으로 변경하십시오.