Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2009, 21:44   #1
megaten
Пользователь
 
Регистрация: 16.05.2009
Сообщений: 13
По умолчанию Добавление записи через список в связанную таблицу(при связи с Access)

Добрый вечер,
Создаю оболочку для БД на Delphi, БД в Access
Была проблема с добавлением записи через список, которая решилась написанием соответствующей процедуры в форме на NotInList поля. Однако, оказалось, что Delphi не хочет связываться с формами Access'а через ADO - только таблицы и запросы. Может ли кто-нибудь примерно объяснить на обработку какого события надо будет писать, чтобы решить проблему через Delphi?

upd
Возможно слишком криво написал, поясню:
Есть БД в Access с двумя таблицами, одна из таблиц связана с другой через мастер подстановок, соединяю с Delphi через Ado, нужно чтобы в первой таблице, поле-список которой ссылается на вторую таблицу при отсутствии схожего значения во второй таблице, в первой таблице выдавало предупреждение о том что можно ввести новое значение, и после соглашения вводило новое значение во второй таблице

Последний раз редактировалось megaten; 16.05.2009 в 23:24.
megaten вне форума Ответить с цитированием
Старый 17.05.2009, 14:30   #2
megaten
Пользователь
 
Регистрация: 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

Может кто-нибудь объяснить или послать где объяснили? Второй день рыщу по интернетам в поисках ответа.
Заранее спасибо.
megaten вне форума Ответить с цитированием
Старый 17.05.2009, 15:16   #3
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Как я понял есть две таблицы одна главная, другая подчиненная, отношение один ко многим. Требуется выяснить есть запись в подчиненной таблице.
Можно обрабатывать OnChange Combobox. Производить поиск значения через if Locate(?????????????)=true then. Синтаксис поставите свой. Смысл в том, если найдена запись в подчиненной таблице, то вставить значение в таблицу, если нет, то не вставлять.
При этом не стоит забывать, что поиск будет вестись только по одной записи в главной таблице, для того чтобы поиск велся по всем записям главной таблицы, необходимо это делать в цикле.
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 17.05.2009, 15:33   #4
megaten
Пользователь
 
Регистрация: 16.05.2009
Сообщений: 13
По умолчанию

Не совсем так, я тут немного еще обмозговал, суть в том, чтобы просто можно было вводить новую информацию через Combobox, если в связанной таблице подобная запись отсутствует. Т.е. форма, на ней вводится информация через разные едиты там на соответствующие поля и когда доходит до кбокса, там нужно выбрать нужную инфу из связанной таблицы, но если нужная отсутствует в списке, надо чтобы ее можно было ввести прямо через этот комбобокс в связанную таблицу. Обычно Delphi просто выдает ошибку об отсутствии соотвтетсвующей записи в связанной таблице(ну это понятно). Просто для форм Access я быстро нашел в инете пример на обработку подобного случая, а вот для Delphi пока не могу.
megaten вне форума Ответить с цитированием
Старый 17.05.2009, 15:46   #5
ArtInt
Форумчанин
 
Аватар для ArtInt
 
Регистрация: 06.03.2009
Сообщений: 583
По умолчанию

Тогда наверное в этом случае нужно сделать таблицу с этими уникальными значениями. Перед запуском программы, например, заносить значения из таблицы в combobox. Сделать связь по номеру данной таблицы с таблицей(Combobox). И потом проверка через Locate в таблице (уникальных значений Combobox) если есть то просто добавляем в другую таблицу соединяющий номер, если нет то добавляем в эту таблицу значение из Combobox и потом индекс в другую таблицу.
А чтобы вместо индексов показывать значения можно через вычисляемые поля или лучше через SQL запрос сделать условие для показа (что номер из одной таблицы равен номеру из другой и вывод значений).
В общем, это первое, что пришло мне в голову, но работать будет.
Не стыдно чего-то не знать, стыдно не стремиться к знаниям.
ArtInt вне форума Ответить с цитированием
Старый 17.05.2009, 15:57   #6
megaten
Пользователь
 
Регистрация: 16.05.2009
Сообщений: 13
По умолчанию

Не не, все гораздо проще, просто я в Delphi не очень ориентируюсь, но ошибка об отсутствии записи в связанной таблице идет от Access, просто там есть специальный Event на случай если хочешь внести данные в таблицу ИЗ которой берутся данные мастером подстановок(NotInList), т.е. такое реверсное действие. Вообщем попробую написать на ввод данных в кбокс на OnEnter или на добавление записи там, а потом просто обновление БД.
megaten вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Список в записи 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