powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / как програмно скопировать таблицу?
15 сообщений из 15, страница 1 из 1
как програмно скопировать таблицу?
    #33124437
Руслан С.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ситуация такова:
Есть база .мдб и в ней таблица. В таблице были удалены некоторые записи и в поле с автосчётчиком остались от этого “пробелы”.

Я хочу чтобы в таблице записи снова стали по порядку.

Для этого хочу создать копию таблицы в той же базе под другим именем, потом создать пустую таблицу точно такой же структуры и с помощью обьекта recordset добавлять записи из старой таблицы в новую поштучно(на данный момент там ок 300 000 записей).

Я не знаю способа, как можно было бы скопировать таблицу полностью, с сохранением всех не только записей, но и свойств, заданных из среды MS Access, таких как Format, Lookup... Как задать эти свойства при создании базы програмно, я тоже не знаю.

Я пробовал копировать таблицу так(других способов не знаю):
SELECT * INTO ИмяТабл(куда) FROM ИмяТабл(откуда)
В итоге получилась таблица, содержащая те же данные, но в её свойствах Format и lookup совсем другие значения, отличные от оригинала. Например, в lookup было checkbox, а вновой таблице стало textbox. Свойство Format было Yes\No, а стало пустым.

Подскажите другие способы скопировать таблицу, а также, как задать вышеуказанные свойства при создании базы програмно (DAO). Не пинайте, если что – я новичок :)
...
Рейтинг: 0 / 0
как програмно скопировать таблицу?
    #33125165
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
данные свойства столбцов таблицы акцеса являются специфичными, они никак не управляются через DAO или ADO, изменить их можно только через среду аправления самого акцеса.
...
Рейтинг: 0 / 0
как програмно скопировать таблицу?
    #33125357
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напрямую не знаю, но можно создать макрос в базе всего с одной командой
Код: plaintext
КопироватьОбъект

указать параметры:
База
Новое имя
Тип объекта
Имя объекта

и потом этот макрос можно выполнять из кода
а полученную таблицу использовать как хоч
...
Рейтинг: 0 / 0
как програмно скопировать таблицу?
    #33125452
Руслан С.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я также знаю, что из кода VB можно управлять обьектами Access, надо только создать ссылку на Microsoft Access Library или в этом роде, после этого обьекты становятся доступны. Может кто подскажет, как управиться с этими обьектами?
...
Рейтинг: 0 / 0
как програмно скопировать таблицу?
    #33125469
Utkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделай в Аксессе копию таблицы, из неё удали все данные.
Потом Сервис: Служебные пролграммы: Сжать и восстановить базу данных.
Апосля програмно рекордсетом (с нужной тебе сортировкой) из старой таблицы методом AddNew загнать данные в новую (то же рекордсет).
Счетчики в новый и старый в рекорсеты не входят.
!!! Тока если эти счетчики в других таблицах участвуют то надо и их поменять, а то хана.
...
Рейтинг: 0 / 0
как програмно скопировать таблицу?
    #33125656
Руслан С.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То Utkin
У нас из-за авторских прав на компах не стоит Акцес. Поэтому я хочу, чтобы всё делалось програмно. Ручками таблицу скопировать - раз плюнуть, клик правой на таблице и жмёшь экспорт, указываешь с данными или только структуру таблицы. Во вновь созданной таблице всё с нуля - не нужно сжимать базу и т.д. и т.п. Но я хочу этого самого добиться из кода.
...
Рейтинг: 0 / 0
как програмно скопировать таблицу?
    #33125767
Фотография nibbles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руслан С.То Utkin
У нас из-за авторских прав на компах не стоит Акцес. Поэтому я хочу, чтобы всё делалось програмно. Ручками таблицу скопировать - раз плюнуть, клик правой на таблице и жмёшь экспорт, указываешь с данными или только структуру таблицы. Во вновь созданной таблице всё с нуля - не нужно сжимать базу и т.д. и т.п. Но я хочу этого самого добиться из кода.
Функций копирования таблиц, насколько я знаю, в библиотеках доступа к данным нет.
Написать свою функцию, в которую в качестве параметра передавать конекшн и имя таблицы. Внутри функции определять параметры таблицы (с помощью adox, например). А далее:
Код: plaintext
1.
2.
3.
4.
Проверка на сущетсвование и удаление, если есть - drop table
Создание таблицы - create table [таблица]
Создание полей - alter table [таблица] add column [список полей]
Перенос данных - insert into
или
Код: plaintext
1.
SELECT [старая таблица].* INTO [новая таблица]
FROM [старая таблица]
и далее
Создание FK, ограничений, индексов, умолчаний и т.д. (Насколько я помню, в Jet при использовании инструкций SQL могут быть проблемы только с отношениями между таблицами, но это можно сделать с помощью ADOX или DAO)
Так что - все реально.
...
Рейтинг: 0 / 0
как програмно скопировать таблицу?
    #33126037
Руслан С.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
но я в самом начале писал, что мне это не подходит
...
Рейтинг: 0 / 0
как програмно скопировать таблицу?
    #33126057
Andres 1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руслан С.Ситуация такова:
Есть база .мдб и в ней таблица. В таблице были удалены некоторые записи и в поле с автосчётчиком остались от этого “пробелы”.

Я хочу чтобы в таблице записи снова стали по порядку.


А ЗАЧЕМ???? . Это ОЧЕНЬ-ОЧЕНЬ-ОЧЕНЬ ПЛОХАЯ ИДЕЯ!!!!
Счетчик НЕ ПРЕДНАЗНАЧЕН для нумерации записей. Вообще. В принципе! Если вам нужно пронумеровать записи подряд, смотрите первый вопрос faq по счетчикам access:
http://www.sql.ru/faq/faq_topic.aspx?fid=214
...
Рейтинг: 0 / 0
как програмно скопировать таблицу?
    #33126277
Руслан С.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Andres 1А ЗАЧЕМ???? . Это ОЧЕНЬ-ОЧЕНЬ-ОЧЕНЬ ПЛОХАЯ ИДЕЯ!!!!
идея не моя, есть рабочее приложение, где записи нумеруются автосчётчиком,
шеф имеет програмку, которая пробегает по записям и сообщает, если есть "окно". Програмер, написавший приложение, его заверил, что поле с автосчётчиком нельзя редактировать, поэтому шеф спит спокойно.
Мы же не спим - думаем.

Andres 1Если вам нужно пронумеровать записи подряд, смотрите первый вопрос faq по счетчикам access:
http://www.sql.ru/faq/faq_topic.aspx?fid=214
мне нужно их перенумеровать :)
...
Рейтинг: 0 / 0
как програмно скопировать таблицу?
    #33127909
Если с этой таблицей связаны другие, то это правда, очень плохая идея.
...
Рейтинг: 0 / 0
как програмно скопировать таблицу?
    #33129401
Руслан С.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблему я эту решил.
Если кому-то интересно как :

http://bbs.vbstreets.ru/viewtopic.php?t=17263

Всем спасибо за участие.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
как програмно скопировать таблицу?
    #37559072
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Andres 1
Счетчик НЕ ПРЕДНАЗНАЧЕН для нумерации записей. Вообще. В принципе! Если вам нужно пронумеровать записи подряд, смотрите первый вопрос faq по счетчикам access:
// http://www.sql.ru/faq/faq_topic.aspx?fid=214

Я что то не понял а чем плохо нумеровать записи счетчиком акса? по ссылке объяснения не нашел, нашел варианты изготовления своего счетчика.
...
Рейтинг: 0 / 0
как програмно скопировать таблицу?
    #37559149
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_menЯ что то не понял а чем плохо нумеровать записи счетчиком акса?Назначение синтетического ключевого поля (для чего и используется тип "Счётчик") - обеспечение уникального признака записи, необходимого для нормальной работы подсистемы обеспечения целостности и непротиворечивости информации (в т.ч. и для организации связей и ссылок). При правильном построении системы пользователь ВООБЩЕ НЕ ДОЛЖЕН ЗНАТЬ заносимого в такое поле значения - это поле создано не для него.

Если необходима непрерывная нумерация записей - это делают либо в запросе, либо процедурой. Но номер, полученный в результате такой непрерывной нумерации, используется исключительно при ОТОБРАЖЕНИИ результатов. Подсчитать, отсортировать... и не более. Под непрерывной нумерацией в данном случае разумеется любое последовательное присвоение значения, не только числовое - например, генерация буквенно-символьного внешнего идентификатора (типа кода документа)...
...
Рейтинг: 0 / 0
как програмно скопировать таблицу?
    #37559310
Alex_men
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Понял спасибо. Я этот счетчик так и использовал. из прочитанного выше я понял , что как раз это и не есть хорошо. А сортировка или там пользовательская нумерация документов это всегда отдельно. Спасибо что пояснили.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / как програмно скопировать таблицу?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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