Re: Дочерние объекты TCSApp
Как через делфи освобождать память объектов
TCSApp.DeleteModuleByUserModuleName не работает, пишет Undeclared idetifier
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
TechnologiCS → TechnologiCS → Использование TechnologiCS API → Дочерние объекты TCSApp
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Как через делфи освобождать память объектов
TCSApp.DeleteModuleByUserModuleName не работает, пишет Undeclared idetifier
var TCSobj: ITCS; TCSapp: ITCS_Application; NMK: OleVariant; NMK_par: OleVariant; begin CoInitializeEx(nil, COINIT_APARTMENTTHREADED); TCSobj := CreateOLEObject('CSDN.TCS') as ITCS; TCSapp := TCSobj.LoginEx('*', '*'); NMK := TCSapp.Nomenclatures[5]; NMK.UserModuleName := NMK.UniqueUserModuleName; NMK.Filter.ClearFilter; NMK.Filter.NewFilterItem(NMK.Properties['NAME'], fkSTARTING, 'Ротор'); NMK.Filter.ApplyFilter; NMK.First; while not NMK.EOF do begin MemDataSet.Append; NMK_par := NMK.Properties['Parameters'].AsIDispatch; if (not NMK_par.IsEmpty) then begin If NMK_par.Locate[NMK_par.Properties['PAR_CODE'], 'RS_NMK_DS2', 0] Then ******* NMK.Next; end; NMK_par:=null; TCSapp.DeleteModuleByUserModuleName(NMK.UserModuleName); TCSapp := nil; TCSobj := nil; CoUninitialize; end;
Delphi не хочет компилировать следующую строку: TCSapp.DeleteModuleByUserModuleName(NMK.UserModuleName);
И корректно ли писать так NMK_par:=null; ?
VAshot писал(а):
Delphi не хочет компилировать следующую строку: TCSapp.DeleteModuleByUserModuleName(NMK.UserModuleName);
и правильно, что не хочет
(TCSApp as CSDN_TLB.IOcs_Application2).DeleteModuleByUserModuleName((NMK as IModule2).UserModuleName);
p.s. Вы не злоупотребляли бы OleVariant'ами
(TCSApp as CSDN_TLB.IOcs_Application2).DeleteModuleByUserModuleName((NMK as IModule2).UserModuleName);
Ошибка
[Pascal Error] main.pas(142): E2015 Operator not applicable to this operand type
курсор за "(NMK as IModule2)".
Сергей писал(а):
p.s. Вы не злоупотребляли бы OleVariant'ами
А какие типы в данном случае применимы?
Это мой первый опыт работы с Ole и TechnologiCS, который этим и ограничится, выборкой небольшого набора данных во внешнюю БД.
VAshot писал(а):
А какие типы в данном случае применимы?
NMK: CSDN_TLB.Nomenclatures; NMK_par: CSDN_TLB.NmkParameters;
при таком объявлении должно работать...только в строчке
NMK.UserModuleName := NMK.UniqueUserModuleName;
тоже надо через IModule2 делать
Вот так?
(NMK as IModule2).UserModuleName := (NMK as IModule2).UniqueUserModuleName;
тут работает, но начинает ругаться на методы и свойства Filter.
Тут видимо нужно как-то так делать? Я прав?
Dim Filter As CSDN.Filter Dim FilterItem As CSDN.FilterItem Filter = App.Users.Filter For I = 0 To Filter.Count - 1 Filter.Items(I).Active = False Next I FilterItem = Filter.Add(App.Users.Properties("NAME")) FilterItem.FilterKind = fkSTARTING FilterItem.Condition = "lflflflf" FilterItem.Active = True Filter.Active = True
Ну его пока закоментарили, начал ругаться на
NMK_par := NMK.Properties['Parameters'].AsIDispatch
[Pascal Error] main.pas(108): E2010 Incompatible types: 'INmkParameters' and 'IDispatch'
:(
ломаю голову, почему обращение к одному и тому же Ole объекту в VB Excel и Delphi так отличается.
1.ну да...как-то так
2.
[Pascal Error] main.pas(108): E2010 Incompatible types: 'INmkParameters' and 'IDispatch'
если по-русски, то "несовпадение типов", т.е. типы надо приводить:
NMK_par := NMK.Properties['PARAMETERS'].AsIDispatch as INmkParameters;
можно ещё посмотреть IParameterValues
3.
ломаю голову, почему обращение к одному и тому же Ole объекту в VB Excel и Delphi так отличается.
в vba активно используются "универсальные" переменные variant + неявное приведение типов, а в Delphi такие вольности не допускаются
Ага, спасиб, дошел сам до
NMK_par := NMK.Properties['Parameters'].AsIDispatch as INmkParameters;
Методом и научного и тыка :)
А освобождать так:
NMK_par:=nil;
?
Вот такой фильтр работает, так корректно?
(NMK.Filter as IFilter2).ClearFilter; (NMK.Filter as IFilter2).NewFilterItem(NMK.Properties['NAME'], fkSTARTING, 'Ротор'); (NMK.Filter as IFilter2).ApplyFilter;
Методом и научного и тыка
есть ещё метод хелпа и поиска по форуму)
Вот такой фильтр работает, так корректно?
ну если работает - значит корректно...с точки зрения компилятора
А освобождать так?
так.
з.ы. может проще всётаки на VB?
Из VB сложнее потом подцепиться к FireBird и синхронизировать несколько табличек. По крайней мере, для меня.
P.S. Как же я мечтаю о событиях в TechnologiCS, хотя бы на добавление записи.
Не подскажите, а как достучаться до
Set Ost_NMK = TCSApp.Inventory.NomenclaturesBalance(i)
?
(TCSApp as ITcs_Application2).Inventory.NomenclaturesBalance
И, надеюсь, последний вопросик, как получить это?
Set Ser = Ost_NMK.Properties("NomenclatureSerialNumber").AsIDispatch
по аналогии не прокатывает
ost_NMK_sn := ost_NMK.Properties['NomenclatureSerialNumber'].AsIDispatch as INmkParameters;
Сообщение при выполнении программы: Интерфейс не поддерживается.
VAshot писал(а):
по аналогии не прокатывает
странная аналогия...
почему не INomenclatureSerialNumbers?
можно IPModule, IDModule
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
TechnologiCS → TechnologiCS → Использование TechnologiCS API → Дочерние объекты TCSApp