Вопрос к программистам

0 голосов
спросил 13 Окт, 05 от Viktor1 (280 баллов) в категории Программные продукты Esri

Привет, всем !

Я столкнулся с проблемой отсутствия данных(точнее сказать с их недоступностью)при работе с  ГБД через ADO.

Я создаю воркспейс, а потом создаю адо конекшен

Dim pFDOToADOConnection As IFDOToADOConnection
 Set pFDOToADOConnection = New FdoAdoConnection
 Set gbpADOConnection = New ADODB.Connection
 Set gbpADOConnection = pFDOToADOConnection.CreateADOConnection(gbpWorkspace)
дальше пытаюсь открыть рекордсет используя этот адо конекшен

Dim prstFillObj As New ADODB.RecordSet
Dim pstrSqlStr As String

pstrSqlStr ="Select * From ObjectList"
  prstFillObj.Open pstrSqlStr, gbpADOConnection, adOpenForwardOnly, adLockOptimistic
    If prstFillObj.RecordCount > 0 Then
и блин как не крути но количество записей у меня всегда равно -1image

НО Я ТО ЗНАЮ ЧТО ИХ ТАМ 5!!!

Помогите пожалуйста.

2 Ответы

0 голосов
ответил 18 Окт, 05 от Rinat (220 баллов)
 Я с ГБД соединяюсь таким образом, попробуй так: 

pWorkspaceFactory:= coAccessWorkspaceFactory.Create as IWorkspaceFactory;

pWorkspaceFactory.OpenFromFile('c:\Work\Geodatabase.mdb',0,p WorkSpace);

pFeatureWorkspace:= pWorkSpace as IFeatureWorkspace;

 

pFeatureWorkspace.OpenFeatureClass('Горный отвод',pObjectClass);

pFeatureClass:=pObjectClass as IFeatureClass;

pFeatureClass.FeatureCount(nil,FeatureCount); // Количество записей.

0 голосов
ответил 19 Окт, 05 от Viktor1 (280 баллов)

Одной из проблем ArcObject является очень медленная и неудобная работа с большими обьемами семантической информации(не мудрено ведь предназначение ArcObject  состоит совсем в другом). Приходится использовать ADO. Та же проблема была и у меня.ArcObject   не поддерживает полноценный SQL, а я без него как без рукimage(поставленная задача требует сложных запросов, а обьемы информации - быстрой работы).

Добрые люди подсказали что  ADO нужно конектить напрямую к базе используя для этого стандартный ADO-шный интерфес:

  gbpADOConnection.Provider = "Microsoft.Jet.OLEDB.4.0"
  gbpADOConnection.CursorLocation = adUseClient
  gbpADOConnection.ConnectionString = ConnStr '(путь к базе)
  gbpADOConnection.Mode = adModeReadWrite
  gbpADOConnection.Open
 

ВНИМАНИЕ!!!

Такой метод имеет пару особенностей:

1) конекты АДО и ЕСРАЯ не синхронизированы. Тобишь, делая изменения используя обьекты АДО вы не сразу увидите эти изменения через обьекты ЕСРАЙ (обратное тоже имеет место быть).

2) АДО не работает с графикой и доменами для него ГДБ просто реляционная БД ОБЪЕКТОВ ЕСРАЙ(полигоны, полилинии и т.д.) ОН НЕ ВИДИТ (!)такчто осторожно работайте с таблицами которые включают в себя графику. 

P.S. Ринат, большое вам спасибо за помощь ваш пример очень пригодился мне, хотя и не по этому конкретному вопросу  image

Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...