Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
2-1240598762
buzb
2009-04-24 22:46
2009.06.14
Как разместить компонент над всеми остальными


15-1239121494
theAddon
2009-04-07 20:24
2009.06.14
Помогите написать небольшую программку


2-1240904761
rar
2009-04-28 11:46
2009.06.14
Копирование файла


3-1222059679
ЮЮ
2008-09-22 09:01
2009.06.14
MS Access-овские OLE-объекты. Как с ними работать без Access-а?


9-1180293174
man-1982
2007-05-27 23:12
2009.06.14
GLscene динамическое обновление тестур





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский