dbExpress如何显示查询结果?

时间:2014-01-29 22:36:30

标签: mysql delphi

var
  Connection: TSQLConnection;
  SqlSet:TSQLDataSet;
begin
  Connection := TSQLConnection.Create(nil);
  SqlSet := TSQLDataSet.Create(nil);
  SqlSet.SQLConnection:=Connection;
  Connection.DriverName := 'MySQL';
  Connection.GetDriverFunc := 'getSQLDriverMYSQL';
  Connection.LibraryName := 'dbxmys.dll';
  Connection.VendorLib := 'libmysql.dll';
  Connection.LoginPrompt:=False;


  Connection.Params.Values['Database']:=('shadowxx1');
  Connection.Params.Values['User_Name']:=('shadowxx1');
  Connection.Params.Values['Password']:=('shadowxx1');
  Connection.Params.Values['HostName']:=('shadowxx1');
  Connection.Open;
  Connection.Connected:=True;

  SqlSet.CommandType:=ctQuery;
  SqlSet.CommandText:= 'SELECT VERSION()';
  SqlSet.ExecSQL;


  Connection.Close;
  Connection.Free;
  SqlSet.Free;
end;

代码工作,但是,如何显示查询结果或将其提取到网格??? 我只是没有找到这些信息,在ADO中它就像这样

DataSrc := TDataSource.Create(Self);
DataSrc.DataSet := ADOQuery;
DataSrc.Enabled := true;
DBGrid1.DataSource := DataSrc;

如果有人可以 - 举一些例子

像这样不行 enter image description here

1 个答案:

答案 0 :(得分:3)

您使用的是错误的方法。在拥有它的任何TDataSet后代中,ExecSQL用于执行不返回结果集的查询,例如INSERT,UPDATE,DELETE或CREATE TABLE。例如,请参阅TSQLQuery.ExecSQL强调我的)

  

执行不返回一组记录的查询。

     

调用ExecSQL执行不返回一组记录的SQL命令。 此命令是SELECT查询以外的查询,例如INSERT,UPDATE,DELETE或CREATE TABLE查询。

使用TSQLQuery.Open从SELECT返回行。这样的东西应该工作(未经测试 - 我不使用MySQL或DBExpress):

var
  Qry: TSQLQuery;
  VersionString: String;


  // Set up your connection as above, and open it

  Qry := TSQLQuery.Create(nil);
  Qry.SQLConnection := Connection;

  Qry.SQL.Text := 'SELECT VERSION() as DBVersion';
  Qry.Open;

  if not Qry.IsEmpty then
    VersionString := Qry.FieldByName('DBVersion').AsString
  else
    VersionString := 'No results found';
  Qry.Close;

有关更多信息(包括分步教程),请参阅Delphi docwiki上的Using DBExpress Components。 (我链接的是当前的Delphi版本,但是自引入以来,DBExpress的基本步骤是相同的​​。)

如果您想要在Delphi中使用DBExpress的基本视频教程,可以试试DBExpress Data Access Components in Delphi - Delphi 101。我没有看过它,但它是由德尔福的制造商Embarcadero发布的。