2016-02-24 47 views
0

我試圖連接到我的MySQL數據庫服務器(版本5.6),德爾福7應用程序...德爾福 - ZEOS的MySQL - 訪問在網絡上否認

與MySQL工作臺,它的工作原理確定,我可以運行選擇查詢與我的測試用戶(相同的用戶,不工作在德爾福7)...

在德爾福,使用TZEosConn 7.1.4穩定,鍵入正確的主機名數據庫服務器,正確的用戶名和密碼... (參數loginprompt = false) 當我更改「連接」爲真,一切工作正常...

但是,當我試圖執行SIM ple查詢:

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

其中ZQ是TZQuery和X是整數,

我得到這個錯誤:** EZSQLException .. SELECT命令拒絕@my_internet_hostname **

,當我在我的MySQL記錄工作臺,我看到與通配符會話相同的用戶,如mydbuser @%,同樣的選擇工作正常

所以我認爲,問題是在ZEOS組件,它自動添加我的互聯網提供商主機名...

上的MySQL服務器我已經允許通配符主機名(簡單 - 「%」 - 所以所有主機都可以訪問我的MySQL數據庫)

可有人建議我,什麼是我的ZEOS組件的問題???

PS:對不起,我的英語和格式化

+0

你可以看看我的答案在這裏。不要只閱讀「表格的使用」部分。另一部分與此無關。[權限](http://stackoverflow.com/a/27553279/1322642)。也許它有幫助。 –

+0

@ moskito-x謝謝你的答案,我認爲沒有問題的表權限,因爲從我的本地PC(相同的主機名IP地址,但不同的應用程序) - 同樣的事情工作在mysql工作臺,不幸的是,同樣的事情沒有在使用Zeos組件的Delphi中工作...問題是,正如我所說,zeos組件在用戶名後添加了「錯誤的」主機名 - 即[email protected]和正確的用戶名必須是user @ % – Fero

+0

沒有用戶@%。你總是得到連接來自的主機。 –

回答

0

請問你的MySQL服務器是從互聯網上?

  • 首先:貴的互聯網服務提供商允許您直接與管道/插座聯接訪問MySQL數據庫?由於安全問題,通常互聯網提供商不允許這樣做。 (如果你問他們,他們可以打開一個特殊的IP /端口)。

  • 第二:你有沒有授予選項?這可能會導致ZEOS組件出現問題。

    授權使用 TO '根' @ '%'

    GRANT ALL PRIVILEGES ON mydb。* TO '根' @ '%' WITH GRANT OPTION

如果我記得很清楚,之後我改變特權像這樣的作品。它與本地網絡mysql服務器(經過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'; 

U可以使用它爲您的ZEOSConnexion初始化,而且要小心什麼是使用的字符集:iso-8859-1,iso-8859-15,utf-8,ansi。因爲德爾福7使用ANSI,和互聯網服務器經常使用其他像UTF-8。

反正我看到的錯誤代碼:

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

ExecSQL用於UPDATE,INSERT,DELETE命令,通常選擇命令返回的記錄,更方便使用open命令:

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

我給很多調查路徑,我希望它有幫助。

0

我認爲你必須在你的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;