Страница: 1 |
Если база Access, нужно установить связь между таблицами - один-ко-многим, и указать для этой связи - каскадное удаление связанных записей. Запросы они на то и запросы чтоб просить кого то сделать что то что он сам умеет блин. А оригинал в самом акцесе равно как и в других СУБД. ЗЫ......... вот это я выродил.... тут совсем крыша поедет... Sasha_LS все верно сказал... Tolls-> Relationships А если с запросами не работаешь то как данные получаешь ? Связи устанавливаются между таблицами. Каждая таблица отображается в своём гриде. Если вы будете удалять запись в ведущей таблице, то автоматически удалятся записи в подчинённой. MainRecordset.Delete и всё. Грид, связанный с подчинённой таблицей я обычно блокирую. В делфях механизм другой. Здесь не нужно рисовать запросы на удаление. Я подумала маленько и решила, что мой код проще дополнить немножко. (Он удаляет студентов 4-го курса, а остальных переводит на курс старше). Идея заключаестся в том, что если студент на 4-ом курсе, то в цикле удаляются все записи с его номером. Так вот проблема в том, что после добавления этого цикла VB виснет. Вот код: Страница: 1 |
Вопрос: Как сделать каскадное удаление?
Добавлено: 02.04.03 21:29
Автор вопроса: Svetlana | ICQ: 262385618
Есть две таблицы: студенты и оценки(связаны по номеру студента). Как сделать каскадное удаление, используя DataEnvironment в VB6, чтобы удаляя студентов из гланой таблицы, удалялись все строки с таким же номером из таблицы оценок? Транзакция по удалению у меня идет, но записи удаляются только из таблицы студенты. Может я что-нибудь не указала в свойствах DataEnvironment ?..help.. me.. please..
Ответы
Всего ответов: 8
Номер ответа: 1
Автор ответа:
Andreika
Вопросов: 5
Ответов: 64
Профиль | | #1
Добавлено: 03.04.03 11:12
А какую используешь базу?
Номер ответа: 2
Автор ответа:
Alex&r
Вопросов: 10
Ответов: 105
Профиль | | #2
Добавлено: 03.04.03 13:31
Номер ответа: 3
Автор ответа:
Svetlana
ICQ: 262385618
Вопросов: 43
Ответов: 205
Профиль | | #3
Добавлено: 03.04.03 18:02
База Access'ная.. Сейчас попробую на ней установить связи.. Надеюсь получится.
Номер ответа: 4
Автор ответа:
Svetlana
ICQ: 262385618
Вопросов: 43
Ответов: 205
Профиль | | #4
Добавлено: 03.04.03 19:02
По-моему вы меня совсем запутали.. Связи ведь указываются только в запросах!!!! (насколько я помню..). А я с запросами Accessовскими не работаю. Мне нужны по-отдельности таблицы.
Номер ответа: 5
Автор ответа:
MAGNUS
Вопросов: 12
Ответов: 430
Профиль | | #5
Добавлено: 03.04.03 22:53
Номер ответа: 6
Автор ответа:
MAGNUS
Вопросов: 12
Ответов: 430
Профиль | | #6
Добавлено: 03.04.03 22:58
Номер ответа: 7
Автор ответа:
Alex&r
Вопросов: 10
Ответов: 105
Профиль | | #7
Добавлено: 04.04.03 09:08
Номер ответа: 8
Автор ответа:
Svetlana
ICQ: 262385618
Вопросов: 43
Ответов: 205
Профиль | | #8
Добавлено: 04.04.03 20:11
' Студенты(номер, Ф, И, О, группа)
' Оценки(номер, семестр, предмет, оценка)
Private Sub GoldButton29_Click()
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim s As String
Dim qq As String
Dim res As String
Dim a As String
Dim c As String
Dim rs2 As ADODB.Recordset
Set cnn = New ADODB.Connection
Set rs = New ADODB.Recordset
cnn.Open "provider=microsoft.jet.oledb.4.0; data source=c:\база.mdb"
rs.ActiveConnection = cnn
rs.Source = "Select * from студенты "
rs.LockType = adLockOptimistic
rs.CursorType = adOpenDynamic
rs.Open
Set rs2 = New ADODB.Recordset
rs2.ActiveConnection = cnn
rs2.Source = "Select * from оценки"
rs2.LockType = adLockOptimistic
rs2.CursorType = adOpenDynamic
rs2.Open
cnn.BeginTrans
Do Until rs.EOF
If Left(Right(rs.Fields("группа"), 3), 1) = 4 Then
qq = rs.Fields('"Номер")
Do Until rs2.EOF
If rs2.Fields("Номер") = qq Then rs2.Delete
Loop
rs.Delete
Else
a = Left(rs.Fields("Группа"), 1)
c = Right(rs.Fields("Группа"), 2)
rs.Fields("Группа") = a & Left(Right(rs.Fields("Группа"), 3), 1) + 1 & c
rs.Update
End If
rs.MoveNext
Loop
res = MsgBox("Transaction Commited. Ready to Commit?", vbInformation + vbYesNo, "Транзакция")
If res = vbYes Then
cnn.CommitTrans
MsgBox "Transaction Commited"
Else
cnn.RollbackTrans
MsgBox "Transaction Canceled"
End If
Adodc1.Refresh
End Sub