2010-10-21 84 views
1

天兒真好,MySQL的用戶定義函數來發送窗口消息

我想用從MySQL UDF MySQL的51年5月1日(XP SP3)內部的Windows API的PostMessage的()調用。我知道UDF(寫在Delphi 2006中)正在爲UDF設置一個僞造的結果。

UDF的語法需要兩個整數參數,一個用於窗口句柄,另一個用於消息編號。但是,從我的UDF中調用PostMessage()會在mysqld中導致異常,並停止服務。

任何想法或指針?或者,如果任何人都可以告訴我如何通過AnyDAC和Delphi模擬IB事件,或者當數據庫中的記錄發生變化時獲得通知的替代方法,請給我看看。

--Donovan

+1

如果您發佈了您正在獲取的異常,它將有所幫助... – 2010-10-21 02:14:51

+0

您是否將MySQL作爲服務運行?我不認爲它會訪問您的桌面窗口,如果你這樣做。我不認爲它應該會崩潰。另外Delphi似乎是一種奇怪的語言來編寫MySQL UDF。 – 2010-10-21 02:23:28

+0

歡迎使用堆棧溢出。你的最後一段詢問如何模擬MySQL中的Interbase事件。如果這真的是你想要的,那就問問另一個問題。不要把它埋在一個關於未指定例外的問題中。 – 2010-10-21 02:28:34

回答

1

作爲Windows消息或TCP/IP的替代方案,您可能需要考慮對this question on sending information between two Delphi programsthis question on what named pipes arenamed pipes答案。

--jeroen

+0

謝謝Jeroen, 這是我最終選擇的解決方案。編寫一個自定義的UDF,通過Windows管道將信息發送到應用程序本身,如果它在與數據庫服務器相同的機器上運行,或者通過簡單的套接字服務器應用程序通過TCP分發。 --Donovan – TheEdge 2010-10-22 23:18:46

+0

酷!很高興我能幫上忙。 – 2010-10-23 12:33:13

2

你會碰上這種方法主要是由於這樣的事實,消息只會工作,以相同的訪問級別,並在同一臺計算機上在同一會話中的問題。通過使用其他方法(如TCPIP套接字,MailSlots,內存映射文件等)可以更好地服務您。

爲了最好地模擬發佈消息,我將使用TCPIP UDP。我過去使用的一個很好的輕量級庫是Synapse。來自SVN的突觸庫與Delphi的最新版本運行得相當好。您將要使用的類是TUDPBlockSocket。

+0

好的。所以接下來的問題是UDF是否會在_init中打開套接字,然後在_deinit中關閉它。 – TheEdge 2010-10-21 03:57:50

+0

我會讓這個懶惰的創建。直到事件需要被解僱,你才需要它,所以創建它。在_deinit中檢查是否創建了套接字,如果是,則將其銷燬。保持簡單。 UDP是一個消防忘記協議。你不必等待並聽取回應。 – skamradt 2010-10-21 15:51:33

相關問題