Delphi-ZEOS MySQL-拒绝访问
我正在尝试从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组件有什么问题吗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
PS:对不起,我的英文和格式问题您的MySQL服务器来自互联网吗
- 首先:您的internet提供商是否允许您通过管道/套接字连接直接访问MySQL数据库?通常,由于安全问题,互联网提供商不允许这样做。(如果您要求,他们可以为此打开一个特殊的IP/端口)
- 第二:你有拨款的选择吗?这可能导致ZEOS组件出现问题
允许在上使用。到“根”@“%”
使用GRANT选项将
*上的所有权限授予“root”@“%”mydb
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选项将
*上的所有权限授予“root”@“%”mydb
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工作台的图片,一切正常:记住:你的连接正常。只有用户没有选择命令的权限