Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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

Если база Access, нужно установить связь между таблицами - один-ко-многим,

и указать для этой связи - каскадное удаление связанных записей.

Ответить

Номер ответа: 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

Sasha_LS  все верно сказал...

Tolls-> Relationships

А если с запросами не работаешь то как данные получаешь ?

Ответить

Номер ответа: 7
Автор ответа:
 Alex&r



Вопросов: 10
Ответов: 105
 Профиль | | #7 Добавлено: 04.04.03 09:08

Связи устанавливаются между таблицами.

Каждая таблица отображается в своём гриде. Если вы будете удалять запись в ведущей таблице, то автоматически удалятся записи в подчинённой. MainRecordset.Delete и всё.

Грид, связанный с подчинённой таблицей я обычно блокирую.

В делфях механизм другой. Здесь не нужно рисовать запросы на удаление.

 

Ответить

Номер ответа: 8
Автор ответа:
 Svetlana



ICQ: 262385618 

Вопросов: 43
Ответов: 205
 Профиль | | #8 Добавлено: 04.04.03 20:11

Я подумала маленько и решила, что мой код проще дополнить немножко. (Он удаляет студентов 4-го курса, а остальных переводит на курс

старше). Идея заключаестся в том, что если студент на 4-ом курсе, то в цикле удаляются все записи с его номером. Так вот проблема в том,

что после добавления этого цикла VB виснет. Вот код:
' Студенты(номер, Ф, И, О, группа)
' Оценки(номер, семестр, предмет, оценка)
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

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам