Форум: "KOL";
Текущий архив: 2009.06.14;
Скачать: [xml.tar.bz2];
ВнизПроблема с KOLComObj Найти похожие ветки
← →
chum (2007-12-14 13:00) [0]Есть вот такая процедурка. Здесь используя SQL-DMO ищутся все доступные SQL сервера и добавляются в ListBox.
procedure TForm1.Button1Click(Sender: PObj);
var
i,j:integer;
CS:string;
V_n:Variant;
begin
CoInitialize(nil);
try
Form.CursorLoad(0,IDC_WAIT);
CS:=ServerEdit.Text;
ServerEdit.Clear;
V_n:=CreateOleObject("SQLDMO.Application");
V_n:=V_n.ListAvailableSQLServers;
j:=V_n.Count;
For I:=1 to J do
ServerEdit.Add(V_n.item(I));
ServerEdit.Text:=CS;
SendMessage(ServerEdit.Handle,CB_SHOWDROPDOWN,1,0);
except
on e: Exception do
ShowMessage(e.Message);
end; // try/except
Form.CursorLoad(0,IDC_ARROW);
end;
Суть проблемы в том, что при использовании библиотеки comobj всё работает замечательно, однако при использовании KOLComObj в строкеServerEdit.Add(V_n.item(I))
возникает исключение: "[SQL-DMO]The passed ordinal is out of range of the specified collection."
В чем может быть проблема????
← →
Vladimir Kladov © (2007-12-14 13:26) [1]Уверены что не 0 to J-1? (Вообще то я не в теме, что такое SQL-DMO не в курсе. Просто подумал, что раз com-объекты делаются на С, то там все индексы начинают с нуля. А может и нет.)
Ещё может быть проблема с вариантами, при преобразовании в строку. Попробуйте сначала присвоить строке (даже наверное WideString), а потом, когда получено значение, дажльше с ним разбираться. Но что-то range мне кажется отнсится именно к границам массива.
← →
chum (2007-12-14 14:02) [2]SQL-DMO - это COM объекты для работы с MS SQL SERVER.
А вот к индексам это не имеет никакого отношения - это точно. Повторюсь, что при использовании comobj, которая поставляется с DELPHI проблем нет, а вот при её замене на KOLComObj, возникает такое исключение.
Прям не понятно... если интересует, могу скинуть весь проект, он на DELPHI 7.
← →
chum (2008-01-29 15:08) [3]Vladimir Kladov
И всё-же проблемка остаётся. В чём косяк. В приведённом примере ошибка возникает в строкеServerEdit.Add(V_n.item(I))
а конкретнее, когда обращаешься к коллекции V_n.item(I).
Очень нужно разобраться.
← →
Dimaxx © (2008-01-29 17:31) [4]Что за код исполняется при вызове item(I)?
← →
chum (2008-01-30 09:43) [5]2 Dimaxx
Из MSDN:
The Item method extracts a member from a SQL Distributed Management Objects (SQL-DMO) container object such as the Databases collection or the NameList object
В моём случае Item относится к NameList. Всё это COM-объекты.
В общем мистика какая-то.
← →
Dimaxx © (2008-01-30 11:53) [6]Смотри код, где описывается item и что вызывается. Возможно Владимир при перегонке кода под КОЛ исправил что-то, что нарушает нормальную работу.
V_n.ListAvailableSQLServers
V_n.Count
V_n.item
Где-то ведь это все описано, иначе компиляция невозможна была бы.
← →
chum (2008-02-01 12:50) [7]Вы вероятно что-то не так поняли.
V_n:Variant; это тип вариант.
Создается объект SQLDMO.Application:
V_n:=CreateOleObject("SQLDMO.Application");
Далее нужно лезть в MSDN и смотреть какие есть методы у этого объекта.
Никакого описания элементов нет.
А проблема заключается в портировании comobj.pas под KOL. Но я не очень понимаю, где и какая ошибочка вкралась.
← →
Dimaxx © (2008-02-01 14:03) [8]А как компилятор будет компилировать строку V_n.ListAvailableSQLServers если он понятия не имеет о методе ListAvailableSQLServers?? Я просто OLE не занимался, поэтому спрашиваю.
← →
mdw © (2008-02-01 17:12) [9]В свое время тоже сталкивался с аналогичной проблеммой. Но потом плюнул, и стал использовать Delphi"йский comobj. Т.к. KOLComObj подглючивает, а при компиляции даже такого кода:
var V: Variant;
....
V:=0;
все равно неявно добавляется модуль Variants (и все что он тянет за собой), хотя в uses и нет его (можно посмотреть, открыв exe файл как текст).
Так что, если что-то присваевается переменной с типом Variant, то делфи линкует Variants... Тогда какой смысл в KOLComObj? Правда может я что-то не понял?
Это относится к D7. А вот в D5, насколько я знаю, смысл использовать KOLComObj кажется есть.
Еще помнится, мне кто то советовал подкладывать пустой Variants.pas, а с переменными работать как то "похитрому", но как не помню, т.к. не получилось....
> А как компилятор будет компилировать строку V_n.ListAvailableSQLServers
> если он понятия не имеет о методе ListAvailableSQLServers?
> ? Я просто OLE не занимался, поэтому спрашиваю.
Там все нормально, связывание идет во время выполнения.
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2009.06.14;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c