Страница: 1 |
Страница: 1 |
Вопрос: Отсоединенный набор
Добавлено: 14.02.07 15:51
Автор вопроса:
pstrkim
Помогите найти ошибку. Есть форма с отсоединяемым набором записей. При выгрузке формы изменения надо сохранить.(Форма открывается экземплярами).
Dim db As New ADODB.Connection
Dim rs As New ADODB.Recordset
Private Sub Form_Load()
db.Open "PROVIDER=MSDataShape;Data PROVIDER=MSDASQL;dsn=db12;uid=;pwd=;"
rs.ActiveConnection = db
rs.CursorLocation = adUseClient
rs.CursorType = adOpenStatic
rs.LockType = adLockOptimistic
rs.Source = "SHAPE {SELECT StructureID,StructureName,ProductTypeName,StructurePrice FROM Structures} AS ParentCMD APPEND ({SELECT StructureDetails.StructureID,StructureDetails.RawName,StructureDetails.Part,[RawPrice]*[Part] AS PartPrice FROM StructureDetails INNER JOIN Raw ON Raw.RawName = StructureDetails.RawName} AS ChildCMD RELATE StructureID TO StructureID) AS ChildCMD"
rs.Open
Set rs.ActiveConnection = Nothing
End Sub
Private Sub Form_Unload(Cancel As Integer)
rs.ActiveConnection = db
rs.MarshalOptions = adMarshalModifiedOnly
rs.UpdateBatch
End Sub
Однако изменения не сохраняются!
Ответы
Всего ответов: 5
Номер ответа: 1
Автор ответа: Fever
Вопросов: 60
Ответов: 808
Профиль | | #1
Добавлено: 14.02.07 16:10
rs.UpdateBatch
DoEvents
Номер ответа: 2
Автор ответа: pstrkim
Вопросов: 13
Ответов: 16
Профиль | | #2
Добавлено: 14.02.07 16:36
Ну и что? Результат тот же самый
Номер ответа: 3
Автор ответа: pstrkim
Вопросов: 13
Ответов: 16
Профиль | | #3
Добавлено: 14.02.07 16:37
Не помогает!
Номер ответа: 4
Автор ответа: Fever
Вопросов: 60
Ответов: 808
Профиль | | #4
Добавлено: 14.02.07 19:03
Дык и код неполный, хз вообще что с ним делать. Лучше выкладывай весь проект, может поможем
Номер ответа: 5
Автор ответа: pstrkim
Вопросов: 13
Ответов: 16
Профиль | | #5
Добавлено: 15.02.07 12:44
Ok!
Есть Главная форма frmMain (Родительская), Форма со списком структур frmStructNav (Дочерняя), Форма редактирования струтуры frmStructInp (Дочерняя), Главный модуль mdlMain.
в frmMain - просто строка меню.
mdlMain:
Public cn As New ADODB.Connection
Public rsStri As New ADODB.Recordset
Public rsStrn As New ADODB.Recordset
Sub Main()
cn.CursorLocation = adUseClient
cn.Open "PROVIDER=MSDataShapeata PROVIDER=MSDASQL;dsn=db12;uid=;pwd=;"
rsStri.ActiveConnection = cn
rsStri.CursorLocation = adUseClient
rsStri.CursorType = adOpenKeyset
rsStri.LockType = adLockBatchOptimistic
rsStri.Source = "SHAPE {SELECT StructureID,StructureName,ProductTypeName,StructurePrice FROM Structures} AS ParentCMD APPEND ({SELECT StructureDetails.StructureID,StructureDetails.RawName,StructureDetails.Part,[RawPrice]*[Part] AS PartPrice FROM StructureDetails INNER JOIN Raw ON Raw.RawName = StructureDetails.RawName} AS ChildCMD RELATE StructureID TO StructureID) AS ChildCMD"
rsStri.Open
rsStrn.ActiveConnection = cn
rsStrn.Source = "Select * from Structures"
rsStrn.CursorType = adOpenKeyset
frmMain.Show
End Sub
frmStructNav:
Private Sub Form_Load()
'Создание переменной списка
Dim lv As ListView
Set lv = lvMain
'Создание колонок списка
lv.ColumnHeaders.Clear
Dim clmX As ColumnHeader
Dim itmX As ListItem
Set clmX = lv.ColumnHeaders.Add(, "Product", "Товар"
Set clmX = lv.ColumnHeaders.Add(, "Price", "Цена"
lv.GridLines = True
lv.FullRowSelect = True
'Заполнение списка
rsStrn.Open
lv.ListItems.Clear
Dim nCounter As Integer
For nCounter = 1 To rsStrn.RecordCount
Set itmX = lv.ListItems.Add(, , rsStrn.Fields(1))
itmX.SubItems(1) = FormatCurrency(rsStrn.Fields("StructurePrice", 2)
rsStrn.MoveNext
Next nCounter
rsStrn.Close
End Sub
'Открытие формы frmStructInp
Private Sub lvMain_DblClick()
Dim frmSI As New frmStructInp
frmSI.Show
End Sub
frmStructInp:
Dim bChanged As Boolean
Private Sub Form_Load()
'заполнение таблицы в форме
rsStri.MoveFirst
rsStri.Find "StructureName = '" & frmStructNav.lvMain.SelectedItem.Text & "'"
'Set rsStri.ActiveConnection = Nothing
Set StructureGrid.DataSource = rsStri("ChildCMD".UnderlyingValue
'макет таблицы
With StructureGrid
.Columns(0).Visible = False
.Columns(1).Button = True
.Columns(1).Locked = True
.Columns(1).Width = 3500
.Columns(2).NumberFormat = "#0.00"
.Columns(2).Width = 600
.Columns(3).NumberFormat = "#0.00"
.Columns(3).Width = 600
.Columns(3).Locked = True
End With
'заполнение полей формы
Dim n As Integer
For n = 0 To txtFields.Count - 1
Set txtFields(n).DataSource = rsStri
txtFields(n).DataField = rsStri.Fields(n).Name
Next n
Set rsStri.ActiveConnection = Nothing
End Sub
'при выгрузке запрос на сохранение изменений
Private Sub Form_Unload(Cancel As Integer)
Dim i As Integer
If bChanged Then
i = MsgBox("Сохранить?", vbYesNo, "Сохранение"
If i = vbYes Then
Set rsStri.ActiveConnection = cn
rsStri.MarshalOptions = adMarshalModifiedOnly
rsStri.UpdateBatch
End If
End If
End Sub
'запомнить изменение в таблице
Private Sub StructureGrid_Change()
bChanged = True
End Sub
В общем если создаешь rsStri в главном модуле - данные сохраняются, а если в модуле frmStructInp - то не сохраняются