1. Matt - MSADO15.ew

Matt,

If you recall, you helped me with a problem using ADO with EuCom.  You 
sent me an email with suggested changes to MSADO15.ew and I can't seem
to put my finger on it.

If you still have that email, could you resend?  

Thanks!

Jonas Temple
http://www.yhti.net/~jktemple

new topic     » topic index » view message » categorize

2. Re: Matt - MSADO15.ew

Jonas Temple wrote:
> 
> Matt,
> 
> If you recall, you helped me with a problem using ADO with EuCom.  You 
> sent me an email with suggested changes to MSADO15.ew and I can't seem
> to put my finger on it.
> 
> If you still have that email, could you resend?  

I don't have it on this machine.  I'll have to take a look when I go home.
Looking at what I do have here with respect to msado15.ew, it looks like
I commented out some interfaces for Connection objects.
global constant
Connection_clsid = "00000514-0000-0010-8000-00AA006D2EA4",
Connection_clsid_ix = add_clsid( Connection_clsid) ,
Connection_disp = add_iid( Connection_clsid_ix, IDispatch),
--Connection_IQuickActivate_ix = add_iid( Connection_clsid_ix, IQuickActivate ),
--Connection_IPersistStreamInit_ix = add_iid( 
--	Connection_clsid_ix, IPersistStreamInit ),
Connection_IConnectionPointContainer_ix = add_iid( 
	Connection_clsid_ix, IConnectionPointContainer )


Also, I think I may have used a different IID for the event interface.
Try these:
global constant
ConnectionEvents = "00000400-0000-0010-8000-00AA006D2EA4",
ConnectionEventsVt = "00000402-0000-0010-8000-00AA006D2EA4",


The ConnectionEventsVt doesn't seem to work, but I get events fired for
the first one.

Matt Lewis

new topic     » goto parent     » topic index » view message » categorize

3. Re: Matt - MSADO15.ew

Matt Lewis wrote:

> I don't have it on this machine.  I'll have to take a look when I go home.
> Looking at what I do have here with respect to msado15.ew, it looks like
> I commented out some interfaces for Connection objects.
> }}}
<eucode>
> global constant
> Connection_clsid = "00000514-0000-0010-8000-00AA006D2EA4",
> Connection_clsid_ix = add_clsid( Connection_clsid) ,
> Connection_disp = add_iid( Connection_clsid_ix, IDispatch),
> --Connection_IQuickActivate_ix = add_iid( Connection_clsid_ix, IQuickActivate
> ),
> --Connection_IPersistStreamInit_ix = add_iid( 
> --	Connection_clsid_ix, IPersistStreamInit ),
> Connection_IConnectionPointContainer_ix = add_iid( 
> 	Connection_clsid_ix, IConnectionPointContainer )
> </eucode>
{{{

> 
> Also, I think I may have used a different IID for the event interface.
> Try these:
> }}}
<eucode>
> global constant
> ConnectionEvents = "00000400-0000-0010-8000-00AA006D2EA4",
> ConnectionEventsVt = "00000402-0000-0010-8000-00AA006D2EA4",
> </eucode>
{{{

> 
> The ConnectionEventsVt doesn't seem to work, but I get events fired for
> the first one.
> 
Matt,

Thanks for the reply!  What is ConnectionEventsVt used for?  I didn't have
that in my MSADO15.ew created by tbrowse.  

When I ran my test program I got the following:

IUnknown::QueryInterface(80004002)
Could not find implemented interface: 00000402-0000-0010-8000-00AA006D2EA4

IUnknown::QueryInterface
Found implemented interface: 00000400-0000-0010-8000-00AA006D2EA4

80020009: Exception occurred.
Exception Source: ADODB.Connection
Exception Description: Operation has been cancelled by the user.
80020009: Exception occurred.
Exception Source: ADODB.Connection
Exception Description: Operation is not allowed when the object is closed.

The problem is I don't know how I cancelled the operation.  Do you have
a working example of connection to a data source with ADO?

Here's my example:

with trace

include eucom.ew
include msado15.ew

atom ado_connect, void, conn_str

com_err_out(1)
ado_connect = create_com_object(Connection_clsid_ix)
conn_str = alloc_bstr("Provider=IBMDA400;Data Source=66.140.221.246")
trace(1)
void = invoke(ado_connect,
{Connection_m_Open},{conn_str},{VT_BSTR},DISPATCH_METHOD)
void = invoke(ado_connect, {Connection_m_Close},{},{},DISPATCH_METHOD)
free(conn_str)

Thanks for your help!

Jonas

new topic     » goto parent     » topic index » view message » categorize

4. Re: Matt - MSADO15.ew

Jonas Temple wrote:
> 
> Thanks for the reply!  What is ConnectionEventsVt used for?  I didn't have
> that in my MSADO15.ew created by tbrowse.  

I believe that I discovered this on the web--after getting the could not
find implemented interface.  I believe that it's the straight vtable 
interface, as opposed to the dispinterface.  Not certain, though.
 
> When I ran my test program I got the following:
> 
> IUnknown::QueryInterface(80004002)
> Could not find implemented interface: 00000402-0000-0010-8000-00AA006D2EA4
> 
> IUnknown::QueryInterface
> Found implemented interface: 00000400-0000-0010-8000-00AA006D2EA4
> 
> 80020009: Exception occurred.
> Exception Source: ADODB.Connection
> Exception Description: Operation has been cancelled by the user.
> 80020009: Exception occurred.
> Exception Source: ADODB.Connection
> Exception Description: Operation is not allowed when the object is closed.
> 
> The problem is I don't know how I cancelled the operation.  Do you have
> a working example of connection to a data source with ADO?
> 

It seems to work if you set up a DSN and then use that as your connect 
string.  Here's my example:

without warning

include eucom.ew
include msado15.ew
atom ado_connect, void, conn_str

com_err_out(1)
ado_connect = create_com_object(Connection_clsid_ix)

-- Event functions for ConnectionEvents
with trace
procedure ConnectionEvents_InfoMessage_proc( atom this, atom pError, atom
adStatus, atom pConnection )
	puts(1,"InfoMessage\n")
end procedure
com_event_routine( ado_connect, ConnectionEvents_InfoMessage, 
	routine_id("ConnectionEvents_InfoMessage_proc" ))
	
procedure ConnectionEvents_BeginTransComplete_proc( atom this, atom
TransactionLevel, atom pError, atom adStatus, atom pConnection )
	puts(1,"BeginTransComplete\n")
end procedure
com_event_routine( ado_connect, ConnectionEvents_BeginTransComplete, 
	routine_id("ConnectionEvents_BeginTransComplete_proc" ))
	
procedure ConnectionEvents_CommitTransComplete_proc( atom this, atom pError,
atom adStatus, atom pConnection )
	puts(1,"CommitTransComplete\n")
end procedure
com_event_routine( ado_connect, ConnectionEvents_CommitTransComplete, 
	routine_id("ConnectionEvents_CommitTransComplete_proc" ))
	
procedure ConnectionEvents_RollbackTransComplete_proc( atom this, atom pError,
atom adStatus, atom pConnection )
	puts(1,"RollbackTransComplete\n")
end procedure
com_event_routine( ado_connect, ConnectionEvents_RollbackTransComplete, 
	routine_id("ConnectionEvents_RollbackTransComplete_proc" ))
	
procedure ConnectionEvents_WillExecute_proc( atom this, atom Source, atom
CursorType, atom LockType, atom Options, atom adStatus, atom pCommand, atom
pRecordset, atom pConnection )
	puts(1,"WillExecute\n")
end procedure
com_event_routine( ado_connect, ConnectionEvents_WillExecute, 
	routine_id("ConnectionEvents_WillExecute_proc" ))
	
procedure ConnectionEvents_ExecuteComplete_proc( atom this, atom
RecordsAffected, atom pError, atom adStatus, atom pCommand, atom pRecordset, atom
pConnection )
	puts(1,"ExecuteComplete\n")
end procedure
com_event_routine( ado_connect, ConnectionEvents_WillConnect, 
	routine_id("ConnectionEvents_ExecuteComplete_proc" ))
	
procedure ConnectionEvents_WillConnect_proc( atom this, atom ConnectionString,
atom UserID, atom Password, atom Options, atom adStatus, atom pConnection )
	puts(1,"WillConnect\n")
end procedure
com_event_routine( ado_connect, ConnectionEvents_WillConnect, 
	routine_id("ConnectionEvents_WillConnect_proc" ))

procedure ConnectionEvents_ConnectComplete_proc( atom this, atom pError, atom
adStatus, atom pConnection )
	puts(1,"ConnectComplete\n")
end procedure
com_event_routine( ado_connect, ConnectionEvents_ConnectComplete, 
	routine_id("ConnectionEvents_ConnectComplete_proc" ))
	
procedure ConnectionEvents_Disconnect_proc( atom this, atom adStatus, atom
pConnection )
puts(1,"Disconnect\n")
end procedure
com_event_routine( ado_connect, ConnectionEvents_Disconnect, 
	routine_id("ConnectionEvents_Disconnect_proc" ))
conn_str = alloc_bstr( "DSN=weapons;" )
void = invoke( ado_connect, {Connection_p_ConnectionString}, {conn_str},
{VT_BSTR}, DISPATCH_PROPERTYPUT )
void = invoke(ado_connect, {"Open"},{},{},DISPATCH_METHOD)

? invoke(ado_connect, {"State"}, {},{}, DISPATCH_PROPERTYGET )

void = invoke(ado_connect, {Connection_m_Close},{},{},DISPATCH_METHOD)
free_bstr(conn_str)

abort(wait_key())


To set up a dsn, go to (Win2K/XP):
Control Panel -> Administrative Tools -> Data Sources (ODBC)

In Win9X, I believe that the ODBC option is right there in Control Panel.

Matt Lewis

new topic     » goto parent     » topic index » view message » categorize

5. Re: Matt - MSADO15.ew

Matt Lewis wrote:
> It seems to work if you set up a DSN and then use that as your connect 
> string.  Here's my example:

Actually, I used an ADO provider, not an ODBC connection!

Your code worked for me!  I changed the connection string to:

conn_str = alloc_bstr("Provider=IBMDA400;Data Source=66.140.221.246;")

and it connected.  After playing around with this for a while what I 
figured out was that my problem was I didn't have routines for the COM
events.  It seems to me that even if the routines don't do anything, 
they are still required.  Is this true?

Thanks again for your help!

Jonas Temple
http://www.yhti.net/~jktemple

new topic     » goto parent     » topic index » view message » categorize

6. Re: Matt - MSADO15.ew

Jonas Temple wrote:
> 
> After playing around with this for a while what I 
> figured out was that my problem was I didn't have routines for the COM
> events.  It seems to me that even if the routines don't do anything, 
> they are still required.  Is this true?
> 

It shouldn't be.  The events should call the event_invoke() routine in
EuCOM, and then EuCOM looks for any event handlers that you've set up
and calls it if it exists.  But then I'm always finding that anything
COM related behaves in ways I wouldn't have guessed.

Matt Lewis

new topic     » goto parent     » topic index » view message » categorize

Search



Quick Links

User menu

Not signed in.

Misc Menu