|
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
|
|||
---|---|---|---|
#18+
Т.е. если прога обнаружила при инсталляции что БД "старой" версии (тупо по нехватке одного-двух полей в одной-двух таблицах), то она хочет базу проапгрейдить до "новой" версии. 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.
Ключевой вопрос: поле естественно добавляется в конец. Как его добавить "После поля "ПолеА", т.е. посередке. Роли это конечно для работоспособности проги наверно не играет, но думается мне что это не прибамбас Access-а, люблю таки порядок. >2) проконвертировать пару-тройку полей String -> Memo Пока не делал, но полагаю в цикле приведенной ф-ции Код: plaintext 1.
adoxCol.Type=adLongVarWChar Так? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2011, 13:38 |
|
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
|
|||
---|---|---|---|
#18+
Вообще-то, не рекомендуется модифицировать список полей именно "вставкой в середину". Да и смысл? Правильно спроектированный код проекта никогда не работает с определенным порядком полей таблицы или физическим порядком расположения записей... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2011, 13:46 |
|
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
|
|||
---|---|---|---|
#18+
автор ..Роли это конечно для работоспособности проги наверно не играет.. ? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2011, 13:53 |
|
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
|
|||
---|---|---|---|
#18+
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 вполне логично что значит не рекомендуется? я спрашиваю как сделать. В крайнем случае я могу закончить процедуру апгрейда применением процедуры "Сжать и восстановить БД", дабы там все утряслось. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2011, 14:05 |
|
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
|
|||
---|---|---|---|
#18+
порядок полей в таблице совершенно никого не должен волновать, т.к. приложение должно работать с тем порядком, который определён в правильном запросе на выборку с указанием нужных имён и последовательности полей Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2011, 14:14 |
|
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
|
|||
---|---|---|---|
#18+
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.
adoxCol.Type = adLongVarWChar Run-Time error '3219' Операция не допускается в данном контексте. Поля пустые и были "зарезервированы на будущее" как string-255 в предыдущей версии базы, в надежде "чтоб дальше ничего не менять", но тогда "недодумал". Как вариант можно их грохнуть и пересоздать, но хотелось бы решения общей задачи: конвертация типа с сохранением (по возможности) данных: String->Memo противоречий не вижу и Access это делает. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2011, 14:28 |
|
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
|
|||
---|---|---|---|
#18+
изменить физический порядок полей в таблице можно только , если заново её пересоздать ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2011, 14:34 |
|
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
|
|||
---|---|---|---|
#18+
на сколько я помню, в акцессе у таблицы может быть только одно поле мемо ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2011, 14:35 |
|
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
|
|||
---|---|---|---|
#18+
Konst_Oneна сколько я помню, в акцессе у таблицы может быть только одно поле мемо странно, у меня их 5 в одной таблице и 3 в другой обсуждение начиналось здесь: Длина текстового поля в mdb: предельное значение 255. Менял через Access, глюков в "новой версии проги" не заметил. Сейчас добавлял через adox -добавляются без проблем. Konst_Oneизменить физический порядок полей в таблице можно только , если заново её пересоздать У меня все "резервные поля" в "старой" версии базы (включая те для кот. надо менять тип) находятся в конце таблиц. В этой же "области" предполагается добавление новых полей. М.б. тупо удалить весь этот "резервный блок" и пересоздать заново в желаемой последовательности и желаемых типов? И не морочить голову ни себе ни людям? Двух обозначенных зайцев я этим убиваю. Кстати, как через adox удалить колонку? даб не искать. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2011, 14:53 |
|
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
|
|||
---|---|---|---|
#18+
давно с акцессом не связывался, но столбцы только добавлять можно (добавляются физически в конец таблицы). когда вы какой-то столбец в дизайнере акцесса удаляете(или добавляете поле между других столбцов), то фактически сервер акцесса за вас пересоздаёт таблицу заново и перезаливает в неё существующие данные. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2011, 14:58 |
|
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
|
|||
---|---|---|---|
#18+
Дмитрий77, ,на фсех форумах обозначено - тбл - не иммет-границ (начало...конец) ...ура, увы ... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2011, 15:12 |
|
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
|
|||
---|---|---|---|
#18+
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.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2011, 15:56 |
|
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
|
|||
---|---|---|---|
#18+
хозяин - барин, но я бы так вольно обращаться со структурой базы не давал бы пользователям. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2011, 16:18 |
|
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
|
|||
---|---|---|---|
#18+
Konst_Oneне давал бы пользователям. А кто им дает? Это делает инсталлятор один раз при установке "новой версии проги" и обнаружении "старой версии базы". Я же должен сохранить данные, кот. получены при эксплуатации "старой версии проги". Зачем мне нужны MEMO, я объяснил в ссылке выше (хотя они очень редко могут реально понадобиться). Что плохого? При даже откате к "старой версии проги", "новая версия базы" допустима ибо нет обращений к измененным/добавленным полям. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2011, 16:38 |
|
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
|
|||
---|---|---|---|
#18+
ясно, раз так, то делайте. ссылку не смотрел, поэтому контекст обсуждения неправильно понял. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2011, 16:42 |
|
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
|
|||
---|---|---|---|
#18+
Дмитрий77Это делает инсталлятор один раз при установке "новой версии проги" и обнаружении "старой версии базы". Я же должен сохранить данные, кот. получены при эксплуатации "старой версии проги". Зачем мне нужны MEMO, я объяснил в ссылке выше (хотя они очень редко могут реально понадобиться). Что плохого? Я за такую программу-инсталлятор руки бы оторвал, да ими же по морде... Представь. что я - юзер, да ещё ламер. Есссно у меня бэкапов нет. Я запускаю инсталлятор. На полпути свет гаснет. ИБП есссно у меня тоже нет. Что, всем моим данным пиндык? Обновление структуры с сохранением данных делается ТОЛЬКО копированием данных из старой структуры (причём переоткрытой монопольно в RO-mode) в новую, с последующим переименованием. Или, если прёт делать это на месте - то сперва бэкап, затем проверка его валидности, и лишь потом alter table. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2011, 16:50 |
|
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
|
|||
---|---|---|---|
#18+
Akinaруки бы оторвал, да ими же по морде... Ты, ето... поаккуратнее с регулярными выражениями. AkinaПредставь. что я - юзер, да ещё ламер. Есссно у меня бэкапов нет. Я запускаю инсталлятор. На полпути свет гаснет. ИБП есссно у меня тоже нет. Что, всем моим данным пиндык?... А еще у тебя нет лицензии и ты используешь хакнутую прогу, а еще у тебя комп стащили вместе с прогой. От дураков и дурацких ситуаций защиты нет. Преобразование, кот. я делаю в данном случае не затрагивают данные, а только перезаписывают пустые поля в конце таблицы. 1) запустишь Access и восстановишь "Сжатие и восстановление БД" 2) прога сама умеет делать "Сжатие и восстановление БД" 3) убьешь базу и прога ее воссоздаст заново, не банк-клиент. 4) напишешь на суппорт и тебе все это подскажут если сам не допрешь ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2011, 17:54 |
|
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
|
|||
---|---|---|---|
#18+
Насколько я понимаю, последовательность поле в таблице важна только для автоматически формируемой Datasheet-формы, показывающей таблицу на экране. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2011, 18:54 |
|
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
|
|||
---|---|---|---|
#18+
mds_worldНасколько я понимаю, последовательность поле в таблице важна только для автоматически формируемой Datasheet-формы, показывающей таблицу на экране. Нет, не совсем так. Последовательность полей важна еще для запросов с неявно формируемым списком (*), а также для обращения к полям не по имени, а по их индексу - Fields(i). ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2011, 19:03 |
|
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
|
|||
---|---|---|---|
#18+
Дмитрий77Akinaруки бы оторвал, да ими же по морде... Ты, ето... поаккуратнее с регулярными выражениями. Тебе приходилось восстанавливать данные из баз, которые в результате описанного тобой подхода превращались в "Файл не распознаётся ядром MS Jet как файл базы данных"? Мне - приходилось. И все эти твои Дмитрий771) запустишь Access и восстановишь "Сжатие и восстановление БД" 2) прога сама умеет делать "Сжатие и восстановление БД" 3) убьешь базу и прога ее воссоздаст заново, не банк-клиент. 4) напишешь на суппорт и тебе все это подскажут если сам не допрешь в таких случаях абсолютно бессмысленны, потому что не дают результата. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2011, 20:00 |
|
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
|
|||
---|---|---|---|
#18+
Akina, >Тебе приходилось восстанавливать данные из баз, которые в результате описанного тобой подхода превращались в "Файл не >распознаётся ядром MS Jet как файл базы данных"? Мне - приходилось. Да, приходилось. Успешно. Несколько строк иногда отображались решеточками, революции это не делало. Специально для Вас напомню, что были заданы 2 вопроса: 1. Как добавить новое поле "После поля "ПолеА", т.е. посередке? 2. Как изменить тип поля String -> Memo? на которые в общем-то и имело только смысл отвечать. В вашем посте Вы ничего по сути не сказали. Однако пост Ваш тянет на личное оскорбление в мой адрес. Это мое личное дело, почему я так хочу, равно как и где и как, и в какой проге (и каким образом - с backup-ом или нет) я это буду применять. У меня есть право задать вопрос (возможно глупый), а у Вас есть право на него ответить. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2011, 20:39 |
|
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
|
|||
---|---|---|---|
#18+
mds_worldПоследовательность полей важна еще для запросов с неявно формируемым списком (*). Я думаю что для SELECT * WHERE.. (это я использую) последовательность не важна. mds_worldа также для обращения к полям не по имени, а по их индексу - Fields(i). Очевидно, важна, но такими конструкциями я не пользуюсь. По большому счету мне последовательность не важна. Просто есть дополнительное условие задачи. Хозяин_Барин == Упрямый_Осел. Я собственно свою частную несложную задачу решил. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2011, 22:24 |
|
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
|
|||
---|---|---|---|
#18+
Дмитрий77Специально для Вас напомню, что были заданы 2 вопроса: 1. Как добавить новое поле "После поля "ПолеА", т.е. посередке? Как уже было сказано, одним запросом невозможно. Вариантов несколько, все предусматривают копирование существующих данных, наиболее быстрый при условии, что в незатрагиваемой "голове" структуры нет объёмных полей - копирование в новую таблицу, иначе возможно, что быстрее вставить поля в хвост в нужном порядке, а после копирования прибить поля в середине структуры (впрочем, что будет быстрее при каждой конкретной схеме изменения и при каждом конкретном заполнении - надо пробовать, обычно всё-таки копирование всей таблицы быстрее). Дмитрий77 2. Как изменить тип поля String -> Memo? Созданием мемо-поля и копированием. Три запроса. Дмитрий77В вашем посте Вы ничего по сути не сказали. Да ну? AkinaОбновление структуры с сохранением данных делается ТОЛЬКО копированием данных из старой структуры (причём переоткрытой монопольно в RO-mode) в новую, с последующим переименованием. Или, если прёт делать это на месте - то сперва бэкап, затем проверка его валидности, и лишь потом alter table. Дмитрий77Однако пост Ваш тянет на личное оскорбление в мой адрес. Хотите его воспринимать как личный? пжалста... однако это было оскорбление подхода к решению задачи, а тот, кто его использует, просто попал под раздачу. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2011, 00:51 |
|
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
|
|||
---|---|---|---|
#18+
Akinaвсе предусматривают копирование существующих данных ТОЛЬКО копированием данных из старой структуры где вы видите данные? В затрагиваемых полях их нет. ДмитрийУ меня все "резервные поля" в "старой" версии базы (включая те для кот. надо менять тип) находятся в конце таблиц. В этой же "области" предполагается добавление новых полей. Нет данных, ни в меняемых полях, ни в добавляемых. AkinaХотите его воспринимать как личный? пжалста... однако это было оскорбление подхода к решению задачи, а тот, кто его использует, просто попал под раздачу. Мне честно говоря все равно. Вероятность отключения света за ту долю секунды, когда преобразуются несколько пустых полей много меньше чем вероятность того что некто "попавший под раздачу" из-за непонимания "оскорбления подхода к решению очередной задачи" попросту возьмет кувалдометр и долбанет по вашему компу с ж.диском и со всеми бэкапами. Хотите бэкапится, бекапьте вашу систему 24ч в сутки и 7 дней в неделю, и да будет вам счастье. А не хотите, понимайте что может случиться пожар, наводнение и веерное отключение электроэнергии и будьте готовы нести потери. Скажу больше, глюк БД скорее может произойти при штатной работе программы, ибо в моем случае 2 компонента непрерывно держат коннект с ней в режиме read/write. Мне такие случаи пока не известны. И вообще, хватит оффтопить уже. Я решил обе задачи, меня так устраивает, и это не противоречит сказанному другими людьми и в том числе Вами. И я не сторонник затыкать "якобы потенциальные уязвимости вероятность кот. практически нуль", такой подход часто приводит к десяткам новых внезапно упавших на голову проблем, проходили и не раз. Мне проще посоветовать пересоздать базу одному юзеру в год, нежли какое-нибудь JRO по непонятным причинам будет давать стабильный высоковероятный crash всего Application из-за раннего например связывания, поищите, найдете топик. А при очень муштрованном подходе подобные проблемы будут множиться. Извините, опыт. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2011, 03:14 |
|
Добавление поля в существующую таблицу существующей БД. Хочу добавить не в конец а "между"
|
|||
---|---|---|---|
#18+
Дмитрий77, Не заметил такой вариант... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2011, 06:04 |
|
|
start [/forum/topic.php?fid=60&msg=37367754&tid=2158538]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
96ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 212ms |
0 / 0 |