MySql和Delphi直接连接

时间:2011-12-03 17:42:11

标签: mysql delphi

我正在研究一个免费的解决方案,将delphi与mysql数据库连接,但不使用ODBC。是否有这样的组件?

感谢。

6 个答案:

答案 0 :(得分:6)

您可以使用:

  • TmySQL最新版本于2002年发布。
  • mysql.pas适用于最近的Delphi版本(D3到DXE2)/ MySQL版本3.23,4.0,4.1,5.0,5.1。

答案 1 :(得分:2)

我多年来一直在寻找和使用许多工具,免费和付费。

第一次免费是弱或难,至少你需要太多的代码来完成简单的任务,可以在付费工具中的一个或两个功能中完成。

付费工具我使用过Devart MyDAC和microOLAP for MySQL,这是该领域评价最高的工具。 我使用mydac大约2年,但最近我转向MicroOLAP DAC for MySQL作为更好的替代方案有很多原因

  • microlap mydac更小,更易于维护和安装使用,mydac是更大的细节,许多这些细节和属性在以某种错误的方式使用时会给出不明确的错误。由于microolap较小,几乎没有错误,而且更容易使用。
  • mydac在TmyDump vcl组件中有一个unicode问题,它在下一次更新中重复出现并修复,然后重新出现在下一个更新中,在下一个中修复,依此类推。这个bug创建了一个包含unicode数据的nonunicode备份文件,当使用固定版本进行恢复时,会导致错误的unicode转换和数据损坏,MicroOLAP工具对其类似组件和较少数量的细节没有任何问题。
  • 我相信简单比并发症更好,更容易,并且没有多少bug。这是我从MicroOLAP转换为MySQL for MySQL的主要原因。
对于任何严肃的数据库业务开发人员而言,这是我对这个重要基础主题的简单体验。

我也尝试了新的FireDAC,我非常不鼓励使用它,太多的复杂性,难以处理的unicode,难以部署。

祝你好运。

答案 2 :(得分:0)

您可以使用dbExpress。您唯一需要的是来自5.1.X服务器的libmysql.dll。

答案 3 :(得分:0)

我多年来一直在使用MyDac,这是Delphi最好的DAC组件之一。

AFAIK它是唯一提供与MySql直接连接的本机组件(无ODBC,无OLEDB,无libmysql.dll)。

答案 4 :(得分:0)

这是我在Delphi XE4中使用的(也适用于以前的版本)。它在运行时创建组件。注意:如果要创建数据库,则需要使用默认的MySQL数据库“mysql”。确保你检查是否有权访问它,把try ..except..end;在你的代码中。是的,它需要将dbxmys.dll和libmysql.dll放在与* .exe相同的文件夹中。此视频可能会为您提供一些提示http://www.youtube.com/watch?v=6mRGAB4LsEE

unit MainUnit;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Rtti, System.Classes,
  System.Variants, FMX.Types, FMX.Controls, FMX.Forms,
  FMX.StdCtrls, Data.DBXMySQL, FMX.Edit, Data.DB, Data.SqlExpr, FMX.Dialogs, Windows,
  Data.FMTBcd, FMX.Layouts, FMX.Memo, FMX.ListBox, FMX.ListView.Types,
  FMX.ListView;

type
  TForm3 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Edit1: TEdit;
    Memo1: TMemo;
    ListBox1: TListBox;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    MySQLConnection: TSQLConnection;
    MySQLQuery: TSQLQuery;
    Function ConnectToMySQLDatabase(szHostName, szUserName, szPassword, szDatabaseName: String): boolean;
  end;

var
  Form3: TForm3;

implementation

{$R *.fmx}


procedure TForm3.Button1Click(Sender: TObject);
begin
  if ConnectToMySQLDatabase('localhost', 'root', 'passw_ord', 'table_name') = False then
    Caption := 'Not Connected'
  else
    begin
      Caption := 'Connected';
      try
        MySQLQuery.SQL.Clear;
        {MySQLQuery.SQL.Add('insert into table_name(vardas_pavarde, asmens_kodas, kodas, pazym_nr, registravimo_data, '+
          'data_nuo_kada_taikomas, isregistravimo_data, negalioja_nuo, paskelbimas_negaliojanciu, priezastis, pastabos) '+
          'values ("Edijs Test", "3001000", "38", "PazPK122", "2013.05.03", "2013.06.01", NULL, NULL, NULL, "Tuščia", '+
          '"ąčęėįšįųūž");');}
        MySQLQuery.SQL.Add('select * from table_name where vardas_pavarde="edIJS tEst";');
        MySQLQuery.Open;
        Memo1.Lines.Add(VarToSTr(MySQLQuery['vardas_pavarde']));
        Memo1.Lines.Add(VarToSTr(MySQLQuery['asmens_kodas']));
        Memo1.Lines.Add(VarToSTr(MySQLQuery['pastabos']));
        MySQLQuery.Close;
      except
        on E: Exception do
            MessageBox(0, PWideChar(E.Message), 'Error', MB_ICONERROR);
      end;
    end;
end;

Function TForm3.ConnectToMySQLDatabase(szHostName, szUserName, szPassword, szDatabaseName: String): boolean;
begin
  MySQLConnection := FindComponent('MySQLConnection') as TSQLConnection;
  if not Assigned(MySQLConnection) then
    MySQLConnection := TSQLConnection.Create(Self);
  MySQLConnection.DriverName := 'MySQL';
  MySQLConnection.GetDriverFunc := 'getSQLDriverMYSQL';
  MySQLConnection.LibraryName := 'dbxmys.dll';
  MySQLConnection.VendorLib := 'LIBMYSQL.dll';
  MySQLConnection.Params.Values['HostName'] := szHostName;
  MySQLConnection.Params.Values['Database'] := szDatabaseName;
  MySQLConnection.Params.Values['User_Name'] := szUserName;
  MySQLConnection.Params.Values['Password'] := szPassword;
  MySQLConnection.Params.Values['ServerCharSet'] := 'utf8';
  MySQLConnection.LoginPrompt := False;
  try
    MySQLConnection.Connected := True;
    MySQLQuery := FindComponent('MySQLQuery') as TSQLQuery;
    if not Assigned(MySQLQuery) then
      MySQLQuery := TSQLQuery.Create(Self);
    MySQLQuery.SQLConnection := MySQLConnection;
    Result := True;
  except
    on E: Exception do
    begina
      MessageBox(0, PWideChar(E.Message), 'Error', MB_ICONERROR);
      Result := False;
    end;
  end;
end;

end.

答案 5 :(得分:0)

在Delphi 7中使用DB Express和MySQL 5.x. 看到这个链接

http://www.justsoftwaresolutions.co.uk/delphi/dbexpress_and_mysql_5.html