VisData и foreign key

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
alex-lev9
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 13.07.2005 (Ср) 15:31

VisData и foreign key

Сообщение alex-lev9 » 03.04.2006 (Пн) 16:12

Бестолковый вопрос начинающего: ткните пальцем в то место, где сказано, как при создании и правке таблиц базы данных назначить для связанных таблиц foreign key. Как ни старался я это сделать, но в VisData checkbox с отметкой foreign у меня недоступен для редактирования.
И ишо одно - не получается для связанных таблиц произвести добавление новой записи. Пишет, что действие отвергается связанным объектом (ошибка 3426).

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 03.04.2006 (Пн) 16:21

не знаком с VisData лично, но могу предположить, что это тестовый пример для работы с базами данных от мелкософта. посему, вывод таков: использовать стандартные средства для работы с конкретной базой данных (в случае MS SQL Server - это EA и QA)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 03.04.2006 (Пн) 16:36

visdata - это Visual Data Manager.

В какой БД ты это делаешь? Возможно, БД не поддерживает внешние ключи.
Lasciate ogni speranza, voi ch'entrate.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 03.04.2006 (Пн) 16:41

(в случае MS SQL Server - это EMи QA)

EM - Enterprise Manager
QA - Query Analyzer

alex-lev9
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 13.07.2005 (Ср) 15:31

Сообщение alex-lev9 » 03.04.2006 (Пн) 17:58

Это Access. Причем одновременный просмотр в форме содержимого полей обеих таблиц (с учетом связи) позволяется. А вот Data1.Recordset.AddNew не хочет никак.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 03.04.2006 (Пн) 20:04

ну так открой свою базу через Access, там очень симпатичный есть визард для создания таблиц

alex-lev9
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 13.07.2005 (Ср) 15:31

Сообщение alex-lev9 » 04.04.2006 (Вт) 9:37

Дело в том, что как раз Access у меня и нет. Урезанная версия инсталла. Поэтому буду искать выход из создавшегося положения.
Еще один вопрос - можно ли при добавлении новой записи каким-то образом отключать связь со второй таблицей, чтобы запись добавлялась только в первую (в общем, именно это мне и нужно). Ведь, как я понимаю, при добавлении новой записи происходит некий конфликт связи между таблицами. Как его избежать?

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 04.04.2006 (Вт) 11:05

если только выполнить ALTER TABLE DROP CONSTRAINT, но я думаю, что проблема в другом: нужно правильно добавлять связанные записи - сначала главную запись, а затем уже подчиненные.

alex-lev9
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 13.07.2005 (Ср) 15:31

Сообщение alex-lev9 » 05.04.2006 (Ср) 21:56

Выход найден!!!

Возможно это и не лучший вариант, но я себя чувствую сейчас "первым грузинским космонавтом, причем представленным к Нобелевской премии" (см Кин-дза-дза).
Вопрос решился так: для отображения и редактирования данных поля, связанного со второй таблицей на форме находится TextBox1. Я добавил TextBox2 (копию TextBox1), скрыл его и положил на TextBox1. При добавлении новой строки:

Data1.RecordSource = "Table_1"
Text1.Visible = False
Text2.Visible = True
Data1.Refresh
Data1.Recordset.AddNew
Data1.Recordset("Pole_1").Value = Text2.Text
Data1.Recordset.Update
Text1.Visible = True
Text2.Visible = False
Data1.RecordSource = "Select * from Table_1, Table_2 where Table_1.Pole_1= Table_2.Pole_1"
Data1.Refresh

Только таким образом мне удалось избежать вышеупомянутой ошибки.
Может быть решение и не совсем оптимальное, но, во всяком случае, рабочее.


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

    TopList