Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Problem with ADO WillChangeField event and errortrapping
Message
From
25/10/2000 09:26:05
 
 
To
25/10/2000 02:21:45
General information
Forum:
Visual FoxPro
Category:
Client/server
Miscellaneous
Thread ID:
00433429
Message ID:
00433984
Views:
11
Hi!

Remember, you're using external DLL that does something with linking events between objects, that may be a cause of problems in firing of Error event. VFP6.0 was not designed to support such feature completely.

>Thanks Vlad!
>
>You are right, it works fine when I use 'ON ERROR'.
>
>Although I think it is a bit strange. In a good object model I would expect the Error event to always be fired when an error occurs. Especially when you work in an n-tier solution where you want to distribute the error to the UI.
>
>/Peter
>
>>Hi!
>>
>>Looks like Error event should be defined somewhere in the VFPCOM.DLL ;)
>>
>>Try to use 'ON ERROR' command to define error handler.
>>
>>>I have a problem with the ADO event WillChangeField and errortrapping in VFP6.
>>>I have created a class in VFP6 in which I have implemented the RecordSet events with the method BindEvents in VFPCOM.DLL.
>>>
>>>When the WillChangeField event fires I cancel the field change by setting the parameter adStatus to 4 (adStatusCancel). When I do this Foxpro generates an error dialog with the error; OLE IDispatch exception code 0 from provider: Operation was canceled... This is ok because I assume the error comes from the recordset because I canceled the field change. To trap the error I add the Error event to my class, but I can't get it to fire.
>>>
>>>What am I doing wrong? How can I intercept the error so it doesn't show on the screen?
>>>
>>>Code sample:
>>>loVfpCom = CREATEOBJECT("vfpcom.comutil")
>>>
>>>loConnection = CREATEOBJECT("ADODB.Connection.2.5")
>>>loConnection.ConnectionString = "Provider=SQLOLEDB;Data Source=server;Initial Catalog=data;User ID=sa"
>>>loConnection.Open()
>>>
>>>loRecordSet = CREATEOBJECT("ADODB.Recordset")
>>>loRecordSet.ActiveConnection = loConnection
>>>loRecordSet.CursorType = 1 && adOpenKeySet
>>>loRecordSet.CursorLocation = 3 && adUseClient
>>>loRecordSet.LockType = 4 && adLockBatchOptimistic
>>>loRecordSet.Source = "SELECT * FROM table"
>>>loRecordSet.Open()
>>>
>>>loObject = CREATEOBJECT("MyRecordSet")
>>>loVfpCom.BindEvents(loRecordSet, loObject)
>>>
>>>loRecordSet.MoveFirst()
>>>loRecordSet.Fields(1).Value = "Test"
>>>
>>>DEFINE CLASS MyRecordSet AS Custom
>>>
>>> PROCEDURE WillChangeField(cFields, Fields, adStatus, pRecordset)
>>> adStatus = 4 && adStatusCancel
>>> ENDPROC
>>>
>>> PROCEDURE Error(tnError, tcMethod, tnLine)
>>> ACTIVATE SCREEN
>>> ?tnError, MESSAGE(), tcMethod, tnLine
>>> ENDPROC
>>>ENDDEFINE
>>>
>>>TIA
>>>/Peter
Vlad Grynchyshyn, Project Manager, MCP
vgryn@yahoo.com
ICQ #10709245
The professional level of programmer could be determined by level of stupidity of his/her bugs

It is not appropriate to say that question is "foolish". There could be only foolish answers. Everybody passed period of time when knows nothing about something.
Previous
Reply
Map
View

Click here to load this message in the networking platform