2017-02-14 2 views
0

Я работаю над Delphi 7 и хочу поделиться ADO-соединением между различными приложениями Delphi. как это сделать с помощью библиотеки типов?Как вернуть TADOConnection из COM (библиотека типов)

при создании методов я могу вернуть только String/integer/some datatype, и я не видел никакого TADOConnection. Как вернуть tADOConnection?

enter image description here

+2

Вы не можете просто сделать класс Delphi в COM-объект. COM возвращает только определенные типы, которые он поддерживает, и класс Delphi не является одним из них. На первый взгляд, то, что вы пытаетесь сделать, кажется гораздо более сложной задачей, чем того стоит. Почему, по-вашему, вам нужно «разделить» AdoConnection между приложениями? Какую пользу вы ожидаете получить? – MartynA

+0

@MartynA: у нас есть базовое приложение, которое нужно запускать все время. Поэтому я хочу создать объект TADOConnection и подключиться к базе данных в базовом приложении и использовать одно и то же соединение во всех других приложениях. – DelphiLearner

+0

Ты знаешь о COM "marshalling"? – MartynA

ответ

1

TADOConnection, наряду со всеми другими объектами TAdoxxx определены в AdoDB.PAS, «сидит на вершине» и использует объекты, которые создаются в ADO подсистемы Windows. Если вы посмотрите на исходный блок D7 AdoInt.Pas, это будет импортировать библиотеку типов из C: \ PROGRAM FILES \ COMMON FILES \ SYSTEM \ ADO \ MSADO15.DLL. Один из интерфейсов объекта , определенных в нем, является _Connection, и это экземпляр этого, который выполняет всю работу для TAdoConnection.

Некоторые из интерфейсных объектов, определенных в AdoInt.Pas работать через границы процессов, наиболее особенно RecordSet объекта, который является объектом ADO уровня, что промежуточные соединения между сервером и Дельфи стороне AdoCustomDataset потомков как TADOQuery, и т. д. В книге Дэвида Сеппы «Программирование ADO» (Microsoft Press) есть глава, и я написал тестовый COM-сервер, который делает объект RecordSet доступным через COM, и он отлично работает.

Однако, насколько я смог установить эксперимент, невозможно, чтобы 0doDonnection или его основополагающий объект ConnectionObject выполняли через процесс границы с использованием COM.

Но если то, что изначально мотивировало ваши мысли в этом направлении, было просто утомительным тем, что нужно постоянно настраивать AdoConnections таким же образом в каждом новом проекте, лично то, что я хотел бы сделать, это просто создать пользовательский потомок TAdoConnection, который устанавливает свойства, которые вы всегда используете в коде, а затем зарегистрируйте его с помощью Delphi, чтобы он отображался на палитре компонентов.

+0

http://stackoverflow.com/questions/3266532/ok-to-use-tadoconnection -in-threads – kobik

+0

@kobik: Спасибо, но я не уверен, что эти ответы правильные, потому что я разделил ConnectionObject между AdoConnections в разных потоках, чтобы упростить получение результатов запроса в фоновом режиме. – MartynA

+1

@kobik: см. Обновление и, возможно, удержаться от соблазна сказать: «Я так вам сказал»; =) – MartynA

Смежные вопросы