Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi-ZEOS MySQL-拒绝访问_Mysql_Delphi_Zeos - Fatal编程技术网

Delphi-ZEOS MySQL-拒绝访问

Delphi-ZEOS MySQL-拒绝访问,mysql,delphi,zeos,Mysql,Delphi,Zeos,我正在尝试从Delphi7应用程序连接到我的mysql数据库服务器(5.6版) 使用Mysql Workbench,它可以正常工作,我可以使用我的测试用户(与不在Delphi7中工作的用户相同)运行select查询 在Delphi中,使用TZEosConn 7.1.4-stable,为DB服务器键入正确的主机名,正确的用户名和密码。。。(参数loginprompt=false) 当我将“已连接”更改为true时,一切正常 但当我尝试执行一个简单的查询时: zq.SQL.Text:='SELECT

我正在尝试从Delphi7应用程序连接到我的mysql数据库服务器(5.6版)

使用Mysql Workbench,它可以正常工作,我可以使用我的测试用户(与不在Delphi7中工作的用户相同)运行select查询

在Delphi中,使用TZEosConn 7.1.4-stable,为DB服务器键入正确的主机名,正确的用户名和密码。。。(参数loginprompt=false) 当我将“已连接”更改为true时,一切正常

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

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

其中zq是TZQuery,x是整数

我遇到了以下错误:**EZSQLException。。为@my_internet_主机名**选择拒绝的命令

当我登录MySQL Workbench时,我看到同一个用户使用通配符会话,比如mydbuser@%,同样的选择可以正常工作

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

在mysql服务器上,我允许使用通配符主机名(简单地说是-“%”-这样所有主机都可以访问我的mysql数据库)

有人能告诉我,我的ZEOS组件有什么问题吗


PS:对不起,我的英文和格式问题

您的MySQL服务器来自互联网吗

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

  • 第二:你有拨款的选择吗?这可能导致ZEOS组件出现问题

    允许在上使用。到“根”@“%”

    使用GRANT选项将
    mydb
    *上的所有权限授予“root”@“%”

如果我记得很清楚的话,在我改变特权之后,就像这样。它使用的是本地网络mysql服务器(经过EasyHP和WAMP测试)

我还建议您使用DSN字符串连接:检查以下连接方式:

您可以将其用于ZeosConnection初始化,还需要注意使用的字符集:iso-8859-1、iso-8859-15、utf-8、ansi。因为Delphi7使用ANSI,而internet服务器通常使用UTF-8等其他工具

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

zq.SQL.Text:='SELECT field FROM database.TABLE where id='+inttostr(x)+';';
zq.ExecSQL;
ExecSQL用于更新、插入、删除命令,通常用于返回记录的select命令使用open命令更方便:

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

我提供了很多途径进行调查,希望能有所帮助。

您的MySQL服务器来自互联网吗

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

  • 第二:你有拨款的选择吗?这可能导致ZEOS组件出现问题

    允许在上使用。到“根”@“%”

    使用GRANT选项将
    mydb
    *上的所有权限授予“root”@“%”

如果我记得很清楚的话,在我改变特权之后,就像这样。它使用的是本地网络mysql服务器(经过EasyHP和WAMP测试)

我还建议您使用DSN字符串连接:检查以下连接方式:

您可以将其用于ZeosConnection初始化,还需要注意使用的字符集:iso-8859-1、iso-8859-15、utf-8、ansi。因为Delphi7使用ANSI,而internet服务器通常使用UTF-8等其他工具

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

zq.SQL.Text:='SELECT field FROM database.TABLE where id='+inttostr(x)+';';
zq.ExecSQL;
ExecSQL用于更新、插入、删除命令,通常用于返回记录的select命令使用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;

我认为您必须在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;

你可以看看我的答案。不要读太多,只读“表格许可”部分。另一部分与此无关。。也许会有帮助。@moskito-x感谢您的回答,我认为表权限没有问题,因为从我的本地PC(相同的hosname IP地址,但不同的应用程序)-同样的东西在mysql workbench上工作,不幸的是,同样的东西在Delphi和Zeos组件上不工作。。。问题是,正如我所说的,zeos组件在用户名之后添加了“错误”的主机名-即。user@11-22-33-44.provider.com并且正确的用户名必须是user@%没有user@%。你总是得到连接的主机。这是MySQL工作台的图片,一切正常:记住:你的连接正常。只有用户没有选择命令的权限。您可以在这里查看我的答案。不要读太多,只读“表格许可”部分。另一部分与此无关。。也许会有帮助。@moskito-x感谢您的回答,我认为表权限没有问题,因为从我的本地PC(相同的hosname IP地址,但不同的应用程序)-同样的东西在mysql workbench上工作,不幸的是,同样的东西在Delphi和Zeos组件上不工作。。。问题是,正如我所说的,zeos组件在用户名之后添加了“错误”的主机名-即。user@11-22-33-44.provider.com并且正确的用户名必须是user@%没有user@%。你总是得到连接的主机。这是MySQL工作台的图片,一切正常:记住:你的连接正常。只有用户没有选择命令的权限