вопрос про ADO: Басик против VC ?
Но ностальгию иногда не прочь половить:)(в плане VB)
И заметил что ADO работает быстрее на VB(вроде был не пьяным):( в принципе на сегоднишних компах это сильно не заметно, но обидно?
Так вот вопрос желательно чтобы многие ответили:))
Как вы соединяетесь люди с БД, что ... вообщем не жалуетесь.Я сижу через #import.
Могет это Dispatch?
И вообще библиотека ADO случаем не на VB написана:)
ADO представляет собой набор COM - объектов. Ему глубоко пофигу, из какого языка его вызывают. Теоретически, на всех языках он работает с одинаковой скоростью. Но не совсем. На VB, при правильном использовании, он должен работать МЕДЛЕННЕЕ, чем на VC по следующей причине:
C помощью VC можно получить напрямую доступ, через интерфейсы, к виртуальной таблице функций. VB такой возможности не имеет. Когда ты вызываешь на VB какой-либо метод, он выполняет следующие шаги:
- Получает указатель на интерфейс IDispatch;
- Вызывает функцию GetIDsOfNames, чтобы получить идентификатор функции по имени.
- Вызывает функцию Invoke, полученный выше идентификатор как параметр.
- Invoke, в свою очередь, вызывает требуемую функцию.
В VC, при правильном использовании, эти шаги отсутствуют. Может, ты чего не так делаешь? Пример:
1) В stdafx.h в конце приписываешь #import "C:\\msado26.tlb" rename("EOF","ADOEOF") no_namespace , или что там у тебя? Может, msado15.dll?
Деректива #import создает в твоем результирующем каталоге файл с расширением .tlh, в котором определены типы т.н. "Интеллектуальных указателей" (с помощью COM_SMARTPTR_TYPEDEF). Эти типы носят название [ИмяИнтерфейса]Ptr.
2). В требуемом месте (где-нить в заголовочном файле) создаем требуемые объекты типа интеллектуального указателя. Например:
_RecordsetPtr mRecordset;
3). Создаем объект (где-нить в инициализации. Например, OnInitDialog) ADODB.Recordset:
mRecordset.CreateInstance("ADODB.Recordset");
4). Вызываем его функции:
mRecordset->[ИмяФункции]([параметры])
Если ты не знаком с интеллектуальными указателями,обрати внимание, что он работает с одной стороны как объект (.CreateInstance(...)) а с другой стороны - как указатель. (->[ИмяФункции]).
Я видимо не правильно выразился:)) Когда в первый раз запускаешь программу. Мне кажется что у VB инициализация Com, происходит быстрее, чем на VC
"C:\\msado26.tlb" rename("EOF","ADOEOF") no_namespace , или что там у тебя? Может, msado15.dll?
у меня msado15.dll
Когда в первый раз запускаешь программу.
Не знаю. Не могу сравнить.