![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с ADO или ODBC без использования объектов(!) [D5]
RAA © (2002-12-12 15:08:00)У меня есть прогруммулька вида service её размер сейчас получился 18кб....если работать через объект TADOQuery то
Во первых размер проги сразу увеличиваеться на 250 кило((((
А во вторых она у меня просто нивкакую нихочет проходить процедуру MainADO:=TADOQuery.create(nil);
Помогите....конечно хотелось бы не использовать модуль ADODB а сделать всё ручками по новому(!))))
RAA (2002-12-13 21:35:00) [1]asmith >> Друг будь любезен кинь на мыло golovin@samaraenergo.ru
У меня действительно сейчас с временем просто бяда...сессия однако.......
asmith (2002-12-13 17:03:00) [2]Проверь, не остались ли где ссылки на неиспользуемые модули (uses). Можно также включить генерацию линкером Мар-файла и поразглядывать его на предмет наличия ненужных модулей. А кроме того, стоит соптимизировать (в смысле немного порезать) ADODB_TLB.PAS, если нет времени и желания это делать - могу прислать его мылом.
RAA (2002-12-12 21:50:00) [3]asmith У меня как-то странно без всякой инфростуктуры размер проги разросся до 263 кило(((((((
RAA (2002-12-12 20:01:00) [4]Пасибо Вам(!)
Завтра опробую(!)))
asmith (2002-12-12 19:48:00) [5]sniknik почти прав - Project->Import Type Library->выбираешь Microsoft ActiveX Data Objects 2.X Library->выключаешь внизу Generate Component Wrapper->жмешь Create Unit->Delphi сгенерит ADODB_TLB.PAS - юзаем для работы с ADO только ее и больши ничего! Включаем ее в проект и далее как ранее описывалось. И все эти Connection, Recordset и все остальное - описано в ней. Кстати, вместо этого подхода (раннего связывания) можешь вместо Connection, Recordset написать просто OleVariant и заюзать позднее связывание примерно так:
var
aConnection : OleVariant;
Data : OleVariant;
...
CoInitialize(nil);
aConnection := CreateOleObject("ADODB.Connection");
...
Data := CreateOleObject("ADODB.Recordset");
и так далее.
RAA (2002-12-12 19:24:00) [6]Да с модулями adodb и activex TADOQuery заработал но и размер практически с никакой структурой весит 440кило(!)))
asmith - плз поподробней распиши что и как надо сделать(!)))
sniknik (2002-12-12 18:09:00) [7]CoInitialize(); в ActiveX
а для остального сделай импорт ADO, меню Component-> Import ActiveX Control. по моему речь об этом.
а вот модуль adodb и другие тебе не нужен без лишних килобайт не обойдется. :о)
RAA (2002-12-12 17:59:00) [8]Я даже подключил модуль adodb целиком но всё равно он так и не нашёл CoInitialize();
Если не сложно опиши поподробнее(!) плз(!)
RAA (2002-12-12 17:44:00) [9]aConnection : Connection;
А :Connection это из какого модуля?
asmith пасибо тебе уже более понятно куда двигаться(!)))
asmith (2002-12-12 16:57:00) [10]Я это проходил, нужно было в сервисе работать с ADO и не хотелось, чтобы написанный без VCL сервис сильно раздулся. Импортировал биб-ку типов ADO и работал напрямую с интерфейсами примерно так (обработка ошибок опущена для компактности):
var
szConnStr : string;
aConnection : Connection;
Data : Recordset;
szQueryString : string;
...
CoInitialize(nil); // это обязательно-без этого видимо твоя TADOQuery не работала
aConnection := CoConnection.Create();
szConnStr := GetConnectionString();
OleVariant(aConnection).Open(szConnection);
Data := CoRecordset.Create();
Data.Set_ActiveConnection(aConnection);
Data.CursorLocation := adUseClient;
szQueryString := "select * from SomeTable";
Data.Open(szQueryString, szConnection, adOpenKeyset, adLockBatchOptimistic, adCmdText);
// using data here
Data.Close();
Data := nil;
aConnection := nil;
CoUninitialize();
...
Если размер покажется великоватым (не будет 250 к, но все же), можно руками вычистить модуль импорта биб-ки типа от вещей, которые не будут использоваться), у меня после этого сервисы с довольно развитой функциональностью весили порядка 70 К.