2010-10-21 5 views
1

G'Day,MySQL User Defined Function pour envoyer un message windows

Je veux utiliser Windows API PostMessage() appel à l'intérieur d'une UDF MySQL sur MySQL 5.1.51 (XP SP3). Je sais que l'UDF (écrit en Delphi 2006) fonctionne en établissant un faux résultat pour l'UDF.

La syntaxe de l'UDF prend deux paramètres entiers, un pour un handle de fenêtre et l'autre pour un numéro de message. Cependant un appel à PostMessage() depuis mon UDF provoque une exception dans mysqld et le service s'arrête.

Des idées ou des pointeurs? Sinon, si quelqu'un peut me dire comment je suis capable de simuler IB Events pour MySQL via AnyDAC et Delphi OU une autre approche pour obtenir une notification quand un enregistrement a changé dans la base de données alors s'il vous plaît montrez-moi la lumière.

--Donovan

+1

Il serait utile si vous avez posté quelle exception vous obtenez ... –

+0

Vous exécutez MySQL en tant que service? Je ne pense pas qu'il aura accès à vos fenêtres de bureau si vous le faites. Je ne pense pas que ça devrait tomber en panne. Aussi Delphi semble être un langage étrange pour écrire un UDF MySQL. –

+0

Bienvenue dans Stack Overflow. Votre dernier paragraphe demande comment simuler des événements Interbase dans MySQL. Si c'est vraiment ce que vous voulez, alors posez cette question séparément. Ne l'enterrez pas ici dans une question sur les exceptions non spécifiées. –

Répondre

1

Comme alternative à Windows messages ou TCP/IP, vous voudrez peut-être envisager la réponse named pipes à this question on sending information between two Delphi programs et this question on what named pipes are.

--jeroen

+0

Merci Jeroen, C'est la solution avec laquelle j'ai fini par aller. A écrit une fonction UDF personnalisée qui envoie des informations via un tube Windows à l'application elle-même si elle s'exécute sur la même machine que le serveur de base de données ou à une application serveur de socket simple pour la distribuer via TCP. --Donovan – TheEdge

+0

Cool! Content que je puisse être utile. –

2

Votre va rencontrer des problèmes avec cette approche principalement en raison du fait que la messagerie ne fonctionnera au même niveau d'accès, et dans la même session sur le même ordinateur. Vous seriez mieux servi en utilisant d'autres méthodes, telles que les sockets TCPIP, MailSlots, les fichiers mappés en mémoire, ect.

Pour mieux simuler un message, j'utiliserais TCPIP UDP. Une bonne bibliothèque légère que j'ai utilisée dans le passé est Synapse. La bibliothèque de synapse de SVN fonctionne assez bien contre les dernières versions de Delphi. La classe que vous voudrez utiliser pour ceci est le TUDPBlockSocket.

+0

OK. La question suivante est donc de savoir si l'UDF ouvrira le socket dans le _init et le fermera dans le _deinit. – TheEdge

+0

Je voudrais en faire un paresseux créer. Vous n'en avez pas besoin tant que l'événement n'a pas besoin d'être déclenché, alors créez-le. Dans la vérification _deinit pour voir si un socket a été créé et si oui, détruisez-le. Ça reste simple. UDP est un protocole fire and forget. Vous n'êtes pas obligé d'attendre et d'écouter une réponse. – skamradt

Questions connexes