Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между" / 25 сообщений из 26, страница 1 из 2
26.07.2011, 13:38
    #37367284
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
Т.е. если прога обнаружила при инсталляции что БД "старой" версии (тупо по нехватке одного-двух полей в одной-двух таблицах), то она хочет базу проапгрейдить до "новой" версии.
1) добавить новые поля (в моем случае МЕМО)
2) проконвертировать пару-тройку полей String -> Memo

>1) добавить новые поля (в моем случае МЕМО)
На скорую руку накатал (работает):
Код: 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.
39.
40.
41.
42.
43.
44.
45.
46.
47.
Public Sub fnFieldAdd(strTableName As String, strFieldName As String, lngFieldType As Long, _
  Optional lngFieldSize As Long =  255 , Optional bFieldNullable As Boolean = True, _
  Optional bFieldZeroLength As Boolean = True, Optional bFieldUNICODEStrings As Boolean = False)
' strTableName - имя таблицы
' strFieldsName - имя поля в таблице
' lngFieldType -adVarWChar либо adLongVarWChar
' adoConn -существующее ADODB.Connection, наличие базы проверяется

    Dim bResult As Boolean
    Dim adoxCat 'As ADOX.Catalog
    Dim adoxTbl 'As ADOX.Table
    Dim adoxCol 'As ADOX.Column
    
    bResult = False

    Set adoxCat = CreateObject("ADOX.Catalog") 'New ADOX.Catalog
    
    adoxCat.ActiveConnection = adoConn
    
    For Each adoxTbl In adoxCat.Tables
        If adoxTbl.Type = "TABLE" Or adoxTbl.Type = "LINK" Then
            If adoxTbl.Name = strTableName Then
                For Each adoxCol In adoxTbl.Columns
                    If adoxCol.Name = strFieldName Then
                        bResult = True
                        Exit For
                    End If
                Next adoxCol
                If bResult = False Then 'если поля нет, то добавляем его
                    Set adoxCol = CreateObject("ADOX.Column") 'New ADOX.Column
                    With adoxCol
                        .ParentCatalog = adoxCat
                        .Name = strFieldName
                        .Type = lngFieldType  'тип поля
                        If lngFieldType = adVarWChar Then .DefinedSize = lngFieldSize
                        .Properties("Nullable") = bFieldNullable '
                        .Properties("Jet OLEDB:Allow Zero Length").Value = bFieldZeroLength ' разрешение пустых строк
                        .Properties("Jet OLEDB:Compressed UNICODE Strings").Value = bFieldUNICODEStrings 'Сжатие Юникод=Нет
                    End With
                    adoxTbl.Columns.Append adoxCol, lngFieldType
                End If
            End If
        End If
    Next adoxTbl
    
    Set adoxTbl = Nothing
    Set adoxCol = Nothing
End Sub

Ключевой вопрос: поле естественно добавляется в конец. Как его добавить "После поля "ПолеА", т.е. посередке.
Роли это конечно для работоспособности проги наверно не играет, но думается мне что это не прибамбас Access-а, люблю таки порядок.

>2) проконвертировать пару-тройку полей String -> Memo
Пока не делал, но полагаю в цикле приведенной ф-ции
Код: plaintext
1.
               For Each adoxCol In adoxTbl.Columns
                    If adoxCol.Name = strFieldName Then
установить
adoxCol.Type=adLongVarWChar
Так?
...
Рейтинг: 0 / 0
26.07.2011, 13:46
    #37367295
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
Вообще-то, не рекомендуется модифицировать список полей именно "вставкой в середину".
Да и смысл? Правильно спроектированный код проекта никогда не работает с определенным порядком полей таблицы или физическим порядком расположения записей...
...
Рейтинг: 0 / 0
26.07.2011, 13:53
    #37367310
ZezaM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
автор ..Роли это конечно для работоспособности проги наверно не играет..
?
...
Рейтинг: 0 / 0
26.07.2011, 14:05
    #37367337
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
AndreTMВообще-то, не рекомендуется модифицировать список полей именно "вставкой в середину".
Да и смысл? ...Правильно спроектированный код проекта никогда не работает с определенным порядком полей таблицы или физическим порядком расположения записей...
Правы конечно. Я обращаюсь
SELECT/INSERT/UPDATE...WHERE field1='value1', field2='value'
RS!field1 RS!field2

Некая неоднозначность...если новая база, то field1,......fieldNew1,fieldNew2,...fieldN
Если база после апгрейда, то field1,......fieldNew1,fieldNew2

Можно конечно и в новой добавить в конец, но
если в старой версии скажем поля mail_to, save_as, print_to
то добавлять
mail_to, save_as, print_to, mail_cc,mail_bcc
как то противоестественно
а вот так
mail_to, mail_cc,mail_bcc , save_as, print_to
вполне логично

что значит не рекомендуется?
я спрашиваю как сделать. В крайнем случае я могу закончить процедуру апгрейда применением процедуры
"Сжать и восстановить БД", дабы там все утряслось.
...
Рейтинг: 0 / 0
26.07.2011, 14:14
    #37367364
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
порядок полей в таблице совершенно никого не должен волновать, т.к. приложение должно работать с тем порядком, который определён в правильном запросе на выборку с указанием нужных имён и последовательности полей

Код: plaintext
select MyField10 as [Моё поле № 1 ], MyField2 as [Моё поле № 2 ] ... FROM MyTable
...
Рейтинг: 0 / 0
26.07.2011, 14:28
    #37367390
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
Konst_Oneпорядок полей в таблице совершенно никого не должен волновать,...
Меня волнует, я упрямый осел.
Как сделать?

>2) проконвертировать пару-тройку полей String -> Memo
Код: 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.
Public Sub fnFieldToMemo(strTableName As String, strFieldName As String)
' strTableName - имя таблицы
' strFieldsName - имя поля в таблице
' adoConn -существующее ADODB.Connection, наличие базы проверяется

    Dim bResult As Boolean
    Dim adoxCat 'As ADOX.Catalog
    Dim adoxTbl 'As ADOX.Table
    Dim adoxCol 'As ADOX.Column
    
    bResult = False

    Set adoxCat = CreateObject("ADOX.Catalog") 'New ADOX.Catalog
    
    adoxCat.ActiveConnection = adoConn
    
    For Each adoxTbl In adoxCat.Tables
        If adoxTbl.Type = "TABLE" Or adoxTbl.Type = "LINK" Then
            If adoxTbl.Name = strTableName Then
                For Each adoxCol In adoxTbl.Columns
                    If adoxCol.Name = strFieldName Then
                        adoxCol.Type = adLongVarWChar
                        Exit For
                    End If
                Next adoxCol
            End If
        End If
    Next adoxTbl
    
    Set adoxTbl = Nothing
    Set adoxCol = Nothing
End Sub

adoxCol.Type = adLongVarWChar
Run-Time error '3219'
Операция не допускается в данном контексте.

Поля пустые и были "зарезервированы на будущее" как string-255 в предыдущей версии базы, в надежде "чтоб дальше ничего не менять", но тогда "недодумал". Как вариант можно их грохнуть и пересоздать, но хотелось бы решения общей задачи:
конвертация типа с сохранением (по возможности) данных: String->Memo противоречий не вижу и Access это делает.
...
Рейтинг: 0 / 0
26.07.2011, 14:34
    #37367404
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
изменить физический порядок полей в таблице можно только , если заново её пересоздать
...
Рейтинг: 0 / 0
26.07.2011, 14:35
    #37367407
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
на сколько я помню, в акцессе у таблицы может быть только одно поле мемо
...
Рейтинг: 0 / 0
26.07.2011, 14:53
    #37367448
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
Konst_Oneна сколько я помню, в акцессе у таблицы может быть только одно поле мемо
странно, у меня их 5 в одной таблице и 3 в другой
обсуждение начиналось здесь:
Длина текстового поля в mdb: предельное значение 255.
Менял через Access, глюков в "новой версии проги" не заметил.
Сейчас добавлял через adox -добавляются без проблем.
Konst_Oneизменить физический порядок полей в таблице можно только , если заново её пересоздать
У меня все "резервные поля" в "старой" версии базы (включая те для кот. надо менять тип) находятся в конце таблиц.
В этой же "области" предполагается добавление новых полей.

М.б. тупо удалить весь этот "резервный блок" и пересоздать заново в желаемой последовательности и желаемых типов?
И не морочить голову ни себе ни людям?
Двух обозначенных зайцев я этим убиваю.

Кстати, как через adox удалить колонку? даб не искать.
...
Рейтинг: 0 / 0
26.07.2011, 14:58
    #37367455
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
давно с акцессом не связывался, но столбцы только добавлять можно (добавляются физически в конец таблицы). когда вы какой-то столбец в дизайнере акцесса удаляете(или добавляете поле между других столбцов), то фактически сервер акцесса за вас пересоздаёт таблицу заново и перезаливает в неё существующие данные.
...
Рейтинг: 0 / 0
26.07.2011, 15:12
    #37367495
ZezaM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
Дмитрий77,
,на фсех форумах обозначено - тбл - не иммет-границ (начало...конец) ...ура, увы ...
...
Рейтинг: 0 / 0
26.07.2011, 15:56
    #37367611
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
ZezaMна фсех форумах обозначеноДемагогия
Дмитрий77У меня все "резервные поля" в "старой" версии базы (включая те для кот. надо менять тип) находятся в конце таблиц.
В этой же "области" предполагается добавление новых полей.

М.б. тупо удалить весь этот "резервный блок" и пересоздать заново в желаемой последовательности и желаемых типов?
И не морочить голову ни себе ни людям?
Двух обозначенных зайцев я этим убиваю.

Кстати, как через adox удалить колонку? даб не искать.
Код: 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.
Public Sub fnFieldDelete(strTableName As String, strFieldName As String)
' strTableName - имя таблицы
' strFieldsName - имя поля в таблице
' adoConn -существующее ADODB.Connection, наличие базы проверяется

    Dim adoxCat 'As ADOX.Catalog
    Dim adoxTbl 'As ADOX.Table
    
    On Error GoTo ToExit
    
    Set adoxCat = CreateObject("ADOX.Catalog") 'New ADOX.Catalog
    
    adoxCat.ActiveConnection = adoConn
    Set adoxTbl = adoxCat.Tables.Item(strTableName)
    adoxTbl.Columns.Delete strFieldName
    
ToExit:
    
    Set adoxCat = Nothing
    Set adoxTbl = Nothing
End Sub

Public Sub UpdateBD()
    fnFieldDelete "the_table", "old_name_1" 'string
    fnFieldDelete "the_table", "old_name_2"
    fnFieldDelete "the_table", "old_name_3" 'string
    fnFieldDelete "the_table", "old_name_4"
    fnFieldDelete "the_table", "old_name_5" 'string
    '---
    fnFieldAdd "the_table", "old_name_1", adLongVarWChar 'memo
    fnFieldAdd "the_table", "NEW_name_1", adLongVarWChar
    fnFieldAdd "the_table", "NEW_name_2", adLongVarWChar
    fnFieldAdd "the_table", "old_name_2", adVarWChar,  3 
    fnFieldAdd "the_table", "old_name_3", adLongVarWChar 'memo
    fnFieldAdd "the_table", "old_name_4", adVarWChar,  3 
    fnFieldAdd "the_table", "old_name_5", adLongVarWChar 'memo
    '=============================================
...    
End Sub
...
Рейтинг: 0 / 0
26.07.2011, 16:18
    #37367659
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
хозяин - барин, но я бы так вольно обращаться со структурой базы не давал бы пользователям.
...
Рейтинг: 0 / 0
26.07.2011, 16:38
    #37367721
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
Konst_Oneне давал бы пользователям.
А кто им дает? Это делает инсталлятор один раз при установке "новой версии проги" и обнаружении "старой версии базы".
Я же должен сохранить данные, кот. получены при эксплуатации "старой версии проги".
Зачем мне нужны MEMO, я объяснил в ссылке выше (хотя они очень редко могут реально понадобиться).
Что плохого?
При даже откате к "старой версии проги", "новая версия базы" допустима ибо нет обращений к измененным/добавленным полям.
...
Рейтинг: 0 / 0
26.07.2011, 16:42
    #37367732
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
ясно, раз так, то делайте. ссылку не смотрел, поэтому контекст обсуждения неправильно понял.
...
Рейтинг: 0 / 0
26.07.2011, 16:50
    #37367754
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
Дмитрий77Это делает инсталлятор один раз при установке "новой версии проги" и обнаружении "старой версии базы".
Я же должен сохранить данные, кот. получены при эксплуатации "старой версии проги".
Зачем мне нужны MEMO, я объяснил в ссылке выше (хотя они очень редко могут реально понадобиться).
Что плохого?
Я за такую программу-инсталлятор руки бы оторвал, да ими же по морде...

Представь. что я - юзер, да ещё ламер. Есссно у меня бэкапов нет. Я запускаю инсталлятор. На полпути свет гаснет. ИБП есссно у меня тоже нет. Что, всем моим данным пиндык?

Обновление структуры с сохранением данных делается ТОЛЬКО копированием данных из старой структуры (причём переоткрытой монопольно в RO-mode) в новую, с последующим переименованием. Или, если прёт делать это на месте - то сперва бэкап, затем проверка его валидности, и лишь потом alter table.
...
Рейтинг: 0 / 0
26.07.2011, 17:54
    #37367917
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
Akinaруки бы оторвал, да ими же по морде...
Ты, ето... поаккуратнее с регулярными выражениями.
AkinaПредставь. что я - юзер, да ещё ламер. Есссно у меня бэкапов нет. Я запускаю инсталлятор. На полпути свет гаснет. ИБП есссно у меня тоже нет. Что, всем моим данным пиндык?...
А еще у тебя нет лицензии и ты используешь хакнутую прогу, а еще у тебя комп стащили вместе с прогой.

От дураков и дурацких ситуаций защиты нет.
Преобразование, кот. я делаю в данном случае не затрагивают данные, а только перезаписывают пустые поля в конце таблицы.

1) запустишь Access и восстановишь "Сжатие и восстановление БД"
2) прога сама умеет делать "Сжатие и восстановление БД"
3) убьешь базу и прога ее воссоздаст заново, не банк-клиент.
4) напишешь на суппорт и тебе все это подскажут если сам не допрешь
...
Рейтинг: 0 / 0
26.07.2011, 18:54
    #37368006
mds_world
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
Насколько я понимаю, последовательность поле в таблице важна только для автоматически формируемой Datasheet-формы, показывающей таблицу на экране.
...
Рейтинг: 0 / 0
26.07.2011, 19:03
    #37368021
mds_world
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
mds_worldНасколько я понимаю, последовательность поле в таблице важна только для автоматически формируемой Datasheet-формы, показывающей таблицу на экране.
Нет, не совсем так. Последовательность полей важна еще для запросов с неявно формируемым списком (*), а также для обращения к полям не по имени, а по их индексу - Fields(i).
...
Рейтинг: 0 / 0
26.07.2011, 20:00
    #37368069
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
Дмитрий77Akinaруки бы оторвал, да ими же по морде...
Ты, ето... поаккуратнее с регулярными выражениями.
Тебе приходилось восстанавливать данные из баз, которые в результате описанного тобой подхода превращались в "Файл не распознаётся ядром MS Jet как файл базы данных"? Мне - приходилось.
И все эти твои
Дмитрий771) запустишь Access и восстановишь "Сжатие и восстановление БД"
2) прога сама умеет делать "Сжатие и восстановление БД"
3) убьешь базу и прога ее воссоздаст заново, не банк-клиент.
4) напишешь на суппорт и тебе все это подскажут если сам не допрешь
в таких случаях абсолютно бессмысленны, потому что не дают результата.
...
Рейтинг: 0 / 0
26.07.2011, 20:39
    #37368093
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
Akina,

>Тебе приходилось восстанавливать данные из баз, которые в результате описанного тобой подхода превращались в "Файл не >распознаётся ядром MS Jet как файл базы данных"? Мне - приходилось.
Да, приходилось. Успешно. Несколько строк иногда отображались решеточками, революции это не делало.

Специально для Вас напомню, что были заданы 2 вопроса:
1. Как добавить новое поле "После поля "ПолеА", т.е. посередке?
2. Как изменить тип поля String -> Memo?

на которые в общем-то и имело только смысл отвечать.

В вашем посте Вы ничего по сути не сказали.
Однако пост Ваш тянет на личное оскорбление в мой адрес.

Это мое личное дело, почему я так хочу, равно как и где и как, и в какой проге (и каким образом - с backup-ом или нет) я это буду применять.
У меня есть право задать вопрос (возможно глупый), а у Вас есть право на него ответить.
...
Рейтинг: 0 / 0
26.07.2011, 22:24
    #37368172
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
mds_worldПоследовательность полей важна еще для запросов с неявно формируемым списком (*).
Я думаю что для SELECT * WHERE.. (это я использую) последовательность не важна.
mds_worldа также для обращения к полям не по имени, а по их индексу - Fields(i).
Очевидно, важна, но такими конструкциями я не пользуюсь.

По большому счету мне последовательность не важна.
Просто есть дополнительное условие задачи.
Хозяин_Барин == Упрямый_Осел.

Я собственно свою частную несложную задачу решил.
...
Рейтинг: 0 / 0
27.07.2011, 00:51
    #37368246
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
Дмитрий77Специально для Вас напомню, что были заданы 2 вопроса:
1. Как добавить новое поле "После поля "ПолеА", т.е. посередке?
Как уже было сказано, одним запросом невозможно. Вариантов несколько, все предусматривают копирование существующих данных, наиболее быстрый при условии, что в незатрагиваемой "голове" структуры нет объёмных полей - копирование в новую таблицу, иначе возможно, что быстрее вставить поля в хвост в нужном порядке, а после копирования прибить поля в середине структуры (впрочем, что будет быстрее при каждой конкретной схеме изменения и при каждом конкретном заполнении - надо пробовать, обычно всё-таки копирование всей таблицы быстрее).

Дмитрий77 2. Как изменить тип поля String -> Memo?
Созданием мемо-поля и копированием. Три запроса.

Дмитрий77В вашем посте Вы ничего по сути не сказали.
Да ну?
AkinaОбновление структуры с сохранением данных делается ТОЛЬКО копированием данных из старой структуры (причём переоткрытой монопольно в RO-mode) в новую, с последующим переименованием. Или, если прёт делать это на месте - то сперва бэкап, затем проверка его валидности, и лишь потом alter table.
Дмитрий77Однако пост Ваш тянет на личное оскорбление в мой адрес.
Хотите его воспринимать как личный? пжалста... однако это было оскорбление подхода к решению задачи, а тот, кто его использует, просто попал под раздачу.
...
Рейтинг: 0 / 0
27.07.2011, 03:14
    #37368283
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
Akinaвсе предусматривают копирование существующих данных
ТОЛЬКО копированием данных из старой структуры
где вы видите данные? В затрагиваемых полях их нет.
ДмитрийУ меня все "резервные поля" в "старой" версии базы (включая те для кот. надо менять тип) находятся в конце таблиц.
В этой же "области" предполагается добавление новых полей.
Нет данных, ни в меняемых полях, ни в добавляемых.
AkinaХотите его воспринимать как личный? пжалста... однако это было оскорбление подхода к решению задачи, а тот, кто его использует, просто попал под раздачу.
Мне честно говоря все равно. Вероятность отключения света за ту долю секунды, когда преобразуются несколько пустых полей много меньше чем вероятность того что некто "попавший под раздачу" из-за непонимания "оскорбления подхода к решению очередной задачи" попросту возьмет кувалдометр и долбанет по вашему компу с ж.диском и со всеми бэкапами.
Хотите бэкапится, бекапьте вашу систему 24ч в сутки и 7 дней в неделю, и да будет вам счастье. А не хотите, понимайте что может случиться пожар, наводнение и веерное отключение электроэнергии и будьте готовы нести потери.

Скажу больше, глюк БД скорее может произойти при штатной работе программы, ибо в моем случае 2 компонента непрерывно держат коннект с ней в режиме read/write. Мне такие случаи пока не известны.

И вообще, хватит оффтопить уже. Я решил обе задачи, меня так устраивает, и это не противоречит сказанному другими людьми и в том числе Вами. И я не сторонник затыкать "якобы потенциальные уязвимости вероятность кот. практически нуль", такой подход часто приводит к десяткам новых внезапно упавших на голову проблем, проходили и не раз. Мне проще посоветовать пересоздать базу одному юзеру в год, нежли какое-нибудь JRO по непонятным причинам будет давать стабильный высоковероятный crash всего Application из-за раннего например связывания, поищите, найдете топик.
А при очень муштрованном подходе подобные проблемы будут множиться. Извините, опыт.
...
Рейтинг: 0 / 0
27.07.2011, 06:04
    #37368294
шёл
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
Дмитрий77,

Не заметил такой вариант...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Public Sub Modify_Table()
Dim strSQL As String
Dim cnn As ADODB.Connection

Set cnn = CurrentProject.Connection
'добавление поля
'strSQL = "ALTER TABLE [Таблица1] ADD COLUMN [Field1] TEXT(255);"
'cnn.Execute strSQL
'конвертация типа с сохранением данных в Memo
strSQL = "ALTER TABLE [Таблица1] ALTER COLUMN [Field1] LONGTEXT;"
cnn.Execute strSQL
''удаление поля
'strSQL = "ALTER TABLE [Таблица1] DROP COLUMN [Field1];"
'cnn.Execute strSQL
Set cnn = Nothing
End Sub
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между" / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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