Отсоединенный набор

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
pstrkim
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 03.01.2007 (Ср) 23:53

Отсоединенный набор

Сообщение pstrkim » 14.02.2007 (Ср) 16:42

Помогите найти ошибку. Есть форма с отсоединяемым набором записей. При выгрузке формы изменения надо сохранить.(Форма открывается экземплярами).
Код: Выделить всё

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

Однако изменения не сохраняются!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 14.02.2007 (Ср) 16:51

Код: Выделить всё
rs.ActiveConnection = db

Set rs.ActiveConnection = db

Код: Выделить всё
rs.LockType = adLockOptimistic

rs.LockType = adLockBatchOptimistic
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

pstrkim
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 03.01.2007 (Ср) 23:53

Сообщение pstrkim » 15.02.2007 (Чт) 12:57

К сожалению не помогло. Выкладываю полный проект:
Есть Главная форма 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=MSDataShape;Data PROVIDER=MSDASQL;dsn=db12;uid=;pwd=;"
       
    Set 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
       
    Set 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 - то не сохраняются

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 15.02.2007 (Чт) 14:03

А разве SHAPE сохраняется?
Лучший способ понять что-то самому — объяснить это другому.

pstrkim
Новичок
Новичок
 
Сообщения: 30
Зарегистрирован: 03.01.2007 (Ср) 23:53

Сообщение pstrkim » 16.02.2007 (Пт) 10:30

Спасибо! Понял


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: Google-бот и гости: 15

    TopList