|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
16.05.2009, 21:44 | #1 |
Пользователь
Регистрация: 16.05.2009
Сообщений: 13
|
Добавление записи через список в связанную таблицу(при связи с Access)
Добрый вечер,
Создаю оболочку для БД на Delphi, БД в Access Была проблема с добавлением записи через список, которая решилась написанием соответствующей процедуры в форме на NotInList поля. Однако, оказалось, что Delphi не хочет связываться с формами Access'а через ADO - только таблицы и запросы. Может ли кто-нибудь примерно объяснить на обработку какого события надо будет писать, чтобы решить проблему через Delphi? upd Возможно слишком криво написал, поясню: Есть БД в Access с двумя таблицами, одна из таблиц связана с другой через мастер подстановок, соединяю с Delphi через Ado, нужно чтобы в первой таблице, поле-список которой ссылается на вторую таблицу при отсутствии схожего значения во второй таблице, в первой таблице выдавало предупреждение о том что можно ввести новое значение, и после соглашения вводило новое значение во второй таблице Последний раз редактировалось megaten; 16.05.2009 в 23:24. |
17.05.2009, 14:30 | #2 |
Пользователь
Регистрация: 16.05.2009
Сообщений: 13
|
Немного еще поясню проблему: на какой Events в Delphi для комбобоксов писать код, чтобы при вводе информации в комбобокс(когда нужный вариант отсутствует и его нельзя выбрать) он позволял ввести новое значение через этот комбобокс в связанную таблицу. В формах Access за это отвечает NoyInList и примерный код там такой:
Private Sub Zakazshik_NotInList(NewData As String, Response As Integer) On Error GoTo cboJobTitle_NotInList_Err Dim intAnswer As Integer Dim strSQL As String intAnswer = MsgBox("The job title " & Chr(34) & NewData & _ Chr(34) & " is not currently listed." & vbCrLf & _ "Would you like to add it to the list now?" _ , vbQuestion + vbYesNo, "Acme Oil and Gas") If intAnswer = vbYes Then strSQL = "INSERT INTO Zakazshiki(Zak_naimenovanie) " & _ "VALUES ('" & NewData & "');" DoCmd.SetWarnings False DoCmd.RunSQL strSQL DoCmd.SetWarnings True MsgBox "The new job title has been added to the list." _ , vbInformation, "Acme Oil and Gas" Response = acDataErrAdded Else MsgBox "Please choose a job title from the list." _ , vbInformation, "Acme Oil and Gas" Response = acDataErrContinue End If cboJobTitle_NotInList_Exit: Exit Sub cboJobTitle_NotInList_Err: MsgBox Err.Description, vbCritical, "Error" Resume cboJobTitle_NotInList_Exit End Sub Может кто-нибудь объяснить или послать где объяснили? Второй день рыщу по интернетам в поисках ответа. Заранее спасибо. |
17.05.2009, 15:16 | #3 |
Форумчанин
Регистрация: 06.03.2009
Сообщений: 583
|
Как я понял есть две таблицы одна главная, другая подчиненная, отношение один ко многим. Требуется выяснить есть запись в подчиненной таблице.
Можно обрабатывать OnChange Combobox. Производить поиск значения через if Locate(?????????????)=true then. Синтаксис поставите свой. Смысл в том, если найдена запись в подчиненной таблице, то вставить значение в таблицу, если нет, то не вставлять. При этом не стоит забывать, что поиск будет вестись только по одной записи в главной таблице, для того чтобы поиск велся по всем записям главной таблицы, необходимо это делать в цикле.
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
|
17.05.2009, 15:33 | #4 |
Пользователь
Регистрация: 16.05.2009
Сообщений: 13
|
Не совсем так, я тут немного еще обмозговал, суть в том, чтобы просто можно было вводить новую информацию через Combobox, если в связанной таблице подобная запись отсутствует. Т.е. форма, на ней вводится информация через разные едиты там на соответствующие поля и когда доходит до кбокса, там нужно выбрать нужную инфу из связанной таблицы, но если нужная отсутствует в списке, надо чтобы ее можно было ввести прямо через этот комбобокс в связанную таблицу. Обычно Delphi просто выдает ошибку об отсутствии соотвтетсвующей записи в связанной таблице(ну это понятно). Просто для форм Access я быстро нашел в инете пример на обработку подобного случая, а вот для Delphi пока не могу.
|
17.05.2009, 15:46 | #5 |
Форумчанин
Регистрация: 06.03.2009
Сообщений: 583
|
Тогда наверное в этом случае нужно сделать таблицу с этими уникальными значениями. Перед запуском программы, например, заносить значения из таблицы в combobox. Сделать связь по номеру данной таблицы с таблицей(Combobox). И потом проверка через Locate в таблице (уникальных значений Combobox) если есть то просто добавляем в другую таблицу соединяющий номер, если нет то добавляем в эту таблицу значение из Combobox и потом индекс в другую таблицу.
А чтобы вместо индексов показывать значения можно через вычисляемые поля или лучше через SQL запрос сделать условие для показа (что номер из одной таблицы равен номеру из другой и вывод значений). В общем, это первое, что пришло мне в голову, но работать будет.
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
|
17.05.2009, 15:57 | #6 |
Пользователь
Регистрация: 16.05.2009
Сообщений: 13
|
Не не, все гораздо проще, просто я в Delphi не очень ориентируюсь, но ошибка об отсутствии записи в связанной таблице идет от Access, просто там есть специальный Event на случай если хочешь внести данные в таблицу ИЗ которой берутся данные мастером подстановок(NotInList), т.е. такое реверсное действие. Вообщем попробую написать на ввод данных в кбокс на OnEnter или на добавление записи там, а потом просто обновление БД.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Список в записи Access | eldar | Microsoft Office Access | 2 | 13.04.2009 22:12 |
при добавлении новой записи через форму подставлолось значение из другой таблицы | Baxxter | Microsoft Office Access | 1 | 07.01.2009 22:23 |
Добавление даты в таблицу | smoky | Microsoft Office Access | 5 | 24.11.2008 12:56 |
добавление записей в таблицу | strannik | БД в Delphi | 5 | 10.05.2007 08:12 |