2013-05-16 2 views
1

컴퓨터 (컴퓨터 이름, CPU, 메모리 등)에서 정보를 수집하는 응용 프로그램을 만들었지 만 SQLite 데이터베이스에 저장된 정보를 표시하는 데 어려움을 겪고 있습니다. 나는 내가 "하드웨어"라는 테이블을 가지고 있다는 것을 확실히 알았을 때 "NO SUCH TABLE"이라는 메시지를 얻는다. 나는 무엇을 잘못하고 있는가? 여기SQLite 예외 메시지 발생 : 해당 테이블 없음

내가 쿼리 실행하기 위해 사용하는 코드 :

는 데이터베이스 파일 및 테이블은 프로그램마다 생성 생성
procedure TMain.executeButtonClick(Sender: TObject); 
var 
    results: TDataSet; 
    query: String; 

begin 
    outputMemo.ClearSelection; 
    query := 'SELECT * FROM hardware;'; 
    try 
    SQLConnection1.Execute(query, nil, results); 
    except 
    on E: Exception do 
     outputMemo.Text := 'Exception raised with message: ' + E.Message; 
    end; 
    ShowSelectResults(results); 
end; 

응용 프로그램이

procedure CheckForDatabase; 
var 
    sldb: TSQLiteDatabase; 
    sSQL: string; 

begin 
    slDBPath := ExtractFilePath(paramstr(0)) + 'ComputerName.db'; 
    // ShowMessage(slDBPath); 
    sldb := TSQLiteDatabase.Create(slDBPath); 
    try 
    if sldb.TableExists('hardware') then 
     begin 
     sSQL := 'DROP TABLE hardware'; 
     sldb.ExecSQL(sSQL); 
     end; 

    sSQL := 'CREATE TABLE hardware (id INTEGER PRIMARY KEY, compname TEXT, username TEXT, model TEXT, manufacturer TEXT, domain TEXT, ip TEXT, serialnumber TEXT)'; 
    sldb.ExecSQL(sSQL); 
    sldb.ExecSQL('CREATE INDEX sHardware ON hardware(CompName);'); 
    sldb.BeginTransaction; 
    sSQL := 'INSERT INTO hardware(id, compname, username, model, manufacturer, domain, ip, serialnumber) VALUES (1, "AMD8537", "OMonge", "Gigabyte", "Gigabyte", "Workgroup", "192.168.1.11", "8746652");'; 
    sldb.ExecSQL(sSQL); 
    sldb.Commit; 
    finally 
    sldb.Free; 
    end; 
end; 

를 실행하고이는 SQLite 데이터베이스입니다 :

enter image description here

임의의 헬 당신이 제공 할 수있는 P는 크게 감사하겠습니다. 고맙습니다.

+1

'SQLConnection1' 및 해당 데이터베이스에 대한 구성 방법. 거기에 지정된 데이터베이스 파일에 대한 올바른 경로가 있습니까? – TLama

+0

SQLConnection1은 TSQL Connection 개체이며 예를 들어 절대 경로를 지정 했으므로 데이터베이스에 연결하는 것이 문제가되지 않습니다. – Cor4Ever

+1

"select * from sqlite_master"쿼리를 수행하고 실제로 데이터베이스에있는 테이블을 확인하십시오. –

답변

0

당신 Taged 델파이 XE2는 나의 대답은 RAD 스튜디오 XE3 ​​TSQLMonitor SQLite는 데이터베이스를 지원하는 버전에서

을 XE2에 속한다. ...

XE2 SQLConnection1: TSQLConnection;과 드라이버 Sqlite을 사용할 수 없습니다!
작동하지 않을 것입니다. SQLConnection1.Execute(query, nil, results);

사용 된 코드에 따르면, 동작하는 것으로는 simple Delphi wrapper for Sqlite 3 인 것 같습니다.

방금 ​​작성한 sldb을 사용할 수 있습니다. procedure CheckForDatabase;

에서

slDBPath := ExtractFilePath(paramstr(0)) + 'ComputerName.db'; 
sldb := TSQLiteDatabase.Create(slDBPath); 

finally 블록

private 
    { Private declarations } 
    sltb: TSQLIteTable; 
    sldb: TSQLiteDatabase; 

sldb.Free; 양식을 제거

var 
    sldb: TSQLiteDatabase; 

을 제거하고 응용 프로그램의 인터페이스에 넣어

에서
finally 
    sldb.Free; 
end; 

당신의 executeButtonClick(...

procedure TMain.executeButtonClick(Sender: TObject); 
var 
    query: String; 

begin 
    outputMemo.ClearSelection; 
    query := 'SELECT * FROM hardware;'; 
    sltb := sldb.GetTable(query); 
    if sltb.Count > 0 then begin 
    //display first row 
    .... 
    if not sltb.IsLastRow the begin 
    sltb.Next; 
    //display next row 
    .... 
무엇

how to display field values : look here

+0

정말 고마워요. – Cor4Ever