Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Чего бы тут подкрутить, чтобы добиться редактируемости рекордсета?  [new]
aleks2
Guest
AccessXP SP3. ADP-проект.
Открываем форму,
открываем рекордсет из внешнего MDB-файла,
назначаем рекордсет форме
и получаем - хрен, а не редактирование.

Access вещает:
"Форма доступна только на чтение"

Чего бы тут подкрутить, чтобы добиться редактируемости?
PK на таблице есть.
Сам рекордсет обновляемый (программный Update проходит).

Private Sub Form_Load()
  Dim  dbConnection As New ADODB.Connection
  Dim  dbRecordset As New ADODB.Recordset
-- Открываем коннекцию
  With dbConnection
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .Open csDbPathName
  End With
-- Открываем рекордсет
  With dbRecordset
      .CursorType = adOpenKeyset
      .LockType = adLockOptimistic
      .Open "Table", dbConnection, , , adCmdTable
  End With

  Set Me.Recordset = dbRecordset
End Sub
15 дек 04, 10:09    [1181713]     Ответить | Цитировать Сообщить модератору
 Re: Чего бы тут подкрутить, чтобы добиться редактируемости рекордсета?  [new]
yuniki
Member

Откуда:
Сообщений: 1171
Может , дело в форме - Попробуй вначале задать надежно редактируемый источник, чтобы убедиться, что она редактирует его, а потом переназначь на проблемный.
15 дек 04, 10:29    [1181794]     Ответить | Цитировать Сообщить модератору
 Re: Чего бы тут подкрутить, чтобы добиться редактируемости рекордсета?  [new]
АлексейК
Member

Откуда: http://www.msdatabase.ru , Moscow
Сообщений: 7683
.Open "Select * from Table", dbConnection, 3,2,1
15 дек 04, 10:40    [1181837]     Ответить | Цитировать Сообщить модератору
 Re: Чего бы тут подкрутить, чтобы добиться редактируемости рекордсета?  [new]
aleks2
Guest
АлексейК
.Open "Select * from Table", dbConnection, 3,2,1


Ежели бы все так просто. Не помогает...

Я тут наткнулся на несколько утверждений в интернете, что для

Provider = "Microsoft.Jet.OLEDB.4.0"

ADODB.Recordset приципиально нередактируем в ADP-проекте.

Комментарии: подтверждения или опровержения?
15 дек 04, 16:16    [1183316]     Ответить | Цитировать Сообщить модератору
 Re: Чего бы тут подкрутить, чтобы добиться редактируемости рекордсета?  [new]
АлексейК
Member

Откуда: http://www.msdatabase.ru , Moscow
Сообщений: 7683
по крайней мере Dao еще никто не отменял
в том числе и ADP

Private Sub Form_Load()
Const csDbPathName = "c:\meridian.mdb"
Dim WS As Workspace
Dim DB As Database
Dim rs As DAO.Recordset
    Set WS = CreateWorkspace("", "admin", "", dbUseJet)
    Set DB = WS.OpenDatabase(csDbPathName, True)
    Set rs = DB.OpenRecordset("Select * from incoming_data", dbOpenDynaset)

Set Me.Recordset = rs


End Sub

поставь референс на dao 3.6 если база формата 2000
16 дек 04, 09:05    [1184419]     Ответить | Цитировать Сообщить модератору
 Re: Чего бы тут подкрутить, чтобы добиться редактируемости рекордсета?  [new]
aleks2
Guest
Глас вопиющего в пустыне!

Хто-нибудь способен привести пример открытия редактируемого в ФОРМЕ проекта ADP ADODB.Recordset-а с данными из MDB-базы.

Ибо советы выше бесплодны...
-------------------------------
c DAO понятно. Спасибо.
16 дек 04, 09:22    [1184447]     Ответить | Цитировать Сообщить модератору
 Re: Чего бы тут подкрутить, чтобы добиться редактируемости рекордсета?  [new]
Dmitry Biryukov
Member

Откуда: Женева
Сообщений: 1751
Где-то слышал, (но не пробовал), что помогает создание на sql-сервер таких же табличек, что и в мдб. т.е. на скл-сервере только структура, а данные в мдб.

пиши если поможет :-)

ПыСы: а данные на скл-сервере чем не устраивают?
16 дек 04, 11:42    [1184966]     Ответить | Цитировать Сообщить модератору
 Re: Чего бы тут подкрутить, чтобы добиться редактируемости рекордсета?  [new]
Shark
Member

Откуда:
Сообщений: 2365
У меня не получилось сделать ADO-рекордсет по MDB редактируемым из формы. Я использовал DAO и стало все хорошо.
16 дек 04, 15:42    [1186215]     Ответить | Цитировать Сообщить модератору
 Re: Чего бы тут подкрутить, чтобы добиться редактируемости рекордсета?  [new]
Мшсещырф
Guest
предложение от Dmitry Biryukov
навело на мысль отключить рекордсет

вот попробовал отключить рекордсет .
кажется это оно. но с ссответствующими последствиями...

Private Sub Form_Load()
  Dim dbConnection As New ADODB.Connection
  Dim dbRecordset As New ADODB.Recordset
'-- Открываем коннекцию
  With dbConnection
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .CursorLocation = adUseClient
    .Open csDbPathName
  End With
'-- Открываем рекордсет
  With dbRecordset
      .CursorType = adOpenKeyset
      .LockType = adLockOptimistic
      .CursorLocation = adUseClient
      .Open cTblName, dbConnection, adOpenDynamic, , adCmdTable
  End With
  Set dbRecordset.ActiveConnection = Nothing
  
  Set Me.Recordset = dbRecordset
End Sub
16 дек 04, 15:59    [1186291]     Ответить | Цитировать Сообщить модератору
 Re: Чего бы тут подкрутить, чтобы добиться редактируемости рекордсета?  [new]
Victosha
Member

Откуда: Москва
Сообщений: 2620
попробуй
http://support.microsoft.com/kb/281998

ЗЫ
спасибо Alexey Sh

(с выражением лица)
17 дек 04, 01:00    [1187492]     Ответить | Цитировать Сообщить модератору
 Re: Чего бы тут подкрутить, чтобы добиться редактируемости рекордсета?  [new]
aleks2
Guest
Victosha
попробуй
http://support.microsoft.com/kb/281998

ЗЫ
спасибо Alexey Sh

(с выражением лица)


Слава тебе, Господи! Ибо не соврал: "просите и дано вам будет...".
17 дек 04, 08:15    [1187676]     Ответить | Цитировать Сообщить модератору
 Re: Чего бы тут подкрутить, чтобы добиться редактируемости рекордсета?  [new]
aleks2
Guest
Эх... рано радовался... однако.

Врут они все. Пример прилагается.

База MDB приложена в следующем посте - не влезла в 70Кб.
17 дек 04, 12:30    [1188664]     Ответить | Цитировать Сообщить модератору
 Re: Чего бы тут подкрутить, чтобы добиться редактируемости рекордсета?  [new]
aleks2
Guest
Пардон гостям прикладывать файлы не дано...

сообщение: поле XXX основано на выражении и не допускает обновления.

если это убрать:
'--------------
' Этого у MS нет но без него тоже хрен.
.CursorLocation = adUseClient ' без этого - просто хрен.
'--------------
сообщение: набор не допускает обновления.

Private Sub Form_Load()
  Dim cn As ADODB.Connection
  Dim rs As ADODB.Recordset
  
   'Create a new ADO Connection object
   Set cn = New ADODB.Connection

   With cn
      .Provider = "Microsoft.Access.OLEDB.10.0"
      .Properties("Data Provider").Value = "Microsoft.Jet.OLEDB.4.0"
      .Properties("Data Source").Value = CurrentProject.FullName + ".mdb"
      .Open
   End With

   'Create an instance of the ADO Recordset class, and
   'set its properties
   Set rs = New ADODB.Recordset
   With rs
      Set .ActiveConnection = cn
      .Source = "SELECT * FROM PI_Controllers"
'      .Source = "PI_Controllers" - один хрен
      .LockType = adLockOptimistic
      .CursorType = adOpenKeyset
      '--------------
      ' Этого у MS нет но без него тоже хрен.
      .CursorLocation = adUseClient '  без этого - просто хрен.
      '--------------
      .Open
   End With
   
   'Set the form's Recordset property to the ADO recordset
   Set Me.Recordset = rs
   Set rs = Nothing
   Set cn = Nothing
End Sub
17 дек 04, 12:34    [1188684]     Ответить | Цитировать Сообщить модератору
 Re: Чего бы тут подкрутить, чтобы добиться редактируемости рекордсета?  [new]
yuniki
Member

Откуда:
Сообщений: 1171
2 aleks2 >
Provider = "Microsoft.Jet.OLEDB.4.0"
ADODB.Recordset приципиально нередактируем в ADP-проекте.


А меня он не редактируем и в MDB проекте. Причем после окрытия рекордсета
свойство .CursorType = adOpenKeyset заменяется на adOpenStatic .

Кстати - а как ты контролы на форму помещал ? Ведь на стадии дизайна истоника еще нет. Я то делал это в дизайн режиме подложив такую же таблицу из текущей базы. А видно нужно как - то программно это делать.
17 дек 04, 14:31    [1189289]     Ответить | Цитировать Сообщить модератору
 Re: Чего бы тут подкрутить, чтобы добиться редактируемости рекордсета?  [new]
yuniki
Member

Откуда:
Сообщений: 1171
2 aleks2 >
Еще - как у тебя могло работать .Properties("Data Source").Value = CurrentProject.FullName + ".mdb"
Да и вообще это у тебя на текущий файл ссылка , а не внешний, но будем считать, что ячипятка.

А насчет редактируемости, так тут видно эта возможность относится ТОЛЬКО к работе с MDB(не APD) и только если в Access2002 будет для внешнего MDB использован новый "крутой" провайдер Microsoft.Access.OLEDB.10.0 :
см
ну и мое [url=http://]https://www.sql.ru/forum/actualthread.aspx?tid=146351&pg=-1
17 дек 04, 15:11    [1189521]     Ответить | Цитировать Сообщить модератору
 Re: Чего бы тут подкрутить, чтобы добиться редактируемости рекордсета?  [new]
aleks2
Guest
yuniki
2 aleks2 >
Еще - как у тебя могло работать .Properties("Data Source").Value = CurrentProject.FullName + ".mdb"
Да и вообще это у тебя на текущий файл ссылка , а не внешний, но будем считать, что ячипятка.



Имя файла типа: file.adp.mdb вполне законно.

file.adp - имя ADP проекта.
file.adp.mdb - имя MDB-базы.

Это сделано, чтобы с разбором CurrentProject.FullName не возиться.
17 дек 04, 15:22    [1189587]     Ответить | Цитировать Сообщить модератору
 Re: Чего бы тут подкрутить, чтобы добиться редактируемости рекордсета?  [new]
yuniki
Member

Откуда:
Сообщений: 1171
Имя файла типа: file.adp.mdb вполне законно. НУ ясно

Но насчет редактируемости, то если внимательно прочитать и тот пример, которым ты воспользовался http://support.microsoft.com/kb/281998 ,
то и там только пример для MDB приведен для соединения с MsSQL, а для ADP c внешним MDB примера нет, и хоть в начале статьи и написано, что все применимо для ADP и MDB, но видимо не все.
Короче - не будет он редактируемым. Изучай отсоединенный набор и редактируй форму с отсоединенным набором, а после присоединяй и через рекордсет(сам то он без формы редактируемый) делай rs.UpdateBatch .

PS. У меня тоже подобная проблема, но вызвана необходимостью ипользоватать другие настройки в rs.LockType = adLockPessimistic, что и потребовало переприсоединить форму к новому рекордсету.
17 дек 04, 17:11    [1190036]     Ответить | Цитировать Сообщить модератору
 Re: Чего бы тут подкрутить, чтобы добиться редактируемости рекордсета?  [new]
aleks2
Guest
Блин, читатель... Читать лучше надоть.

Opening a Separate ADO Connection
At some point, you may have to open and manage your own ADO connection to a Jet database. For example, you would have to use this approach if you are writing your code in a database that is separate from the database that contains the data that you need to access. Note that when you use this approach, Microsoft recommends that you close the ADO connection that you opened when it is no longer needed. For example, you may want to close the ADO connection in the UnLoad event of the form.

The following example demonstrates how to open your own ADO connection to a Microsoft Jet database and to bind a form to it:

1. Create a new blank database.
2. Import the Customers form from the sample database Northwind.mdb.
3. Open the Customers form in Design view.
4. Clear the RecordSource property of the form to unbind form.
5. Set the OnOpen property of the form to the following event procedure:Private
Sub Form_Open(Cancel As Integer)
   Dim cn As ADODB.Connection
   Dim rs As ADODB.Recordset

   'Create a new ADO Connection object
   Set cn = New ADODB.Connection

   With cn
      .Provider = "Microsoft.Access.OLEDB.10.0"
      .Properties("Data Provider").Value = "Microsoft.Jet.OLEDB.4.0"
      .Properties("Data Source").Value = _
          "C:\Program Files\Microsoft Office\Office10" & _
          "\Samples\Northwind.mdb"
      .Open
   End With

   'Create an instance of the ADO Recordset class, and
   'set its properties
   Set rs = New ADODB.Recordset
   With rs
      Set .ActiveConnection = cn
      .Source = "SELECT * FROM Customers"
      .LockType = adLockOptimistic
      .CursorType = adOpenKeyset
      .Open
   End With

   'Set the form's Recordset property to the ADO recordset
   Set Me.Recordset = rs
   Set rs = Nothing
   Set cn = Nothing
End Sub


6. Add the following code to the UnLoad event of the form:Private Sub
Form_Unload(Cancel As Integer)
   'Close the ADO connection we opened
   Dim cn As ADODB.Connection
   Set cn = Me.Recordset.ActiveConnection
   cn.Close
   Set cn = Nothing
End Sub


7. Save the form, and then close it.
8. Open the Customers form in Form view.
9. Add, edit, or delete a record in the form.
Note that the form is bound to an updateable recordset that is using Jet data.
18 дек 04, 07:14    [1190783]     Ответить | Цитировать Сообщить модератору
 Re: Чего бы тут подкрутить, чтобы добиться редактируемости рекордсета?  [new]
yuniki
Member

Откуда:
Сообщений: 1171
Блин, читатель... Читать лучше надоть.

Блин, читатель... Читать лучше надоть. (в смысле - ну ты и нахал)

Читай внимательнее , что я написал - примера где исходный файл ADP , а присоединенный MDB - нет. В том, что ты привел исходный файл - Northwind.mdb , о чем я и попытался тебе сказать, но ты на матерщину скатился...
18 дек 04, 13:47    [1191004]     Ответить | Цитировать Сообщить модератору
 Re: Чего бы тут подкрутить, чтобы добиться редактируемости рекордсета?  [new]
Программист-Любитель
Member

Откуда:
Сообщений: 16839
Кстати, по поводу данного примера. Установленное таким макаром свойство для ГЛАВНОЙ формы (в виде бланка) и ПОДЧИНЕННОЙ формы (в табличном виде) работает.

Но попытка програмно установить LinkChild/MasterFields после этого дает сообщение об ошибке. В Сhild'e отображаются все записи.

Городить Shape ? А я даже ни разу не пробовал делать их (шейпы), редактируемыми...

Как сделать Мастер/Деталь на адодибишных рекордсетах в MDB файле ? (А на хрена в общем-то если даошные прекрасно работают - другой вопрос).
24 дек 04, 13:42    [1207662]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить