powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Events Binding
14 сообщений из 14, страница 1 из 1
Events Binding
    #32278852
vklepko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

Хотел немного украсить приложение с использованием событий.

Задача простая: из VFP 6.0(SP5) зацепиться за событие RowsCopied из SQLDMO.BulkCopy.
Нижеприведённый код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
oSQLServer = CreateObject( "SQLDMO.SQLServer" )

oSQLServer.Connect( "Server" , "user" , "pwd" )
if !oSQLServer.VerifyConnection( 2 )	&& Is Connected
       return
endif

oDatabase = oSQLServer.Databases( "Northwind" )	&& Select Database
oTable = oDatabase.Tables( "Customers" )	&& Select Table

*oBulkCopy = CreateObject( "SQLDMO.BulkCopy" )	
oBulkCopy = CreateObjectEx( "SQLDMO.BulkCopy" , "")	

oBulkCopy.ImportRowsPerBatch = 1000 	&& Rows per batch/transaction
oBulkCopy.DataFilePath  = "c:\customers.txt "	&& Output file name
oBulkCopy.DataFileType = 3 			&& Column/Row Delimiter file type
oBulkCopy.ColumnDelimiter = "|*| "					
oBulkCopy.RowDelimiter = " |*| "+chr(13 )+chr( 10 )
oBulkCopy.SetCodePage( 0 )			&& Use  1252 

oVFPCOM = CreateObject("VFPCOM.COMUTIL ")			
oBulkCopyEvents = CreateObject(" BulkCopySink ")
oVFPCOM.BindEvents(oBulkCopy,oBulkCopyEvents)

oTable.ExportData(oBulkCopy)

oVFPCOM.UnBindEvents(oBulkCopy,oBulkCopyEvents)

DEFINE CLASS BulkCopySink AS custom
	PROCEDURE BatchImported(Message)
		wait window " Batch " nowait
	ENDPROC
	PROCEDURE RowsCopied(Message, Rows)
		wait window " Rows" nowait
	ENDPROC
ENDDEFINE

ругается
OLE IDispatch exception code 5 from Microsoft SQL-DMO:
Code execution exception:
EXCEPTION_ACCESS_VIOLATION

Помогите понять в чём проблема.


VFPCOM - последний.

Если выполнить
oVFPCOM.ExportEvents(oBulkCopy,"BulkCopy_Events.prg"), то полученный файл никаких методов не содержит. Help говорит, что процедуры должны быть private. Может проблема в этом?

Оба события BatchImported и RowsCopied объявлены как методы VTABLE интерфейса BulkCopySink. Может в VFP как в интерпретаторе раннее связывание не возможно?

Спасибо
...
Рейтинг: 0 / 0
Events Binding
    #32279412
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В VFP7,8 все это без проблем.
В VFP6 действительно надо как-то выкручиваться через VFPCOM, но как это сделать не знаю , потому что давно не работаю с шестеркой.
...
Рейтинг: 0 / 0
Events Binding
    #32281405
vklepko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Установил VFP8.0

Ситуация "улучшилась". Сообщение об ошибке исчезло, но EventHandler() возвращает .F. и, естественно, никакие события не отлавливаются.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
....
oBulkCopyEvents = CreateObject( "BulkCopySink" )
?EventHandler(oBulkCopy,oBulkCopyEvents)

oTable.ExportData(oBulkCopy)

?EventHandler(oBulkCopy,oBulkCopyEvents,.t.)

DEFINE CLASS BulkCopySink AS custom 
implements BulkCopySink IN  "SQLDMO.BulkCopy" 

PROCEDURE BulkCopySink_RowsCopied(Message AS STRING, Rows AS Number) AS VOID;
       HELPSTRING  "Message notifying of every 1000  rows copied"
       wait window  "Rows"  nowait
ENDPROC

PROCEDURE BulkCopySink_BatchImported(Message AS STRING) AS VOID;
       HELPSTRING  "Message notifying of every import batch committed" 
       wait window  "Batch"  nowait
ENDPROC
ENDDEFINE

В чём проблема?
Спасибо
...
Рейтинг: 0 / 0
Events Binding
    #32281486
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Должно быть
IMPLEMENTS BulkCopySink IN "c:\program files\microsoft sql server\80\tools\binn\sqldmo.dll"
Так как интерфейс BulkCopySink объявлен не в соклассе SQLDMO.BulkCopy
Класс BulkCopySink должен быть объявлен не как custom , а как session.
oBulkCopy должно быть создано командой CreateObject , а не CreateObjectEx
(oBulkCopy = CreateObject("SQLDMO.BulkCopy"))
Попробуйте это. Если не поможет, тогда надо серьезней разбираться...
...
Рейтинг: 0 / 0
Events Binding
    #32282541
vklepko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Опробовал все предложенные варианты плюс
IMPLEMENTS BulkCopySink IN {10010001-E260-11CF-AE68-00AA004A34D5}#8.0

Результат тот же - методы BulkCopySink_RowsCopied и BulkCopySink_BatchImported не вызываются.

Также заметил, что имена методов интерфейса BulkCopySink определяются правильно: если в классе не определить один из методов, то VFP ругается и требует его определения. При этом не важно, как ищется информация об интерфейсе- через TypeLib, TypeLibGUID или ProgID.

В чем проблема?
Можно ли узнать причину по которой EventHandler() возвращает .F.?

2Crip
Я так понимаю, на Вашем компьютере этот простой пример работает без проблем?

Спасибо.
...
Рейтинг: 0 / 0
Events Binding
    #32282963
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверил. Не ваяется каменный цветок...
Кстати все объявления implements были правильными и как ни странно CreateObjectEx работает. А вот EventHandler ни в какую...:(((
А что в VB все работает?
...
Рейтинг: 0 / 0
Events Binding
    #32283055
vklepko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На VB я не проверял. Help обещает, что должно работать.
...
Рейтинг: 0 / 0
Events Binding
    #32284762
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообщем выяснили в фоксклубе, что это баг с ранним связыванием.
Могу предложить помощь в написании IDispatсh обертки на C++ или VB
...
Рейтинг: 0 / 0
Events Binding
    #32285578
vklepko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Crip
Не уверен, что это баг.
VFP7.0,VFP7.0(SP1),VFP8.0 - длинный список.
За помощь - спасибо.
...
Рейтинг: 0 / 0
Events Binding
    #32285861
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2vklepko
На фоксклабе я уже писал, что глюк нестабилен. С некоторыми интерфейсам все тип-топ...
...
Рейтинг: 0 / 0
Events Binding
    #32689856
Dushes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2crip
cripВообщем выяснили в фоксклубе, что это баг с ранним связыванием.
Могу предложить помощь в написании IDispatсh обертки на C++ или VB


Сам столкнулся точно с такой же проблемой - описание проблемы на foxclub - если есть возможность обернуть интерфейс SQLDMO.ServerSink в IDispatch - то буду очень благодарен в рамках возможного ;).

С уважением
duШes
...
Рейтинг: 0 / 0
Events Binding
    #32691063
Гость_xxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А сами, ручками, не пробовали ? У меня получилось, только для этого нужно
работать через СOM написанным на VFP. Подробности тут
/topic/96944&pg=-1
А Events Binding глючил и будет, по ходу, глючить еще долго.
...
Рейтинг: 0 / 0
Events Binding
    #32691400
Dushes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гость_xxx А сами, ручками, не пробовали ? У меня получилось, только для этого нужно
работать через СOM написанным на VFP. Подробности тут
/topic/96944&pg=-1

А Events Binding глючил и будет, по ходу, глючить еще долго.

Если можно - объясните неграмотному, из указанного обсуждения мало что понял....интересует больше последовательность действий
С уважением
duШes
...
Рейтинг: 0 / 0
Events Binding
    #32692665
Гость_xxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А что тут пояснять ? Как получить ссылку на интерфейс объекта и связать его посредством Implements с Вашим объектом фокса ?
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Events Binding
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]