Ошибка при первом запуске программы

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Andr222
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 31.05.2010 (Пн) 10:17
Откуда: Краснодар

Ошибка при первом запуске программы

Сообщение Andr222 » 21.10.2010 (Чт) 13:02

Ситуация такая:
Пишу программу на VB 6.0. Есть база DBF сторонней программы. Я пишу прогу, которая будет выполнять запросы из базы DBF и вести свою базу MDB (Access).
Ошибка возникает при первом запуске программы после запуска VB:
Ошибка -2147467259,[Драйвер ODBC dBase] Выбранная последовательность сортировки не поддерживается операционной системой!
Далее нажимаю на остановку выполнения проекта. Запускаю вновь проект на выполнение, и программа запускается без ошибки.
Использую строку подключения к DBF:
ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;Data Source=dbfFPO;Initial Catalog=" & Text1 & "",
где Text1=Путь к каталогу с базой DBF
Запрос из базы выполняю так:
strSQL = "SELECT [OTDELEN#DBF].KODOTD, [OTDELEN#DBF].NAME From [OTDELEN#DBF] ORDER BY [OTDELEN#DBF].KODOTD"
With Adodc1
.ConnectionString = ConnectionString
.CommandType = adCmdText
.RecordSource = strSQL
.Refresh
.Recordset.MoveFirst
End With
Заметил еще: ошибка возникает иногда при долгом простое VB6, т.е. когда долго редактирую код, просто просматриваю код, без долгого запуска проекта.
И еще, кажется эта ошибка начала выскакивать после установки SP6 на VB6.
Подскажите пожалуйста, как избавиться от этой ошибки?
У вас нет доступа для просмотра вложений в этом сообщении.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Ошибка при первом запуске программы

Сообщение FireFenix » 21.10.2010 (Чт) 13:37

Пуск » Настройка » Панель управления » Язык и региональные стандарты = закладка "Языки", поставить галочку "Установить поддержку языков с письмом иероглифами".

Согласиться с предложением ОС о том, что потребуется дополнительно 230 Мб свободного места на винте, после копирования файлов перезагрузить комп.
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Andr222
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 31.05.2010 (Пн) 10:17
Откуда: Краснодар

Re: Ошибка при первом запуске программы

Сообщение Andr222 » 21.10.2010 (Чт) 13:56

FireFenix писал(а):Пуск » Настройка » Панель управления » Язык и региональные стандарты = закладка "Языки", поставить галочку "Установить поддержку языков с письмом иероглифами".

Согласиться с предложением ОС о том, что потребуется дополнительно 230 Мб свободного места на винте, после копирования файлов перезагрузить комп.


НЕ ПОМОГАЕТ!!! Есть еще какие-нибудь решения? Пожалуйста.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Ошибка при первом запуске программы

Сообщение FireFenix » 21.10.2010 (Чт) 14:03

Играться с настройками кодировки

Или выложи исходник + файл БД
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Andr222
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 31.05.2010 (Пн) 10:17
Откуда: Краснодар

Re: Ошибка при первом запуске программы

Сообщение Andr222 » 21.10.2010 (Чт) 15:13

Исходники не получится, слишком большая база и сложный алгоритм подключение к ней. Долго объяснять, но база очень специфическая, в плане расположения DBF файлов в отдельных папках. Додключение я сделал динамическое, и теперь чтоб работал проект на другой машине, нужна вся база сторонней программы.
Если только отдельный фрагмент проекта, и один DBF файл, чтоб приспособить этот фрагмент на другой машине и попробовать выполнить запрос к одному DBF файлу!
Вот урезанный код, в котором возникает ошибка при открытии набора записей:

Public Sub MDIFormLoad()
Dim adorecRaion As ADODB.Recordset
Dim DB As ADODB.Connection
Dim DirResa As String 'директория DBF файла
Dim ConnectionString As String
Dim strSQL As String
Dim KodRaion As Integer 'переменная для выбора кода района в SQL запросе
KodRaion=1
ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;Data Source=dbfFPO;Initial Catalog=" & DirResa & ""
Set DB = New ADODB.Connection
Set adorecRaion = New ADODB.Recordset
DB.Open ConnectionString
strSQL = "SELECT * From [RAION#DBF] Where ([RAION#DBF].KODRAION) = " & KodRaion & ""
adorecRaion.Open strSQL, DB, adOpenStatic, adLockReadOnly
End Sub

Настройка источника данных dbfFPO во вложенном файле.
Файл RAION.DBF выкладываю, только расширение поменял на .XLS т.к. администрация сайта запрещает выкладывать DBF.
У вас нет доступа для просмотра вложений в этом сообщении.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Ошибка при первом запуске программы

Сообщение Andrey Fedorov » 21.10.2010 (Чт) 15:20

1.
Можно поставить нормальный Microsoft OLE DB Provider for Visual FoxPro 9.0 и подключайся к dbf-кам через него, забыв об ODBC как о страшном сне.

2.
Можно перехватить ошибку и сказать на нее Resume - коннект и откроется...

P.S
По мне так лучше вариант 1.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Andr222
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 31.05.2010 (Пн) 10:17
Откуда: Краснодар

Re: Ошибка при первом запуске программы

Сообщение Andr222 » 21.10.2010 (Чт) 15:28

Вот присмостырил кусок кода к форме. Вот здесь и возникает ошибка.
У вас нет доступа для просмотра вложений в этом сообщении.

Andr222
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 31.05.2010 (Пн) 10:17
Откуда: Краснодар

Re: Ошибка при первом запуске программы

Сообщение Andr222 » 21.10.2010 (Чт) 15:44

Andrey Fedorov писал(а):1.
Можно поставить нормальный Microsoft OLE DB Provider for Visual FoxPro 9.0 и подключайся к dbf-кам через него, забыв об ODBC как о страшном сне.

2.
Можно перехватить ошибку и сказать на нее Resume - коннект и откроется...

P.S
По мне так лучше вариант 1.

Дело в том, что недавно начал изучать VB 6.0 и вообще программирование. Пытался подключаться с помощью других драйверов и провайдеров, ничего не получилось.
Может кинет кто-нибудь пример подключения к базе DBF, со всеми соответствующими настройками системы (источники данных и т.д и т.п.) с помощю Microsoft OLE DB Provider for Visual FoxPro 9.0.
P.S. Почему выбрал провайдера: ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;Data Source=dbfFPO;Initial Catalog=" & DirResa & "", хотелось чтоб стороннее приложение не конфликтовало с моим проектом. Стороннее приложение написано на Delphi, для доступа к базе данных использует BDE. Первое с чем я столкнулся при подключении к базе, это конфликт BDE с моим проектом.Т.е. невозможно было запустить мой проект одновременно с запущенным сторонним приложением. Возникала ошибка № не помню, но где то на форуме нашел как ее исправить. Все вылечилось путем изменения параметра BDE в реестре (в общем отключил BDE). При этом мой проект, заработал со сторонней программой при одновременно запущенных приложениях.

Andr222
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 31.05.2010 (Пн) 10:17
Откуда: Краснодар

Re: Ошибка при первом запуске программы

Сообщение Andr222 » 21.10.2010 (Чт) 16:04

Попробовал подключиться через Microsoft OLE DB Provider for Visual FoxPro 9.0
получилось абракадабра вместо шрифтов! Проект с подключением через Microsoft OLE DB Provider for Visual FoxPro 9.0 выкладываю.
Я думаю, что-то с настройками шрифтов.
У вас нет доступа для просмотра вложений в этом сообщении.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Ошибка при первом запуске программы

Сообщение Andrey Fedorov » 21.10.2010 (Чт) 16:53

Примеры с OLEDB и ODBC в приложенном файле. Для того чтобы OLEDB-провайдер правильно воспринимал кодировку она должна быть указана в 29-м байте DBF-файла - сравни мой RAION.DBF со своим. Может этом можно указать в строке подключения, но я уже не помню...

Для смены кодировок можно воспользоваться утилиткой CPDBF - см в соответствующем каталоге. Описание есть там же.
У вас нет доступа для просмотра вложений в этом сообщении.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Andr222
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 31.05.2010 (Пн) 10:17
Откуда: Краснодар

Re: Ошибка при первом запуске программы

Сообщение Andr222 » 25.10.2010 (Пн) 8:25

Andrey Fedorov писал(а):Примеры с OLEDB и ODBC в приложенном файле. Для того чтобы OLEDB-провайдер правильно воспринимал кодировку она должна быть указана в 29-м байте DBF-файла - сравни мой RAION.DBF со своим. Может этом можно указать в строке подключения, но я уже не помню...

Для смены кодировок можно воспользоваться утилиткой CPDBF - см в соответствующем каталоге. Описание есть там же.


Да, с приложенным файлом OLEDB-провайдер работает. Пробовал утилиткой конвертировать файл DBF, тоже работает. Но все же база DBF сторонняя, и конвертировать файлы нежелательно и не удобно. Может есть другие варианты. Искал настройки OLEDB-провайдера на кодировку текста DOS. Ничего не нашел. И почему ODBC правильно воспринимает кодировку, вот только иногда выдает ошибку о неподдерживаемой сортировке?

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

Re: Ошибка при первом запуске программы

Сообщение alibek » 25.10.2010 (Пн) 8:30

Ну не конвертируй, а заменяй байт в файле в своей программе (перед открытием файла).
Lasciate ogni speranza, voi ch'entrate.

Andr222
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 31.05.2010 (Пн) 10:17
Откуда: Краснодар

Re: Ошибка при первом запуске программы

Сообщение Andr222 » 25.10.2010 (Пн) 9:19

alibek писал(а):Ну не конвертируй, а заменяй байт в файле в своей программе (перед открытием файла).

Как это сделать? Можно примерчик!

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Ошибка при первом запуске программы

Сообщение Andrey Fedorov » 25.10.2010 (Пн) 10:46

Andr222 писал(а):Да, с приложенным файлом OLEDB-провайдер работает. Пробовал утилиткой конвертировать файл DBF, тоже работает.


Утилита не конвертирует, а прописывает кодовую страницу в DBF-файл.

Andr222 писал(а):И почему ODBC правильно воспринимает кодировку, вот только иногда выдает ошибку о неподдерживаемой сортировке?


Там же есть пример обработки данной ошибки ODBC...

Собственно драйвер ODBC очень древний, и, скорей всего просто не знает что в DBF-файле может указываться его кодовая страница. Соответственно всегда воспринимает ее как OEM.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Ошибка при первом запуске программы

Сообщение Andrey Fedorov » 25.10.2010 (Пн) 11:06

Andr222 писал(а):Как это сделать? Можно примерчик!


Ну типа так:

Код: Выделить всё
Option Explicit

Public Sub Main()
    OpenODBC
   
    OpenOLEDB
End Sub

Public Sub OpenOLEDB()
    Dim cn As New ADODB.Connection, r As New ADODB.Recordset
    Dim sFile As String
   
    SetCodePageDbf App.Path & "\RAION.DBF"
   
    On Error GoTo Err_
    cn.CursorLocation = adUseClient
    cn.Provider = "VFPOLEDB.1"
    cn.Open "Data Source=""" & App.Path & """;Collating Sequence=RUSSIAN"
   
    r.Open "SELECT * FROM RAION ORDER BY [NAME]", cn, adOpenStatic, adLockReadOnly
    Debug.Print
    Debug.Print "--== OpenOLEDB ==--"
    Do Until r.EOF
        Debug.Print r!Name
        r.MoveNext
    Loop
    Exit Sub

Err_:
    MsgBox Err.Description, vbCritical
End Sub

Public Sub OpenODBC()
    Dim cn As New ADODB.Connection, r As New ADODB.Recordset

    On Error GoTo Err_
    cn.CursorLocation = adUseClient
    cn.Provider = "MSDASQL.1"
    cn.Open "Persist Security Info=False;Data Source=dBASE Files;Initial Catalog=""" & App.Path & """"
   
    r.Open "SELECT * FROM RAION ORDER BY [NAME]", cn, adOpenStatic, adLockReadOnly
    Debug.Print
    Debug.Print "--== OpenODBC ==--"
    Do Until r.EOF
        Debug.Print r!Name
        r.MoveNext
    Loop
    Exit Sub

Err_:
    If Err.Number = -2147467259 Then If cn.Errors(0).NativeError = -5026 Then Resume
    MsgBox Err.Description, vbCritical
End Sub

Public Sub SetCodePageDbf(sFile As String, Optional iNewCodePage As Byte = &H26)
    Dim iHFile As Integer, iCP As Byte
   
    iHFile = FreeFile
    Open sFile For Binary Access Read Write Lock Write As #iHFile
    Get #iHFile, 30, iCP
    If iCP <> iNewCodePage Then Put #iHFile, 30, iNewCodePage
    Close #iHFile
End Sub
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Andr222
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 31.05.2010 (Пн) 10:17
Откуда: Краснодар

Re: Ошибка при первом запуске программы

Сообщение Andr222 » 25.10.2010 (Пн) 11:19

НЕеее. Я про примерчик программного изменения 29-го байтика в DBF файле на VB 6.0.
Заинриговал меня Provider = "VFPOLEDB.1", закралась мысль изменить в своей программке ОDBC на OLEDB, но вот не решенная проблема с кодировкой русского текста. ЧТО ДЕЛАТЬ? Или добивать ОDBC, и ловить эту ошибку, или переходить на OLEDB, но проблема с кодировкой!!!
И еще вопрос- Что работает быстрее с DBF -----ОDBC или OLEDB?

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Ошибка при первом запуске программы

Сообщение Andrey Fedorov » 25.10.2010 (Пн) 11:29

Andr222 писал(а):НЕеее. Я про примерчик программного изменения 29-го байтика в DBF файле на VB 6.0.


В примере это есть! Смотри внимательней!

Andr222 писал(а):И еще вопрос- Что работает быстрее с DBF -----ОDBC или OLEDB?


Не мерил. Но сам по себе ODBC - еще та древность...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Andr222
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 31.05.2010 (Пн) 10:17
Откуда: Краснодар

Re: Ошибка при первом запуске программы

Сообщение Andr222 » 26.10.2010 (Вт) 7:46

Попробовал и OLEDB и ODBC. И все таки остановился на ODBC, с перехватом данной ошибки, т.к править 29 байт в чужой базе не есть "хорошо", и не известно как на это отреагирует сторонняя программа!
OLEDB приберегу к другому проекту!!!
Выражаю благодарность всем кто поддержал мою тему, в особенности Andrey Fedorov!
Думаю на данный момент тема закрыта!
PS. Хотя если у кого-нибудь возникнут идеи по этому вопросу, пишите. Буду очень признателен!


Вернуться в Базы данных

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

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

    TopList