После выполнения команды DataGrid не редактируется! - VB
Формулировка задачи:
Помогите, пожалуйста!
Выполняю запрос с параметрами к базе данных Northwind.mdb через объект Command. Вроде все нормально. но Datagrid не редактируется! Если обращаюсь к хранимой процедуре в SQL так же через объект Command - проблема та же, но если через rs.Open "имя_процедуры" "имя_пар1", "имя_пар2" - DATAGrid редактируемий.
Когда пытаюсь выполнить запрос с параметрами в Аccess через
rs.open "[sales by year] #1/1/95#, #12/1/95#" - думает, что это обычный запрос и дает ошибку. Как добиться, чтоб после выполнения запроса с параметрами DataGrid был все таки редактируемым???
Dim cn As New ADODB.Connection, com As new ADODB.Command
Dim prm2 As ADODB.Parameter, rs As ADODB.Recordset
Private Sub Form_Load()
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51; Data Source=E:\nwind.mdb"
cn.CursorLocation = adUseClient
cn.Open
rs.CursorType = adOpenDynamic
rs.ActiveConnection = cn
rs.LockType = adLockOptimistic
com.CommandType = adCmdUnknown
com.CommandText = "[Sales by year]"
com.ActiveConnection = cn
com.Parameters.Append com.CreateParameter("BeginningDate", adDate, adParamInput)
com.Parameters.Append com.CreateParameter("EndingDate", adDate, adParamInput)
com.Parameters(0).Value = "1/1/95"
com.Parameters(1).Value = "12/1/95"
Set rs = com.Execute()
Set DataGrid1.DataSource = rs
End Sub
Выполняю запрос с параметрами к базе данных Northwind.mdb через объект Command. Вроде все нормально. но Datagrid не редактируется! Если обращаюсь к хранимой процедуре в SQL так же через объект Command - проблема та же, но если через rs.Open "имя_процедуры" "имя_пар1", "имя_пар2" - DATAGrid редактируемий.
Когда пытаюсь выполнить запрос с параметрами в Аccess через
rs.open "[sales by year] #1/1/95#, #12/1/95#" - думает, что это обычный запрос и дает ошибку. Как добиться, чтоб после выполнения запроса с параметрами DataGrid был все таки редактируемым???
Dim cn As New ADODB.Connection, com As new ADODB.Command
Dim prm2 As ADODB.Parameter, rs As ADODB.Recordset
Private Sub Form_Load()
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51; Data Source=E:\nwind.mdb"
cn.CursorLocation = adUseClient
cn.Open
rs.CursorType = adOpenDynamic
rs.ActiveConnection = cn
rs.LockType = adLockOptimistic
com.CommandType = adCmdUnknown
com.CommandText = "[Sales by year]"
com.ActiveConnection = cn
com.Parameters.Append com.CreateParameter("BeginningDate", adDate, adParamInput)
com.Parameters.Append com.CreateParameter("EndingDate", adDate, adParamInput)
com.Parameters(0).Value = "1/1/95"
com.Parameters(1).Value = "12/1/95"
Set rs = com.Execute()
Set DataGrid1.DataSource = rs
End Sub
Решение задачи: «После выполнения команды DataGrid не редактируется!»
textual
Листинг программы
<font color="00AA00">'Новому экземпляру устанавливаете свойства</font> rs.CursorType = adOpenDynamic rs.ActiveConnection = cn <font color="00AA00">'Вот то свойства, которое и контролирует в данном случае редактируемость</font> rs.LockType = adLockOptimistic ... <font color="00AA00">' А тут тот экземпляр отправляете в мусор, заменяя его новым,</font> <font color="00AA00">' который возвращает Execute() as Recordset</font> <font color="00AA00">' ЕСТЕСТВЕННО, все те свойства <font color="teal">"сбросятся"</font></font> <font color="blue">Set</font> rs = com.Execute() <font color="00AA00">' rs.LockType = adLockOptimistic - Нужно сюда!</font> <font color="00AA00">'Но скажу более, он не даст так просто поменять, т.к. </font> <font color="00AA00">'это свойство нельзя менять пока рекордсет открыт</font> <font color="00AA00">'Нужно</font> rs.<font color="blue">close</font> rs.LockType = adLockOptimistic rs.<font color="blue">open</font> <font color="blue">Set</font> DataGrid1.DataSource = rs
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д