9 / 8 / 0
Регистрация: 27.09.2015
Сообщений: 837
1

Устранение ошибки об уникальности в запросе на добавление

17.04.2016, 23:32. Показов 1670. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.

Есть база данных, в которой посредством макроса Upgrade Done выполняются несколько запросов. После выполнения одного из них (AddTablePick) появляется ошибка об уникальности - это из-за установки индекса уникального значения поля №ТрЗаказ в таблице.

В макросе я попробовал обойти это сообщение - Установить Сообщения с параметром "нет", но сообщение все равно выходит. Есть ли выход из этой ситуации??))
Вложения
Тип файла: rar Pick-Done — копия.rar (6.27 Мб, 5 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.04.2016, 23:32
Ответы с готовыми решениями:

Задание уникальности в запросе
Добрый день. Понимаю,что без знания особенностей и структуры БД сложно что-то анализировать,но...

Обработка ошибки уникальности
CREATE TABLE . ( INT NOT NULL PRIMARY KEY IDENTITY, nchar(10) UNIQUE NOT NULL ...

Устранение ошибки LNK2019
Доброго времени суток всем. Я пишу проект на Visual Studio 2010 для детектирования лица в видео...

Добавление элемента в список с проверкой уникальности
Всем привет! И сразу же к сути - не могу разобраться с добавлением элемента в список, но так что бы...

18
Эксперт MS Access
26816 / 14495 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
18.04.2016, 08:20 2
С макросами не знаю как. А в ВБА все просто: вместо макроса используйте процедуру
Visual Basic
1
2
3
4
5
6
7
8
Sub addRecord()
    Dim db As DAO.Database
    Set db = CurrentDb
    db.Execute "upgrade"
    db.Execute "AddTablePick"
    db.Execute "AddTablePick2"
    msgbox "Picking downloaded \ Пикинг прогружен"
End Sub
1
9 / 8 / 0
Регистрация: 27.09.2015
Сообщений: 837
18.04.2016, 09:25  [ТС] 3
Спасибо за помощь)) Я еще подумаю, как это сделать.

Дело в том, что эта база используется как перегонный пункт. Макрос я выносил ярлыком, чтобы кликнуть по нему как по ссылке, открыть бд и закрыть (забыл добавить в макрос закрытие бд). А тут явно понадобится кнопка в форме)))
0
Эксперт MS Access
26816 / 14495 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
18.04.2016, 09:59 4
Лучший ответ Сообщение было отмечено alvk как решение

Решение

Тогда вообще незачем заходить в эту базу. Выполняйте запросы из основной БД: поместите процедуру в основной базе в модуль и в нужное время (по кнопке, по событию или еще как-то выполняйте ее)
Visual Basic
1
2
3
4
5
6
7
8
9
Public Sub addRecord()
    Dim db As dao.Database, engine As Object
    Set engine = CreateObject("dao.dbengine.120")
    Set db = engine.OpenDatabase("C:\путь\Pick-Done — копия.accdb")
    db.Execute "upgrade"
    db.Execute "AddTablePick"
    db.Execute "AddTablePick2"
    MsgBox "Picking downloaded \ Пикинг прогружен"
End Sub
Выполнить
Visual Basic
1
addRecord
2
9 / 8 / 0
Регистрация: 27.09.2015
Сообщений: 837
18.04.2016, 17:53  [ТС] 5
Цитата Сообщение от mobile Посмотреть сообщение
Выполнить
Visual Basic
1
addRecord
Не совсем понимаю, куда это добавить(((

Добавлено через 50 секунд
Цитата Сообщение от mobile Посмотреть сообщение
основной базе в модуль
Да ис модулями пока не подружился(((
0
Эксперт MS Access
26816 / 14495 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
18.04.2016, 18:22 6
Цитата Сообщение от Dimasterfrom4e Посмотреть сообщение
с модулями пока не подружился(((
У Вас ведь 10 акс? На ленте выбираете Создание и там Модуль. Откроется окно редактора ВБА. Скопируйте туда текст процедуры и исправьте путь и имя БД на правильные. Сохраните модуль

Цитата Сообщение от Dimasterfrom4e Посмотреть сообщение
Не совсем понимаю, куда это добавить(((
А в какой момент предполагается добавить данные в "перегонном пункте"? Если должно выполняться по кнопке, то в процедуру кнопки вставьте строку вызова. Если в макросе, то я точно не знаю, но предполагаю, что есть в макросах команда типа Выполнить программу. Значит выбрать такую команду и записать в ней имя addRecord. Может быть со скобками. Точно не знаю, с макросами не работаю.
1
9 / 8 / 0
Регистрация: 27.09.2015
Сообщений: 837
18.04.2016, 18:33  [ТС] 7
Ура!!! Я кажется понял. Спасибо))) По клику кнопки в другой базе
1
9 / 8 / 0
Регистрация: 27.09.2015
Сообщений: 837
18.04.2016, 22:05  [ТС] 8
Похоже я кое что забыл. Таблица Pickfile импортируется из текстового одноименного файла по сохраненной спецификации, с каждым новым импортом новый файл заменяет предыдущий. Возможно ли сделать импорт текстового файла в начале этого кода?

В макросе импорт очень прост, а вот в коде не подскажете? Выкладываю и текстовый файл и бд.
Вложения
Тип файла: rar SHIFT LEADERS.rar (6.59 Мб, 3 просмотров)
0
9 / 8 / 0
Регистрация: 27.09.2015
Сообщений: 837
19.04.2016, 21:41  [ТС] 9
Вопрос ещё актуален))) помогите коллеги с вопросом
0
Эксперт MS Access
26816 / 14495 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
19.04.2016, 23:34 10
Dimasterfrom4e, вопрос не совсем понятен. Ведь макрос можно преобразовать в процедуру. Я преобразовал и вот что мастер преобразования записал
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Function Upgarde_Done()
On Error GoTo Upgarde_Done_Err
 
    DoCmd.DeleteObject acTable, "Pickfile"
    DoCmd.TransferText acImportDelim, "Pickfile - спецификация импорта", "Pickfile", "C:\Users\ololosha\Desktop\pickfile.txt", False, ""
    DoCmd.OpenQuery "upgrade", acViewNormal, acEdit
    DoCmd.OpenQuery "AddTablePick", acViewNormal, acEdit
    DoCmd.SetWarnings False
    DoCmd.OpenQuery "AddTablePick2", acViewNormal, acAdd
    Beep
    MsgBox "Picking downloaded \ Пикинг прогружен", vbInformation, "Инфо"
 
 
Upgarde_Done_Exit:
    Exit Function
 
Upgarde_Done_Err:
    MsgBox Error$
    Resume Upgarde_Done_Exit
 
End Function
И в чем вопрос? Преобразованный макрос в модуле Преобразованный макрос- Upgarde Done
Вложения
Тип файла: rar Pick-Done.rar (790.3 Кб, 2 просмотров)
1
9 / 8 / 0
Регистрация: 27.09.2015
Сообщений: 837
20.04.2016, 09:02  [ТС] 11
Спасибо))) утром попробую преобразовать по вашему примеру сам тоже и посмотрю, что получится))) и ваш пример посмотрю)))

Вопрос возник, потому что у меня был неудачный пример преобразования макроса в код импорта текстового файла, когда все поля импортировались в одно сплошное поле(((( поэтому я решил посоветоваться с вами, Знатоком с большой буквы)))

Добавлено через 8 часов 3 минуты
Еще вопрос касаемо импорта. Не подскажете, как сделать так, чтобы не создавались в процессе импорта таблицы "pickfile_ОшибкиИмпорта", "pickfile_ОшибкиИмпорта1" и тп??

Я понимаю, что там собираются ошибки данных определенного поля, которые не подходят под формат поля в таблице. Но формат там правильный, а эти таблицы создаются после каждого импорта и засоряют базу(((

Добавлено через 9 минут
А как этот код соединить с предыдущим кодом, который повешен на кнопку в другой бд?
0
Эксперт MS Access
26816 / 14495 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
20.04.2016, 09:20 12
Цитата Сообщение от Dimasterfrom4e Посмотреть сообщение
как сделать так, чтобы не создавались в процессе импорта таблицы "pickfile_ОшибкиИмпорта", "pickfile_ОшибкиИмпорта1" и тп??
Это особенность TransferText я думаю. Как избежать не подскажу. Но их можно удалять сразу после выполнения импорта прямо в процедуре импорта
Visual Basic
1
2
3
4
On error Resume Next 'Обход ошибки на случай отсутствия таблицы
Currentdb.execute "drop table pickfile_ОшибкиИмпорта"
Currentdb.execute "drop table pickfile_ОшибкиИмпорта1"
On error Goto 0      'Возврат к обычной реакции на ошибки
Цитата Сообщение от Dimasterfrom4e Посмотреть сообщение
А как этот код соединить с предыдущим кодом, который повешен на кнопку в другой бд?
Наверное записать в той процедуре вызов процедуры импорта: Upgarde_Done до команд обновления таблиц
1
9 / 8 / 0
Регистрация: 27.09.2015
Сообщений: 837
20.04.2016, 09:40  [ТС] 13
Цитата Сообщение от mobile Посмотреть сообщение
Наверное записать в той процедуре вызов процедуры импорта: Upgarde_Done до команд обновления таблиц
Не совсем понятно. Это получается запуск "перегонного пункта" из другой базы, не открывая его.
0
Эксперт MS Access
26816 / 14495 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
20.04.2016, 10:07 14
Цитата Сообщение от Dimasterfrom4e Посмотреть сообщение
Это получается запуск "перегонного пункта" из другой базы, не открывая его.
Наверное да. Я ведь не совсем понимаю, что Вы делаете и в какой последовательности.

Если запускать в другой БД, то вместо Currentdb надо записать переменную той БД, в которой выполняется код. Если код как в посте #4, то db вместо Currentdb
0
9 / 8 / 0
Регистрация: 27.09.2015
Сообщений: 837
20.04.2016, 12:06  [ТС] 15
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Private Sub PickD_Click()
On Error GoTo Upgarde_Done_Err
 
    Dim db As dao.Database, engine As Object
    Set engine = CreateObject("dao.dbengine.120")
    Set db = engine.OpenDatabase("D:\NEOVIA\OUTBOUND\SHIFT LEADERS\Pick-Done.accdb")
    DoCmd.DeleteObject acTable, "Pickfile"
    DoCmd.TransferText acImportDelim, "Pickfile - ñïåöèôèêàöèÿ èìïîðòà", "Pickfile", "C:\Users\runovnetpc01\Desktop\pickfile.txt", False, ""
    db.Execute "upgrade"
    db.Execute "AddTablePick"
    db.Execute "AddTablePick2"
    MsgBox "Picking downloaded \ Ïèêèíã ïðîãðóæåí", vbInformation, "Èíôî"
 
 
Upgarde_Done_Exit:
    Exit Sub
 
Upgarde_Done_Err:
    MsgBox Error$
    Resume Upgarde_Done_Exit
 
End Sub

С этим кодом пытается найти Pickfile, которая находится в другой бд - перегонном пункте, и не находит((( Наверно мне нужно прописать открытие другой бд с поиском этого файла, импортом и последующим закрытием ее

Это я пытался 2 кода соединить...
0
Эксперт MS Access
26816 / 14495 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
20.04.2016, 12:19 16
Лучший ответ Сообщение было отмечено Dimasterfrom4e как решение

Решение

Извиняюсь. Конечно это же совершенно разные объекты и TransferText никаким боком не относится к DAO.
Visual Basic
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
Private Sub PickD_Click()
On Error GoTo Upgarde_Done_Err
 
    Dim db As dao.Database, engine As Object, path
    Dim app As Object
    path="D:\NEOVIA\OUTBOUND\SHIFT LEADERS\Pick-Done.accdb"
 
    'Открыть приложение Access и выполнить действия средствами Access
    Set app=Createobject"Access.Application")
    app.OpenCurrentDatabase path
    app.DoCmd.DeleteObject acTable, "Pickfile"
    app.DoCmd.TransferText acImportDelim, "PickfilePickfile - спецификация импорта", "Pickfile", _ 
        "C:\Users\runovnetpc01\Desktop\pickfile.txt", False, ""
    app.Quit
 
    'Средствами DAO выполнить запросы
    Set engine = CreateObject("dao.dbengine.120")
    Set db = engine.OpenDatabase(path)
 
    db.Execute "upgrade"
    db.Execute "AddTablePick"
    db.Execute "AddTablePick2"
    MsgBox "Picking downloaded \ Пикинг прогружен", vbInformation, "Г€Г*ГґГ®"
 
 
Upgarde_Done_Exit:
    Exit Sub
 
Upgarde_Done_Err:
    MsgBox Error$
    Resume Upgarde_Done_Exit
 
End Sub
1
9 / 8 / 0
Регистрация: 27.09.2015
Сообщений: 837
20.04.2016, 13:40  [ТС] 17
Просто здорово стало)))) Огромное вам спасибо))) И даже перестали создаваться таблицы с ошибками импорта))) Двух зайцев одним ударом)))

Только в коде я не вижу, чем отменили создание таблиц с ошибками))) На будущее просто понять нужно.
0
Эксперт MS Access
26816 / 14495 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
20.04.2016, 13:57 18
Цитата Сообщение от Dimasterfrom4e Посмотреть сообщение
Только в коде я не вижу, чем отменили создание таблиц с ошибками))) На будущее просто понять нужно.
Честно говоря, не знаю. Я с TransferText практически не работаю. Нужен импорт из текстового файла - открываю файл Open имя файла, читаю и пишу в таблицу
2
9 / 8 / 0
Регистрация: 27.09.2015
Сообщений: 837
20.04.2016, 14:27  [ТС] 19
Ладно, когда нибудь пойму))) спасибо вам большое)))
0
20.04.2016, 14:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.04.2016, 14:27
Помогаю со студенческими работами здесь

Устранение ошибки деления на ноль
Здравствуйте.! Пишу макросы для *xls. Все отлично работает но один маленький нюанс для того что...

Добавление записей с сохранением уникальности, подсчет количества
Здравствуйте. Есть таблица "Статьи" (ID_статьи,Заголовок,Адрес) Есть таблица "Слова"...

Устранение ошибки при создании макроса
(Access 2010)выводит ошибку (при создании макроса), присваиваю условие =*, но вот когда выполняю,...

Устранение ошибки доступа Active Directory
Доброе утро. Возникла необходимость создать нового пользователя в своей сети. Все делал в Active...

Нарушение уникальности ключа при выполнении запроса на добавление
Всем доброго времени суток изучаю MS Access по учебнику при выполнении 6 ЛР происходит...

Устранение возможной ошибки пользователя при вводе
Здравствуйте! Есть участок кода (если понадобится скину весь код), в самом начале есть выбор пункта...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru