Доброго времени суток, Посетитель!
|
|
|
|
|
|
|
|
|
вид форума:
|
|
|
|
| Вот так заполняю 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
|
Но, тут нельзя редактировать записи.....
А хотелось бы редактировать и записывать изменения в источник записей - в таблицу базы....
Как бы это сделать | |
|
| |
|
|
|
|
Set Me!DataGrid1.DataSource = rs
|
это форум по ораклу (с) | |
|
| |
|
|
|
| Почему?
Я в vb6 на форму контрол положил
И из ацесовской базы все строки залил
Только обратной дороги никак не найду
Чтобы из грида опять всё залить в ту таблу | |
|
| |
|
|
|
|
| ну, например, сделай кнопку и на кнопке...
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
|
| |
|
| |
|
|
|
| Спасибо!!!
Понятно как добавлять.
Можно конечно по потере фоуса или по кнопке enter
У мну они (записи) не хотят редактироваться в самом Grid_e они недоступны для редактирования...
я все значения параметров меняю - какие тока считаю нужными , но ..
Ячейка выделяется - а редактировать не даётся. | |
|
| |
|
|
|
| там надо разрешать редактировать
у меня 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
|
| |
|
| |
|
|
|
|
и
А хотелось бы редактировать и записывать изменения
|
несовместимы | |
|
| |
|
|
|
| Изначально было adOpenStatic
Это я уже изменял парамеиры =- экскреминтирова
А хотелось бы редактировать и сохранять изменения
|
| |
|
| |
|
|
|
| Я в одном своём приложении подключаюсь почти также к базе данных mdb, только из Access. Отличается то, что выбираю одну запись набором записей с типом курсора dbOpenKeyset и набор записей присваивается набору записей одиночной формы. При этом обновление работает.
Тип курсора подбирал эмпирически. Вот теперь задумался: а как же работает при таком типе курсора, когда напрашивается adOpenDynamic? | |
|
| |
|
|
|
| Дааааааааааа - вот ведь ..........
У мну они (записи) не хотят редактироваться в самом Grid_e они недоступны для редактирования...
я все значения параметров меняю - какие тока считаю нужными , но ..
Ячейка выделяется - а редактировать не даётся.
|
| |
|
| |
|
|
|
| Вот нашёл как извращаются с FlexGrid
http://froland2.narod.ru/vbguide/ch7_10_2.html | |
|
| |
|
|
|
| не извращаются, а наслаждаются! | |
|
| |
|
|
|
| вот - тоже наслаждаюсь
взял я 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("Имя колонки") | |
|
| |
|
|
|
| посмотри в Private Sub GridData_Click()
имени нет есть колонка и строка
как в экселе | |
|
| |
|
|
|
| Вро де разрешилась "Бурёнка" | |
|
| |
|
|
|
| АААААААААА
Во как
rst(MSFlexGrid1.TextMatrix(0, Me!MSFlexGrid1.Col)).Value = Me!txtEdit
rst.Update
|
Башку сламаеш нафикггг гы гыыыыы гы | |
|
| |
|
|
|
|
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 - Технологии программирования
|