如何使用SELECT SQLite语句并将数据输出为字符串?

时间:2014-02-08 19:58:16

标签: android sqlite delphi delphi-xe5

好的,所以我知道如何将数据放入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;

但到目前为止,它只是返回列表超出界限错误。

谢谢,我真的可以使用一些帮助来理解这一点,我已经尝试过寻找一些信息,但没有运气。

1 个答案:

答案 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。如果您希望阅读数千条记录,这是必须的(但我不认为这是这种情况)。