我创建了一个从计算机收集信息的应用程序(计算机名称,CPU,内存等),但是我很难显示存储在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数据库:
我们将非常感谢您提供给我的任何帮助。谢谢。
答案 0 :(得分: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;
还从finally块
中删除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
....