2013-05-16 2 views
1

Я создал приложение, которое собирает информацию с компьютера (имя компьютера, процессор, память и т. Д.), Но мне так сложно отображать информацию, хранящуюся в базе данных SQLite, когда Я выполняю запрос, я получаю сообщение «NO SUCH TABLE», когда я точно знаю, что у меня есть таблица под названием «hardware», что я делаю неправильно?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 Delphi XE2-так что мой ответ принадлежит XE2

С версии RAD Studio XE3 TSQLMonitor поддерживает базы данных SQLite. ...

С XE2 Вы не можете использовать SQLConnection1: TSQLConnection; с водителем Sqlite!
не будет работать SQLConnection1.Execute(query, nil, results);

В соответствии с кодом, используемым, он, кажется, simple Delphi wrapper for Sqlite 3 действовать.

Таким образом, вы можете использовать только что созданные sldb.

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

procedure CheckForDatabase; В

удалить

var 
    sldb: TSQLiteDatabase; 

и поместить его в интерфейс Вашего Приложения

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

также удалить sldb.Free; форму окончательно блокировать

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

Смежные вопросы