Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Добавление данных в таблицу Access, С произвольным числом полей 
V
    Опции темы
Ground
Дата 12.2.2010, 07:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 321
Регистрация: 27.2.2006
Где: Комсомольск

Репутация: нет
Всего: 1



Добрый день! 
Необходимо через VBA, работая в Excel, открыть БД в Access, выбрать оттуда произвольную таблицу, и добавить в неё данные с ячеек экселя. Открытие базы, выбор таблицы, доступ к полям - уже реализовано. Добавление данных, собственно, тоже. Названия полей выводятся в столбец, в Excel, из соседнего столбца забираются данные для полей таблицы.  Проблемы возникают, когда в таблице в Access встречаются уникальные поля, то есть, если пользователь вводит одинаковые значения и два раза добавляет запись в таблицу, работа формы завершается с ошибкой, из-за невозможности добавления. И собственно, вопросы - можно ли как-нибудь проверить, является ли поле уникальным или ключевым (вроде не одно и то же, если ничего не путаю), или проверить его тип? И нет ли другой, более простой реализации добавления данных в таблицу с неизвестным числом полей?
Доступ к таблице и работа с ней осуществляется через DAO. 

Это сообщение отредактировал(а) Ground - 12.2.2010, 08:00
PM MAIL ICQ   Вверх
FINANSIST
Дата 12.2.2010, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Статус: Жив
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 11.4.2008
Где: Москва

Репутация: 13
Всего: 23



Цитата(Ground @  12.2.2010,  07:57 Найти цитируемый пост)
И нет ли другой, более простой реализации добавления данных в таблицу с неизвестным числом полей

Код

Sub Export()
Dim conn As ADODB.Connection: Dim recset As ADODB.Recordset
Dim x As Integer: Dim y As Integer: Dim tstart
tstart = Time
Set conn = New ADODB.Connection
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0"
conn.Open "C:\Users\777\Desktop\Office_Temp\QWE.mdb"
Set recset = New ADODB.Recordset
recset.Open "T1", conn, adOpenDynamic, adLockOptimistic
Debug.Print recset.Fields.Count
x = 0
ActiveSheet.Range("A1").Activate
Do
    recset.AddNew
    x = x + 1
    For y = 0 To (recset.Fields.Count 
        recset.Fields(y) = ActiveCell.Offset(x, y).Value
    Next y
    recset.Update
Loop While Not IsEmpty(ActiveCell.Offset(x, 0).Value)
recset.UpdateBatch
Set recset = Nothing: Set conn = Nothing
MsgBox Format(Time -  tstart, "hh:mm:ss")
End Sub




Цитата(Ground @  12.2.2010,  07:57 Найти цитируемый пост)
И собственно, вопросы - можно ли как-нибудь проверить, является ли поле уникальным или ключевым (вроде не одно и то же, если ничего не путаю), или проверить его тип?

Могу подбросить идею как перебрать все поля всех таблиц и получить имена и типы полей - может это как нибудь поможет
Код

Public Sub TableFullList()
Dim obj As Object: Dim rst As DAO.Recordset: Dim fld As Field
For Each obj In CurrentDb.TableDefs
'    Debug.Print obj.Name
On Error GoTo 10
    Set rst = CurrentDb.OpenRecordset(obj.Name)
        For Each fld In rst.Fields
           Debug.Print "table = '" & obj.Name & "'; field = '" & fld.Name & "'" & "'; attribute = '" & fld.Attributes & "'; type = '" & fld.Type
        Next
    Set rst = Nothing
10: Next obj
End Sub




--------------------
“...Брали корову рыжую одну, отдавать будем корову рыжую одну, чтобы не нарушать отчетности”
Эдуард Успенский, “Каникулы в Простоквашино”
PM MAIL ICQ   Вверх
Ground
Дата 12.2.2010, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 321
Регистрация: 27.2.2006
Где: Комсомольск

Репутация: нет
Всего: 1



Вопрос решен, спасибо FINANSIST smile
Проверка на то, что поле - счетчик (если кому понадобится): f.Attributes And dbAutoIncrField = 0&
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0720 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.