Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: DataGrid
 
 автор: час   (26.02.2010 в 09:21)   личное сообщение
 
 

Вот так заполняю Datagrid на форме,

Dim STR_SQL As String
Dim rs As ADODB.Recordset
STR_SQL = "SELECT " & Me!TABLE_LIST & ".* FROM " & Me!TABLE_LIST

Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open STR_SQL, GLB_CONNECTION, adOpenStatic
Set Me!DataGrid1.DataSource = rs
Me!DataGrid1.Refresh


Но, тут нельзя редактировать записи.....
А хотелось бы редактировать и записывать изменения в источник записей - в таблицу базы....
Как бы это сделать

  Ответить  
 
 автор: Explorer   (26.02.2010 в 09:29)   личное сообщение
 
 


Set Me!DataGrid1.DataSource = rs



это форум по ораклу (с)

  Ответить  
 
 автор: час   (26.02.2010 в 09:44)   личное сообщение
 
 

Почему?
Я в vb6 на форму контрол положил
И из ацесовской базы все строки залил
Только обратной дороги никак не найду
Чтобы из грида опять всё залить в ту таблу

  Ответить  
 
 автор: Explorer   (26.02.2010 в 09:49)   личное сообщение
 
 

:)

  Ответить  
 
 автор: Силblч   (26.02.2010 в 10:34)   личное сообщение
 
 

ну, например, сделай кнопку и на кнопке...

Private Sub btnSave_Click()
    Dim ssql$, i&, vl
    Dim log As New clsLog
    On Error GoTo err12345
    If MsgBox("Сохранить данные?", vbYesNo, "Выбор") = vbNo Then Exit Sub
    '-- проверка коннекта
    If conn.State = 0 Then
        If conn2uafin(ConnString) = 0 Then Err.Number = -1: GoTo err12345
    End If
    '-- попытка обновить данные
    ClockOn
    With GridData
        For i = 1 To .Rows - 4
            If .Cell(flexcpText, i, 22) = 0 Then '-- UAH
                ssql = "update " + s4m + "PCF_PLAN set " & _
                        "  WEEK_UAH = " & nz(Num4Ora(.Cell(flexcpText, i, 11)), "null") & _
                        ", PAUAH01 = " & nz(Num4Ora(.Cell(flexcpText, i, 12)), "null") & _
                        ", PAUAH02 = " & nz(Num4Ora(.Cell(flexcpText, i, 13)), "null") & _
                        ", PAUAH03 = " & nz(Num4Ora(.Cell(flexcpText, i, 14)), "null") & _
                        ", PAUAH04 = " & nz(Num4Ora(.Cell(flexcpText, i, 15)), "null") & _
                        ", PAUAH05 = " & nz(Num4Ora(.Cell(flexcpText, i, 16)), "null") & _
                        ", PAUAH06 = " & nz(Num4Ora(.Cell(flexcpText, i, 17)), "null") & _
                        ", DAYUAH01 = " & nz(Num4Ora(.Cell(flexcpText, i, 6)), "null") & _
                        ", DAYUAH02 = " & nz(Num4Ora(.Cell(flexcpText, i, 7)), "null") & _
                        ", DAYUAH03 = " & nz(Num4Ora(.Cell(flexcpText, i, 8)), "null") & _
                        ", DAYUAH04 = " & nz(Num4Ora(.Cell(flexcpText, i, 9)), "null") & _
                        ", DAYUAH05 = " & nz(Num4Ora(.Cell(flexcpText, i, 10)), "null") & _
                        " where relid = " & .Cell(flexcpText, i, 23) & _
                        " and matuid = " & .Cell(flexcpText, i, 21) & _
                        " and datefrom = " & .Cell(flexcpText, i, 18) & _
                        " and datetill = " & .Cell(flexcpText, i, 19)
            ElseIf .Cell(flexcpText, i, 22) = 1 Then '-- CUR
                ssql = "update " + s4m + "PCF_PLAN set " & _
                        "  WEEK_CUR = " & nz(Num4Ora(.Cell(flexcpText, i, 11)), "null") & _
                        ", PACUR01 = " & nz(Num4Ora(.Cell(flexcpText, i, 12)), "null") & _
                        ", PACUR02 = " & nz(Num4Ora(.Cell(flexcpText, i, 13)), "null") & _
                        ", PACUR03 = " & nz(Num4Ora(.Cell(flexcpText, i, 14)), "null") & _
                        ", PACUR04 = " & nz(Num4Ora(.Cell(flexcpText, i, 15)), "null") & _
                        ", PACUR05 = " & nz(Num4Ora(.Cell(flexcpText, i, 16)), "null") & _
                        ", PACUR06 = " & nz(Num4Ora(.Cell(flexcpText, i, 17)), "null") & _
                        ", DAYCUR01 = " & nz(Num4Ora(.Cell(flexcpText, i, 6)), "null") & _
                        ", DAYCUR02 = " & nz(Num4Ora(.Cell(flexcpText, i, 7)), "null") & _
                        ", DAYCUR03 = " & nz(Num4Ora(.Cell(flexcpText, i, 8)), "null") & _
                        ", DAYCUR04 = " & nz(Num4Ora(.Cell(flexcpText, i, 9)), "null") & _
                        ", DAYCUR05 = " & nz(Num4Ora(.Cell(flexcpText, i, 10)), "null") & _
                        " where relid = " & .Cell(flexcpText, i, 23) & _
                        " and matuid = " & .Cell(flexcpText, i, 21) & _
                        " and datefrom = " & .Cell(flexcpText, i, 18) & _
                        " and datetill = " & .Cell(flexcpText, i, 19)
            End If
            If Len(ssql) = 0 Then GoTo err12345
            conn.Execute (ssql): conn.Execute ("commit")
        Next i
    End With
    ClockOff
    '-- удачно
    MsgBox "Данные успешно сохранены", vbInformation, "PCF"
    Exit Sub
err12345:
    vl = Error
    MsgBox "Не удалось сохранить данные в базе" & vbCrLf & _
           Error & vbCrLf & "Повторите попытку еще раз или" & vbCrLf & _
           "обратитесь к разработчикам", vbCritical, "Ошибка #" & Err.Number
    '-- неудачно
    '-- инициализация записи log-файла
    log.Path = App.Path
    log.vsTitle = "debug"
    log.Init
    log.WriteLine vl
    log.WriteLine ssql
    Set log = Nothing
    If conn.State = 1 Then conn.Execute ("rollback")
    ClockOff
    Exit Sub
End Sub

  Ответить  
 
 автор: час   (26.02.2010 в 11:34)   личное сообщение
 
 

Спасибо!!!
Понятно как добавлять.
Можно конечно по потере фоуса или по кнопке enter

У мну они (записи) не хотят редактироваться в самом Grid_e они недоступны для редактирования...
я все значения параметров меняю - какие тока считаю нужными , но ..

Ячейка выделяется - а редактировать не даётся.

  Ответить  
 
 автор: Силblч   (26.02.2010 в 12:48)   личное сообщение
 
 

там надо разрешать редактировать
у меня flexgrid

Private Sub GridData_Click()
    If isEnableData = False Then Exit Sub
    Static is2Click%, cClickRow%, cClickCol%
    With GridData
        If cClickRow <> .Row Or cClickCol <> .Col Then
            is2Click = 1: cClickRow = .Row: cClickCol = .Col
        Else
            is2Click = 2: cClickRow = .Row: cClickCol = .Col
            If .Col > 5 And .Col < 18 _
                And .Row > 0 And .Row < (.Rows - 5) _
                    And isWeekEditable = True _
                        And isDayEditable(.Col) = True Then

                        .Editable = flexEDKbdMouse
                        .EditCell

            End If
        End If
    End With
End Sub

Private Sub GridData_KeyDown(KeyCode As Integer, Shift As Integer)
    If isEnableData = False Then Exit Sub
    With GridData
        If .Col > 5 And .Col < 18 _
            And .Row > 0 And .Row < (.Rows - 5) _
                And isWeekEditable = True _
                    And isDayEditable(.Col) = True Then
                    .Editable = flexEDKbdMouse
                    .EditCell
        End If
    End With
End Sub

Private Sub GridData_KeyDownEdit(ByVal Row As Long, ByVal Col As Long, KeyCode As Integer, ByVal Shift As Integer)
    On Error GoTo err12345
    If isEnableData = False Then Exit Sub
    If Shift = 2 And (KeyCode = 86 Or KeyCode = 236) Then '-- Ctrl+v(м) попытка вставить из клипборда руками
        If Len(Clipboard.GetText) > 0 Then '-- есть чё?)
            Call EditPaste
        End If
    End If
    Exit Sub
err12345:
    MsgBox Error, vbExclamation, "Ошибка #" & Err.Number
    Exit Sub
End Sub

Private Sub GridData_MouseUp(Button As Integer, Shift As Integer, x As Single, Y As Single)
    If isEnableData = False Then Exit Sub
    With GridData
        If Button = vbRightButton _
           And .Col > 5 And .Col < 18 _
           And .Row > 0 And .Row < (.Rows - 5) Then
            .Editable = flexEDNone
            .FocusRect = flexFocusSolid
            Me.PopupMenu mnuEdit
        End If
    End With
End Sub

Private Sub GridData_AfterRowColChange(ByVal OldRow As Long, ByVal OldCol As Long, ByVal NewRow As Long, ByVal NewCol As Long)
    If isEnableData = False Then Exit Sub
    With GridData
        If OldRow > 0 And OldRow <> NewRow And OldRow < GridData.Rows - 5 Then
            .Cell(flexcpBackColor, OldRow, 5, OldRow, 17) = "&H00000000"
            .Cell(flexcpBackColor, OldRow, 24, OldRow, 24) = "&HE0E0E0"
        End If
    End With
End Sub

Private Sub GridData_RowColChange()
    If isEnableData = False Then Exit Sub
    With GridData
        '-- область редактирования
        .Editable = flexEDNone
        .FocusRect = flexFocusSolid
        If .Col > 5 And .Col < 18 _
            And .Row > 0 And .Row < (.Rows - 5) Then
            '-- область выделения
            .Cell(flexcpBackColor, .Row, 5, .Row, 24) = "&H00C0FFFF"
        End If
    End With
End Sub

Private Sub GridData_ValidateEdit(ByVal Row As Long, ByVal Col As Long, Cancel As Boolean)
    If isEnableData = False Then Cancel = True: Exit Sub
    With GridData
        If .ColDataType(Col) = flexDTDouble _
            And .Row > 0 And .Row < (.Rows - 5) Then
            If Not IsNumeric(nz(Num4Ora(.EditText), "0")) Then
                MsgBox "В этой колонке значение должно быть положительным числовым", vbInformation, "PCF"
                Cancel = True
            End If
        End If
    End With
End Sub

  Ответить  
 
 автор: osmor   (26.02.2010 в 10:12)   личное сообщение
 
 

adOpenStatic


и


А хотелось бы редактировать и записывать изменения


несовместимы

  Ответить  
 
 автор: час   (26.02.2010 в 10:14)   личное сообщение
 
 

Изначально было adOpenStatic
Это я уже изменял парамеиры =- экскреминтирова

А хотелось бы редактировать и сохранять изменения

  Ответить  
 
 автор: Denis V.   (26.02.2010 в 10:55)   личное сообщение
 
 

Я в одном своём приложении подключаюсь почти также к базе данных mdb, только из Access. Отличается то, что выбираю одну запись набором записей с типом курсора dbOpenKeyset и набор записей присваивается набору записей одиночной формы. При этом обновление работает.
Тип курсора подбирал эмпирически. Вот теперь задумался: а как же работает при таком типе курсора, когда напрашивается adOpenDynamic?

  Ответить  
 
 автор: час   (26.02.2010 в 11:27)   личное сообщение
 
 

Дааааааааааа - вот ведь ..........
У мну они (записи) не хотят редактироваться в самом Grid_e они недоступны для редактирования...
я все значения параметров меняю - какие тока считаю нужными , но ..

Ячейка выделяется - а редактировать не даётся. 

  Ответить  
 
 автор: час   (26.02.2010 в 11:42)   личное сообщение
 
 

Вот нашёл как извращаются с FlexGrid
http://froland2.narod.ru/vbguide/ch7_10_2.html

  Ответить  
 
 автор: Силblч   (26.02.2010 в 12:49)   личное сообщение
 
 

не извращаются, а наслаждаются!

  Ответить  
 
 автор: час   (26.02.2010 в 13:30)   личное сообщение
 
 

вот - тоже наслаждаюсь
взял я FlixGrid


Set rst = New ADODB.Recordset

rst.Open "SELECT * FROM Books 
Where( Books.Title ='" & Me!MSFlexGrid1.TextMatrix(Me!MSFlexGrid1.Row, 0) & "')"
, conn, adOpenKeyset, adLockOptimistic

rst("URL").Value = Me!MSFlexGrid1
rst.Update

    rst.Close
    conn.Close

а как узнать имя колонки в которой клик? чтобы вместо rst("URL") записать
rst("Имя колонки")

  Ответить  
 
 автор: Силblч   (26.02.2010 в 13:35)   личное сообщение
 
 

посмотри в Private Sub GridData_Click()
имени нет есть колонка и строка
как в экселе

  Ответить  
 
 автор: час   (26.02.2010 в 13:41)   личное сообщение
 
 

Вро де разрешилась "Бурёнка"

  Ответить  
 
 автор: час   (26.02.2010 в 13:39)   личное сообщение
 
 

АААААААААА
Во как

rst(MSFlexGrid1.TextMatrix(0, Me!MSFlexGrid1.Col)).Value = Me!txtEdit
rst.Update


Башку сламаеш нафикггг гы гыыыыы гы

  Ответить  
 
 автор: час   (26.02.2010 в 13:44)   личное сообщение
 
 


Sub MSFlex_Save()
Dim db_file As String
Dim conn As ADODB.Connection
Dim rst As ADODB.Recordset

    ' Путь к базе данных
    db_file = App.Path
    If Right$(db_file, 1) <> "\" Then db_file = db_file & "\"
    db_file = db_file & "books.mdb"

    ' Open соединение
    Set conn = New ADODB.Connection
    conn.ConnectionString = _
        "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & db_file & ";" & _
        "Persist Security Info=False"
    conn.Open
    
Set rst = New ADODB.Recordset
' выбираем строку из rst
rst.Open "SELECT * FROM Books Where( Books.Title ='" & Me!MSFlexGrid1.TextMatrix(Me!MSFlexGrid1.Row, 0) & "')", conn, adOpenKeyset, adLockOptimistic

' запись изменений в rst
rst(MSFlexGrid1.TextMatrix(0, Me!MSFlexGrid1.Col)).Value = Me!txtEdit
rst.Update

    rst.Close
    conn.Close
End Sub


Теперь проблема - куда это событие вешать
Повесил на нажатие Enter
А вдруг не нажмуть
=============================
Нашлось местечко - потеря фокуса полем ввода

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList