好的,所以我知道如何将数据放入SQLite数据库......但是如何返回值呢?
使用TSQLQuery
将数据添加到数据库中,其工作原理为:
procedure TForm2.Button2Click(Sender: TObject);
var
noteTitle : string;
begin
try
form1.SQLQueryInsert.ParamByName('title').AsString := edit1.Text;
form1.SQLQueryInsert.ParamByName('content').AsString := memo1.Text;
form1.SQLQueryInsert.ExecSQL(); // INSERT INTO notes (id, title, content) VALUES (:id, :title, :content)
form1.notes.Refresh;
form2.Edit1.Text := '';
form2.Memo1.Text := '';
form2.close;
form1.Show;
except
on e: Exception do
begin
ShowMessage(e.Message);
end;
end;
end;
现在在尝试从表中完成阅读的过程中,我做出了类似的假设:
procedure TForm1.ListView1DblClick(Sender: TObject);
var
results : TDataSet;
begin
if ListView1.Selected <> nil then
begin
form3.show();
SQLQuerySelectTitle.ParamByName('title').AsString := ListView1.Selected.Text;
SQLQuerySelectTitle.ExecSQL(); //SELECT title FROM notes WHERE title = :title
form3.memo1.Text := SQLQuerySelectTitle.Fields[0].ToString;
end;
end;
但到目前为止,它只是返回列表超出界限错误。
谢谢,我真的可以使用一些帮助来理解这一点,我已经尝试过寻找一些信息,但没有运气。
答案 0 :(得分:0)
假设&#39;内容&#39;是用于填充备忘录的列:
procedure TForm1.ListView1DblClick(Sender: TObject);
begin
If ListView1.Selected <> nil Then Begin
form3.show();
form3.memo1.Lines.Clear;
With SQLQuerySelectTitle Do Try
ParamByName('title').AsString := ListView1.Selected.Text;
Open;
First;
While Not Eof Do Begin
form3.memo1.Lines.Add(FieldByName('content').AsString);
Next;
End;
Finally
Close;
End;
end;
end;
实际上,在填充memo1之后,我宁愿拥有form3.Show。
First / While Not Eof / Next是读取数据集所有记录的标准方法。实际上,在公开赛之后,你可以避开First。
使用FieldByName()比使用字段[]更具可读性和可维护性......但效率稍低。您可以通过使用var f:TField并在Open之后但在While循环之前执行单个f:= FieldByName来优化它。在While循环中,您可以直接引用f。如果您希望阅读数千条记录,这是必须的(但我不认为这是这种情况)。