Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ADO и MS Jet не реагируют на нехватку места на диске / 10 сообщений из 10, страница 1 из 1
22.12.2009, 16:54
    #36380444
nrmBeginner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO и MS Jet не реагируют на нехватку места на диске
Здравствуйте. При создании таблицы и ее заполнении АDO+MS Jet 4.0 не выдают ошибки, а просто в тихую завершается цикл копирования в Recordset и спокойно, как ни в чем не бывало продолжается работа без сообщений об ошибоках и предупреждений. При экспорте данных на дискетку это критично. Существуют ли специальные средства для того чтобы заставить ADO реагировать на нехватку места без проверки количества записей в новой таблице?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
Sub Export(strPath As String)
    Dim connExport As New ADODB.Connection
    Dim RSetFrom As ADODB.Recordset
    Dim RSetTo As ADODB.Recordset
    Dim strFileName As String
    Dim i As Long
    
    connExport.Errors.Clear
    connExport.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=DBASE IV;Data Source=" & strPath
    
    connExport.Errors.Clear
    connExport.Execute "CREATE TABLE " & strFileName & ".DBF" _
    & " (TAB_KEY INTEGER, UNIQUE_ID INTEGER, N_DS DECIMAL(4), N_GROUP DECIMAL(3), SURNAME VARCHAR, NAME VARCHAR);", , adExecuteNoRecords
    
    Set RSetFrom = MainConnection.Execute("SELECT ... FROM ...")
    
    Set RSetTo = New ADODB.Recordset
    RSetTo.Open strFileName, connExport, adOpenDynamic, adLockPessimistic
    
    Do Until RsetFrom.EOF
    'В этом цыкле, если нет места на диске, условие RsetFrom.EOF делается равным True, происходит выход из цыкла и текст выполняется дальше
        RSetTo.AddNew Array( 0 ,  1 ,  2 ,  3 ,  4 ,  5 ), Array(i _
        , RSetFrom.Fields( 0 ).Value _
        , RSetFrom.Fields( 1 ).Value _
        , RSetFrom.Fields( 2 ).Value _
        , RSetFrom.Fields( 3 ).Value _
        , RSetFrom.Fields( 4 ).Value)
        
        RSetFrom.MoveNext
        i = i +  1 
    Loop
    
    RSetFrom.Close
    RSetTo.Close
    Set RSetTo = Nothing
    Set RSetFrom = Nothing
    connExport.Close
    Set connExport = Nothing
End Sub
...
Рейтинг: 0 / 0
22.12.2009, 17:05
    #36380485
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO и MS Jet не реагируют на нехватку места на диске
nrmBeginner'В этом цыкле, если нет места на диске, условие RsetFrom.EOF делается равным True, происходит выход из цыкла и текст выполняется дальше


Что-то не то.
MainConnection у вас же вряд ли на дискете? А RsetFrom открывается как раз из MainConnection
...
Рейтинг: 0 / 0
22.12.2009, 17:15
    #36380519
nrmBeginner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO и MS Jet не реагируют на нехватку места на диске
Shocker.Pro,

В том то все и дело, не понимаю что происходит.
...
Рейтинг: 0 / 0
22.12.2009, 17:18
    #36380535
nrmBeginner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO и MS Jet не реагируют на нехватку места на диске
Public MainConnection as ADODB.Connection

База MainConnection находится на локальном жестком диске
...
Рейтинг: 0 / 0
22.12.2009, 17:21
    #36380543
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO и MS Jet не реагируют на нехватку места на диске
Ну чтобы обойти, можно проверять либо счетчик " i ", либо идентификатор последней записи.

А чтобы понять.....
...
Рейтинг: 0 / 0
22.12.2009, 17:22
    #36380548
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO и MS Jet не реагируют на нехватку места на диске
Код: plaintext
adLockPessimistic 
замените на
Код: plaintext
adLockBatchOptimistic


Код: plaintext
Do Until RsetFrom.EOF
на
Код: plaintext
Do While Not RsetFrom.EOF

и добавьте:

Код: plaintext
1.
2.
3.
    
    [color=orange]RSetTo.UpdateBatch[/color]
    RSetFrom.Close
    RSetTo.Close

и ошибки обработайте с помощью обработчика конечно.
...
Рейтинг: 0 / 0
22.12.2009, 17:44
    #36380639
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO и MS Jet не реагируют на нехватку места на диске
Konst_One
Код: plaintext
Do Until RsetFrom.EOF
на
Код: plaintext
Do While Not RsetFrom.EOF


Я все понимаю, но вот это-то зачем????
...
Рейтинг: 0 / 0
22.12.2009, 17:45
    #36380643
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO и MS Jet не реагируют на нехватку места на диске
привычка и логически понятнее
...
Рейтинг: 0 / 0
22.12.2009, 17:48
    #36380656
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO и MS Jet не реагируют на нехватку места на диске
Отнюдь. Зачем городить лишнюю логическую операцию, когда есть замечательная конструкция "Until". И понятнее - ДЕЛАТЬ ДО ТЕХ ПОР, КОГДА БУДЕТ КОНЕЦ ФАЙЛА.
...
Рейтинг: 0 / 0
22.12.2009, 18:06
    #36380713
nrmBeginner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADO и MS Jet не реагируют на нехватку места на диске
Konst_One,
Все сработало! Благодарю за подсказку.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ADO и MS Jet не реагируют на нехватку места на диске / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]