⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 interbaseevents.cpp

📁 SQLAPI C/C++ 连接Oracle 数据库!
💻 CPP
字号:
#include <ibAPI.h>void Check(	const ISC_STATUS &error_code,	ISC_STATUS *pSV,	ibAPI *pibAPI){	SAString sErr;	if(error_code)	{		char sMsg[512];		long nLen;		ISC_STATUS *pvector; // Pointer to pointer to status vector.		// walk through error vector and constract error string		pvector = pSV; // (Re)set to start of status vector.		while((nLen = pibAPI->isc_interprete(sMsg, &pvector)) != 0) // More messages?		{			if(!sErr.IsEmpty())				sErr += "\n";			sErr += SAString(sMsg, nLen);		}		throw SAException(			SA_DBMS_API_Error,			error_code, -1,			sErr);	}}void event_function(char *result, short length, char *updated);typedefstruct tagEventData{	ibAPI *pibAPI;	ibConnectionHandles *pibConnectionHandles;	ISC_STATUS		StatusVector[20];		// Error status vector	ISC_LONG event_id;	char *event_buffer;	char *result_buffer;	long length;	tagEventData()	{		pibAPI = NULL;		pibConnectionHandles = NULL;		event_id = 0;		event_buffer = NULL;		result_buffer = NULL;		length = 0;	}	void que_events()	{		Check(pibAPI->isc_que_events(			StatusVector,			&pibConnectionHandles->m_db_handle,			&event_id,			(short)length,			event_buffer,			(isc_callback)event_function,			this), StatusVector, pibAPI);	}} event_data_t;DWORD WINAPI reque_event(void *pData){	event_data_t &event_data = *(event_data_t*)pData;	printf("%s\n", "reque_event");	try	{		event_data.que_events();	}	catch(char *s)	{		printf("%s\n", s);	}	return 0;}void event_function(char *result, short length, char *updated){	event_data_t &event_data = *(event_data_t*)result;	for(short i = 0; i < length; ++i)		event_data.result_buffer[i] = updated[i];    event_data.pibAPI->isc_event_counts(		(unsigned ISC_LONG *)event_data.StatusVector,		(short)event_data.length,		event_data.event_buffer,		event_data.result_buffer);	static bool bRegistered = false;	if(bRegistered)		printf("Fired!\n");	else		bRegistered = true;	// use another thread to reque	DWORD ThreadId;	HANDLE hThread;	hThread = CreateThread(		NULL, 0,		reque_event, &event_data,		0, &ThreadId);	WaitForSingleObject(hThread, INFINITE);}void InterBaseEvents(){	SAConnection con;	SACommand cmd;	event_data_t event_data;	try	{		con.Connect(			"transfer:d:/temp/siemens/controller.gdb",     // database name			"sysdba",   // user name			"masterkey",   // password			SA_InterBase_Client);		event_data.pibAPI = (ibAPI *)con.NativeAPI();		event_data.pibConnectionHandles = (ibConnectionHandles *)con.NativeHandles();		con.setAutoCommit(SA_AutoCommitOn);		// register interest for "TestEvent" event		event_data.length = event_data.pibAPI->isc_event_block(			&event_data.event_buffer,			&event_data.result_buffer,			1,			"TestEvent");		event_data.que_events();				// this should fire event		cmd.setConnection(&con);		cmd.setCommandText("a");		cmd.Param("sEvent").setAsString() = "TestEvent";		cmd.Execute();		// wait for event to be fired		getchar();	}	catch(SAException &x)	{		// SAConnection::Rollback()		// can also throw an exception		// (if a network error for example),		// we will be ready		try		{			// on error rollback changes			con.Rollback();		}		catch(SAException &)		{		}		// print error message		printf("Err = %s\nCode = %d\n", (const char*)x.ErrText(),			x.ErrNativeCode());	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -