ADO без Microsoft ADO Control в Word 2003, Word XP

Программирование на Visual Basic for Applications
CAPITALIST
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 02.11.2009 (Пн) 14:56

ADO без Microsoft ADO Control в Word 2003, Word XP

Сообщение CAPITALIST » 10.11.2009 (Вт) 9:42

Нужно работать .dbf базой в ворде. Почему без Microsoft ADO Control?
1. Не везде этот компонент установлен, макрос будет запускаться в Word 2003 и Word XP
2. Широко известный глюк "Can't find project or library" устраняется
>alibek 28.09.2005 (Ср) 10:25
>Зайди в VBA, в нем открой References и поищи строчки, в которых будет написано MISSING. А затем переподключи их.
Вот только макрос я пишу не для себя, а для пользователей.

VBA я почти не знаю, поэтому написал dll-ку на Delphi. Но тут проблемы с BDE. Долго объяснять.. Вобщем, на VBA мне нужно:
Query:= TADOQuery.Create(nil); // Создать не привязываясь к форме. Формы нет и не будет
Query.ConnectionString:= 'Provide...'; //Подключиться к dbf
Query.Active:= True; Query.Active:= False; //Закрывать открывать таблицу
Query.Free; //Освобождать запрос
Query.SQL.Add('SELECT * ...'); //добавить строчку на SQL
Query.First; Query.Next;//Перейти к первой, следующей записи
s:= Query.Fields[n].AsString; // Прочитать значение n-го поля
Подскажите ссылку на литературу

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: ADO без Microsoft ADO Control в Word 2003, Word XP

Сообщение alibek » 10.11.2009 (Вт) 9:52

Set cnn = New ADODB.Connection
cnn.Open "Provider=..."
Set rs = New ADODB.Recordset
rs.Open "SELECT ...", cnn
Do Until rs.EOF
s = CStr$(rs.Fields(<index>|<name>).Value)
rs.MoveNext
Loop

Что-то типа того. В rs.Open может по другому, точно не помню.
Lasciate ogni speranza, voi ch'entrate.

CAPITALIST
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 02.11.2009 (Пн) 14:56

Re: ADO без Microsoft ADO Control в Word 2003, Word XP

Сообщение CAPITALIST » 10.11.2009 (Вт) 10:54

>Set cnn = New ADODB.Connection
Compile error:
User-defined type not defined
я этим путем уже шел. Надо подключать Microsoft ADO 2.X Library.
Опять нужно на другом компе переподключать в References
Опять неизвестно будет ли там Microsoft ADO 2.X Library
Последний раз редактировалось CAPITALIST 10.11.2009 (Вт) 11:12, всего редактировалось 1 раз.

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Re: ADO без Microsoft ADO Control в Word 2003, Word XP

Сообщение Calvin » 10.11.2009 (Вт) 11:00

А в место цыкла можно еще использовать метод .copyfromrecordsetю Тогда вообще ракета. Только по-моему этот метод без загодовком полей выдает значение рекодсета....но это совсем не проблема
-Whose the motocycle, is this? -It`s a chopper, baby! -Whose chopper is this? -Zed`s! -Who is Zed? -Zed`s dead, baby, Zed`s dead! :-D

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: ADO без Microsoft ADO Control в Word 2003, Word XP

Сообщение Денис » 10.11.2009 (Вт) 11:31

Почитай спецификацию файла dbf и парси его вручную.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

CAPITALIST
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 02.11.2009 (Пн) 14:56

Re: ADO без Microsoft ADO Control в Word 2003, Word XP

Сообщение CAPITALIST » 10.11.2009 (Вт) 12:50

CStr$ нет такой функции, есть CStr as variant. Как rs.Fields(n) преобразовать в строку?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: ADO без Microsoft ADO Control в Word 2003, Word XP

Сообщение alibek » 10.11.2009 (Вт) 12:52

CAPITALIST писал(а):я этим путем уже шел. Надо подключать Microsoft ADO 2.X Library.
Опять нужно на другом компе переподключать в References
Опять неизвестно будет ли там Microsoft ADO 2.X Library

Если не будет, твой код работать не будет в принципе, как не объявляй.
А если хочешь избавиться от references, используй позднее связывание:
Dim cnn As Object
Set cnn = CreateObject("ADODB.Connection")
Lasciate ogni speranza, voi ch'entrate.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: ADO без Microsoft ADO Control в Word 2003, Word XP

Сообщение alibek » 10.11.2009 (Вт) 12:53

CAPITALIST писал(а):CStr$ нет такой функции, есть CStr as variant. Как rs.Fields(n) преобразовать в строку?

Своей функцией, в зависимости от типа данных.
Lasciate ogni speranza, voi ch'entrate.

CAPITALIST
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 02.11.2009 (Пн) 14:56

Re: ADO без Microsoft ADO Control в Word 2003, Word XP

Сообщение CAPITALIST » 11.11.2009 (Ср) 7:24

>Dim cnn As Object
>Set cnn = CreateObject("ADODB.Connection")
Спасибо!

Теперь такой вопрос:
ADO поступает так с .dbf:
Если установлен BDE работать через него (BDE записи оставляет как есть) Иначе работает сама ADO (конвертирует записи из OEM в ANSI)
Причем без разницы, или я использую делфовский TADOQuery или ВБ-шный ADODB.Connection. Значит дело не в языке а в ADO

Но ведь записи уже в ANSI! Как с этим бороться? Есть ли у объекта ADODB.Connection свойство отвечающее за это?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: ADO без Microsoft ADO Control в Word 2003, Word XP

Сообщение alibek » 11.11.2009 (Ср) 9:04

Указывай правильный провайдер.
В FoxPro-шном можно указывать локаль, если я не ошибаюсь.
Либо исправь DBF-файлы, укажи кодовую страницу.
Lasciate ogni speranza, voi ch'entrate.

CAPITALIST
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 02.11.2009 (Пн) 14:56

Re: ADO без Microsoft ADO Control в Word 2003, Word XP

Сообщение CAPITALIST » 12.11.2009 (Чт) 12:44

alibek писал(а):Указывай правильный провайдер.

%) Ух.. мне делфовский мастер вот такую строку создал:
"Provider=MSDASQL.1;Persist Security Info=False;Data Source=Файлы dBASE;Initial Catalog="
Так что хз как это самому грамотно писать. Где про это можно почитать?
Здесь на форуме мало что про dbf есть. В основном майкрософтовские форматы...

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: ADO без Microsoft ADO Control в Word 2003, Word XP

Сообщение Денис » 12.11.2009 (Чт) 14:14

CAPITALIST писал(а):Где про это можно почитать?

http://www.connectionstrings.com/
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

CAPITALIST
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 02.11.2009 (Пн) 14:56

Re: ADO без Microsoft ADO Control в Word 2003, Word XP

Сообщение CAPITALIST » 16.11.2009 (Пн) 12:17

Спасибо! то что надо!

atom_nb
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 06.03.2010 (Сб) 4:43

Re: ADO без Microsoft ADO Control в Word 2003, Word XP

Сообщение atom_nb » 11.03.2010 (Чт) 9:50

alibek писал(а):Указывай правильный провайдер.
В FoxPro-шном можно указывать локаль, если я не ошибаюсь.
Либо исправь DBF-файлы, укажи кодовую страницу.


Был у меня некоторый опыт по работе с dbf через ADO.
Файлы приходили из разных мест и создавались как чере BDE, так и через FoxPro.
Выяснилось следующее, что в заголовках файлов есть 1-2 байта отвечающие за кодировку.
Значения, которые должны туда записываться, разные для BDE и FoxPro.
В результате приходилось корректировать заголовоки dbf-ников, чтобы VFP-провайдер их все одинаково понимал.


С Jet-провайдером, вообще, интересно: на одних машинах (XP SP2) он игнорировал кодовую страницу в заголовках,
на других, где работала служба обновления Windows, воспринимал все также, как и VFP-провайдер.

Так что надо быть очень внимательным при работе с "dbf" :)


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 33

    TopList