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

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

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

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

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

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

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

и потом этот макрос можно выполнять из кода
а полученную таблицу использовать как хоч
...
Рейтинг: 0 / 0
20.06.2005, 19:20
    #33125452
Руслан С.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как програмно скопировать таблицу?
я также знаю, что из кода VB можно управлять обьектами Access, надо только создать ссылку на Microsoft Access Library или в этом роде, после этого обьекты становятся доступны. Может кто подскажет, как управиться с этими обьектами?
...
Рейтинг: 0 / 0
20.06.2005, 19:38
    #33125469
Utkin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как програмно скопировать таблицу?
Сделай в Аксессе копию таблицы, из неё удали все данные.
Потом Сервис: Служебные пролграммы: Сжать и восстановить базу данных.
Апосля програмно рекордсетом (с нужной тебе сортировкой) из старой таблицы методом AddNew загнать данные в новую (то же рекордсет).
Счетчики в новый и старый в рекорсеты не входят.
!!! Тока если эти счетчики в других таблицах участвуют то надо и их поменять, а то хана.
...
Рейтинг: 0 / 0
21.06.2005, 01:16
    #33125656
Руслан С.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как програмно скопировать таблицу?
То Utkin
У нас из-за авторских прав на компах не стоит Акцес. Поэтому я хочу, чтобы всё делалось програмно. Ручками таблицу скопировать - раз плюнуть, клик правой на таблице и жмёшь экспорт, указываешь с данными или только структуру таблицы. Во вновь созданной таблице всё с нуля - не нужно сжимать базу и т.д. и т.п. Но я хочу этого самого добиться из кода.
...
Рейтинг: 0 / 0
21.06.2005, 08:15
    #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
21.06.2005, 10:27
    #33126037
Руслан С.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как програмно скопировать таблицу?
но я в самом начале писал, что мне это не подходит
...
Рейтинг: 0 / 0
21.06.2005, 10:33
    #33126057
Andres 1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как програмно скопировать таблицу?
Руслан С.Ситуация такова:
Есть база .мдб и в ней таблица. В таблице были удалены некоторые записи и в поле с автосчётчиком остались от этого “пробелы”.

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


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

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

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

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

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

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

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


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