Delphi - ZEOS MySQL - 访问被拒绝



我正在尝试从Delphi 7应用程序连接到网络上的mysql数据库服务器(版本5.6)...

使用 Mysql 工作台,它可以正常工作,我可以与我的测试用户(在 Delphi 7 中不起作用的同一用户)一起运行选择查询......

在德尔福,使用TZEosConn 7.1.4-stable,为数据库服务器输入正确的主机名,正确的用户名和密码... (参数登录提示 = 假)当我将"连接"更改为 true 时,一切正常......

但是当我尝试执行一个简单的查询时:

zq..SQL。文本:='从数据库中选择字段。表中 id='+inttostr(x)+';';zq.执行;

其中 zq 是 TZQuery,x 是整数,

我收到此错误:**EZSQLException.. SELECT 命令被拒绝@my_internet_hostname **

当我登录MySQL工作台时,我看到同一个用户具有通配符会话,例如mydbuser@%,相同的选择工作正常

所以我认为,问题出在 ZEOS 组件中,它会自动添加我的互联网提供商主机名......

在mysql服务器上,我允许使用通配符主机名(简单地 - '%' - 所以所有主机都可以访问我的MYSql DB)

有人可以建议我,我的 ZEOS 组件有什么问题吗???

PS:对不起我的英语和格式

你的MySQL服务器来自互联网吗?

  • 首先:您的互联网提供商是否允许您使用管道/套接字连接直接访问MySQL数据库?通常,由于安全问题,互联网提供商不允许这样做。(如果您询问他们,他们可以为此打开一个特殊的 IP/端口)。

  • 第二:你有授权选项吗? 这可能会导致 ZEOS 组件出现问题。

    授予使用 上的 。TO 'root'@'%'

    使用授予选项将 mydb .* 上的所有权限授予"根"@"%"

如果我记得不错,在我像这样更改权限后,它是使用本地网络mysql Server(测试了EasyPHP和WAMP)。

我还建议您使用DSN字符串进行连接:检查下面的连接方式:

http://synopse.info/forum/viewtopic.php?id=1547

var
  dsn : string;
begin
  dsn := 'zdbc:mysql://192.168.2.60:3306/world?username=root;password=dev';

你可以用它来初始化你的ZEOSConnexion,也要注意使用的字符集是什么:iso-8859-1,iso-8859-15,utf-8,ansi。 因为Delphi 7使用ANSI,而互联网服务器经常使用其他像UTF-8一样的服务器。

无论如何,我在您的代码中看到一个错误:

zq.SQL.Text:='SELECT field FROM database.TABLE where id='+inttostr(x)+';';
zq.ExecSQL;

ExecSQL 用于更新、插入、删除命令,通常对于返回记录的选择命令,使用 open 命令更方便:

zq.Close;
zq.SQL.Text:='SELECT field FROM database.TABLE where id='+inttostr(x)+';';
zq.Open;

我给出了很多调查路径,希望对您有所帮助。

我认为您必须在 TZConnection 组件的属性中添加一些行:

在打开与 TZConnection 组件的连接之前,请尝试以下操作:

function openConnection(BD, User, Host, Pass: string; DBConnection: TZConnection): boolean;
begin
    Result:= false;
    if DBConnection = nil then exit;
    DBConnection.HostName := Host; // Host name to connect
    DBConnection.Protocol := 'mysql-5';
    DBConnection.Port     := 3306; //default port
    DBConnection.Database := DB; // your database name
    DBConnection.User     := User;
    DBConnection.Password := Pass;
    DBConnection.Properties.clear;
    DBConnection.Properties.Add('CLIENT_MULTI_STATEMENTS=1');
    DBConnection.Properties.Add('controls_cp=GET_ACP');
    try
        DBConnection.Connect;
        Result:= DBConnection.Connected;    
    except
        On e:Exception do
        begin
            Result:= false;
            ShowMessage(e.Message);
        end;
    end;
end;

相关内容

  • 没有找到相关文章

最新更新