Модераторы: Akina

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> vbscript работа с файлом dbf foxpro 
:(
    Опции темы
Georg4
Дата 19.6.2009, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 961
Регистрация: 2.11.2002

Репутация: нет
Всего: 10



задача у меня была следующая.
Вбскрипт, открывает dbf файл формата  Visual FoxPro  и там изменить свойства всех полей на  not null

застопорился я на том, что:

Код

Dim path_dbf:     path_dbf = "D:\"
Dim basa_dbf:     basa_dbf = "i_yegvas_uaf.dbf"

    Dim cnn:        Set cnn = WScript.CreateObject("ADODB.Connection")
    Dim rst:        Set rst = WScript.CreateObject("ADODB.Recordset")
    
       cnn.Open "Driver={Microsoft Visual FoxPro Driver};" & _
"SourceType=DBF;" & _
"SourceDB="+path_dbf +basa_dbf +";" & _
"Exclusive=No" 

    rst.Open "SELECT * FROM " & basa_dbf, cnn


на последней строчке выдает сообщение 
D:\imdb.vbs(14, 5) Microsoft OLE DB Provider for ODBC Drivers: [Microsoft][ODBC Visual FoxPro Driver]File 'i_yegvas_uaf.dbf' does not exist.


ребята, подскажите, как ДБФник открыть правильно так, чтобы там выполнить команду ALTER  и MODIFY для изменения свойств.




--------------------
Никто и никогда не должен решать одну проблему дважды
PM MAIL ICQ   Вверх
Данкинг
Дата 19.6.2009, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: нет
Всего: 130



Не знаю, как открыть на VB, но много знаю про DBF:
Цитата(Georg4 @  19.6.2009,  18:56 Найти цитируемый пост)
Exclusive=No

Если ты откроешь не эксклюзивно, то никаких ALTER TABLE... у тебя не получится. smile 






--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Georg4
Дата 19.6.2009, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 961
Регистрация: 2.11.2002

Репутация: нет
Всего: 10



Ок, открою эксклюзивно.
Но почему он выдает ошибку на обычном селекте?


--------------------
Никто и никогда не должен решать одну проблему дважды
PM MAIL ICQ   Вверх
Данкинг
Дата 19.6.2009, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: нет
Всего: 130



Цитата(Georg4 @  19.6.2009,  21:17 Найти цитируемый пост)
Но почему он выдает ошибку на обычном селекте? 

Файл-то точно существует?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Georg4
Дата 19.6.2009, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 961
Регистрация: 2.11.2002

Репутация: нет
Всего: 10



В том-то и дело.
Файл, падлюка, никуда не девается. имя в скрипте, это копипаст имени файла. Файл лежит в корне диска Д.
Изначально вообще всё как происходило, до того как я задумался скрипт наваять.
Файл изначально имеет расширение *.pdm. Файл переименовывается в дбф открівается обічнім visual FoxPro и в ручную в едиторе полей таблицы выщёлкивались чекбоксы is null. 
Вот почему я и решил автоматизировать процесс, таких файлов становилось всё больше и больше. Народу было трудно.

Ещё заметил, когда пытался открыть файл через простенькую прогу DBFNavigator он не совсем открылся.  Вернее открывается, но странно. Вниз по строчкам прокручивает до конца, а при попытке прокрутить по столбцам полей вправо (а столбцов там около семидесяти или может чуток меньше) при подходе к концу, навигатор просто закрывается, тупо вырубается даже не выдав ошибку...сам по себе факт непонятный и я насторожился.

Ну да ладно, это всё лирика.

Если не брать в рассчет эту строчку,
Код

rst.Open "SELECT * FROM " & basa_dbf, cnn


То как по простому удостовериться, что файл приконнектился?
Как по простому этот файл приконнектить и вывести хоть что-нибудь из него?


--------------------
Никто и никогда не должен решать одну проблему дважды
PM MAIL ICQ   Вверх
Данкинг
Дата 19.6.2009, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: нет
Всего: 130



А если в строке подключения оставить только path_dbf ? Т.е.

Код

cnn.Open "Driver={Microsoft Visual FoxPro Driver};" & _
"SourceType=DBF;" & _
"SourceDB="+path_dbf";" & _
"Exclusive=No" 

?

Цитата(Georg4 @  20.6.2009,  00:34 Найти цитируемый пост)
Как по простому этот файл приконнектить и вывести хоть что-нибудь из него? 

Почему именно на VB надо? Если у тебя фокс установлен - так пиши прогу на нём. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
DrBoom
Дата 21.6.2009, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


QIP VB-SDK Developer
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 19.2.2006

Репутация: нет
Всего: нет



Georg4, всё это чудо у Вас на VBS для ASP? Вероятно, на этот файл нет просто NTFS прав для чтения\открытия... Попробуйте копировать файл в папку web-узла (если мои догадки верны), а лучше создайте с помощью скриптов этот файл именно в папке узла [тогда точно права будут].


Это сообщение отредактировал(а) DrBoom - 21.6.2009, 12:07
PM MAIL ICQ Jabber   Вверх
Georg4
Дата 21.6.2009, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 961
Регистрация: 2.11.2002

Репутация: нет
Всего: 10



На VBscripte пишу потому что на нём умею, а на фоксе нетsmile Плюс сам фокс у меня не установлен.
А для вбскрипта простого блокнота хватит.
Попробую предложения ваши все в понедельник на работе, авось что получится, отпишусь.


--------------------
Никто и никогда не должен решать одну проблему дважды
PM MAIL ICQ   Вверх
Данкинг
Дата 21.6.2009, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: нет
Всего: 130



Цитата(Georg4 @  21.6.2009,  15:33 Найти цитируемый пост)
На VBscripte пишу потому что на нём умею, а на фоксе нет

Да ладно, аргумент не катит. smile 

Цитата(Georg4 @  21.6.2009,  15:33 Найти цитируемый пост)
Плюс сам фокс у меня не установлен.

Фокс 8.0 поставь(если будешь ставить)  - самое оно. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Georg4
Дата 21.6.2009, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 961
Регистрация: 2.11.2002

Репутация: нет
Всего: 10



Согласен, не катит, но вот просто теперь из интереса, заставить пахать скрипт, ну а если что то и за фокс усядемся....что делать...


--------------------
Никто и никогда не должен решать одну проблему дважды
PM MAIL ICQ   Вверх
Данкинг
Дата 21.6.2009, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: нет
Всего: 130



Цитата(Georg4 @  21.6.2009,  23:19 Найти цитируемый пост)
Согласен, не катит, но вот просто теперь из интереса, заставить пахать скрипт

Ну вот попробуй мой вариант, я в VB, как говорил, мало что понимаю, но, по логике, строка подключения должна быть такой. Или же через ADO ещё проще, но это если фокс установлен и с таблицами размеров не особо больших.

Цитата(Georg4 @  21.6.2009,  23:19 Найти цитируемый пост)
ну а если что то и за фокс усядемся....что делать... 

Давай, а то соответствующий раздел винградовский как-то плохо юзается. smile 

Это сообщение отредактировал(а) Данкинг - 21.6.2009, 22:29


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Georg4
Дата 22.6.2009, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 961
Регистрация: 2.11.2002

Репутация: нет
Всего: 10



Ну что, товарищи, после продолжительных боёв, удалив по совету тов. Данкинга имя базы из СорсДБ и оставив там только путь, смог отобразить базу данных в формате ексель:
Код

Dim path_dbf:     path_dbf = "D:\"
Dim basa_dbf:     basa_dbf = "i_yegvas_uaf.pdm"

    Dim cnn:        Set cnn = WScript.CreateObject("ADODB.Connection")
    Dim rst:        Set rst = WScript.CreateObject("ADODB.Recordset")
    
       cnn.Open "Driver={Microsoft Visual FoxPro Driver};" & _
"SourceType=DBF;" & _
"SourceDB="+path_dbf+";" & _
"Exclusive=YES" 

    rst.Open "SELECT * FROM " & basa_dbf, cnn
  
   Dim XLS
    Set XLS = WScript.CreateObject("Excel.Application")
    
    XLS.WorkBooks.Add

       Dim i
    For i = 0 To rst.Fields.Count - 1
        XLS.Cells(1, i + 1).Value = rst.Fields(i).Name
   Next

   
    XLS.Range("A2").CopyFromRecordset rst 
    
    rst.Close
    cnn.Close

    XLS.Visible = True


Теперь начнутся работы над выполнением команды ALTER с целью убрать свойство всех полей is null


--------------------
Никто и никогда не должен решать одну проблему дважды
PM MAIL ICQ   Вверх
Данкинг
Дата 22.6.2009, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: нет
Всего: 130



Цитата(Georg4 @  22.6.2009,  11:28 Найти цитируемый пост)
смог отобразить базу данных в формате ексель:

А при чём тут Excel? В нём же никаких NULL определённо нет. smile 

Цитата(Georg4 @  22.6.2009,  11:28 Найти цитируемый пост)
Теперь начнутся работы над выполнением команды ALTER с целью убрать свойство всех полей is null 

На фоксе вот так:
Код

ALTER TABLE BASE alter pole not null

(base - название таблицы, pole - название поля)
А здесь тебе надо как-то запросом сиё сделать после подключения к каталогу с таблицами. smile 

Т.е. этот запрос куда-то воткнуть, дабы он работал. smile 

Это сообщение отредактировал(а) Данкинг - 22.6.2009, 11:01


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Georg4
Дата 22.6.2009, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 961
Регистрация: 2.11.2002

Репутация: нет
Всего: 10



Я её просто выкинул в ексель, чтобы понять открылась ли она или нет, и открылась ли полностью..


всвязи с запросом встала следующая проблема, почему то драйвер ругается при представлении ему разных видов запроса.
поколупался в мсдне нашел формат нужного запроса

ALTER TABLE MyTable ALTER COLUMN NullCOl NVARCHAR(20) NOT NULL

пытался вставить код следующий:

Код

rst.Open "SELECT * FROM " & basa_dbf, cnn
   Dim y 
   y=rst.Fields.Count
   rst.Close
 
Dim i
    For i = 0 To y - 1
rst.Open "ALTER TABLE"& basa_dbf & "ALTER COLUMN" & rst.Fields(i).Name & "NOT NULL", cnn
 Next
   cnn.Close


Ругается на Microsoft OLE DB Provider for ODBC Drivers: [Microsoft][ODBC Visual FoxPro Driver]Command contains unrecognized phrase/keyword.

Если убрать первых 4 строчки, то ругатьс прекращает, но нифига не делаетsmile



Есть вариант использовать метод EXECUTE 
Set recordset = connection.Execute (CommandText, RecordsAffected, Options)

но что-то я с ним разобраться не могу...чего-то как её не введу, на формат ругается.


Это сообщение отредактировал(а) Georg4 - 22.6.2009, 11:45


--------------------
Никто и никогда не должен решать одну проблему дважды
PM MAIL ICQ   Вверх
Данкинг
Дата 22.6.2009, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: нет
Всего: 130



Тот запрос, который я написал, у меня отлично работает на самом фоксе. Тебе же нужно:
1. Открыть каталог, в котором находится файл .dbf;
2. Выполнить запрос на изменение с именем этого файла.

Не знаю, как это сделать на VB, но, видимо, connection.Execute более ближе к теме. smile Ну вот пример на JAVA могу привести, там нечто похожее:

Код

//Подключаемся к каталогу с нашим dbf (d:\path):
String url = "jdbc:odbc:Driver={Microsoft dBase Driver (*.dbf)};DBQ=d:\path" ;
Connection con = DriverManager.getConnection(url); 
//выполняем INSERT в таблицу base:
PreparedStatement pps=con.prepareStatement("insert into base values (.......)"); 
pps.executeUpdate(); 

Переложи это на VB, и будет тебе счастье. smile 

Это сообщение отредактировал(а) Данкинг - 22.6.2009, 12:12


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.1401 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.