Каким прараметром разрешить Me.Recordset.AddNew

LightN
Дата: 28.12.2015 11:20:58
Добрый день.
Подскажите есть ли вообще такой параметр у SQLOLEDB, позволяющий Recordset поставить на add?
Каким Provider воспользоваться если SQLOLEDB этого не позволяет в принципе?

' cbChangeDataBase это БД это годы (2015,14,13 ...)
' Цель - оперативно прыгать в БД разных лет и менять Me.Recordset соответственно + с возможностью add

Private Sub cbChangeDataBase_AfterUpdate()
 Dim rst1 As New ADODB.Recordset
   rst1.CursorLocation = adUseClient
   rst1.Open "SELECT * FROM Seriynik_INV_REQ ORDER BY keyID DESC", _
    "Provider=SQLOLEDB;Trusted_Connection=Yes;APP=Napp;SERVER=S-DB1.N.RU;Database=BD_" & cbChangeDataBase & ";"
   Set Me.Recordset = rst1
   Set rst1 = Nothing
End Sub

Заранее спасибо.
Rivkin Dmitry
Дата: 28.12.2015 11:49:33
Сначала надо физически открыть коннекшен, а уж потом открывать рекрдсет
Dim cnt As ADODB.Connection

Set cnt = New ADODB.Connection
    With cnt
        .ConnectionString = "Provider=SQLOLEDB;Trusted_Connection=Yes;APP=Napp;SERVER=S-DB1.N.RU;Database=BD_" & cbChangeDataBase & ";"
        .Open
    
    End With

Dim rst As New ADODB.Recordset
        With rs
            .ActiveConnection = cnt
            .CursorLocation = adUseClient
            .CursorType = adOpenKeyset
            .LockType = adLockPessimistic
            .Source = "SELECT * FROM Seriynik_INV_REQ ORDER BY keyID DESC"
            .Open
        End With
LightN
Дата: 28.12.2015 12:35:38
Rivkin Dmitry,
Не хочет добавлять. Стрелочка со звёздочкой в ленточной форме (добавить новую запись) не активна.
Если сделать
Me.UniqueTable = "Seriynik_INV_REQ",
До добавлять можно, но сохранить эту нелзя, пишет "UniqueTable не существует или полностью не определена!"
Rivkin Dmitry
Дата: 28.12.2015 14:14:07
LightN,

Наверное, в твоей таблице нет первичного ключа Акс это не любит. Создай ключ
LightN
Дата: 28.12.2015 14:50:18
Rivkin Dmitry,
А2003+ линкованные таблицы если 2015.
Если Год<>2015, то форма меняет rst на New ADODB.Recordset
В 2015 году ключ есть, а как его задать на ADODB ?

Но это же делается на ODBC линкованные таблицы а не на ADODB.Connection, или я не прав?
       txt = "CREATE UNIQUE INDEX PrimaryKey On [" & Me.[TableName] & "] (" & Me.PrimaryIdFields_Dub & ") With PRIMARY;"
       CurrentDb.Execute txt, dbFailOnError
   
LightN
Дата: 28.12.2015 15:21:52
Rivkin Dmitry,
А ведь Вы правы! Это была вью = [Seriynik_INV_REQ]
Как только перевёл на физическую таблицу = [Seriynik] - всё сразу заработало!
И как быть с запросами ввиде Views? В линке ODBC - корректно работает, а в ADO - проблема ...
Rivkin Dmitry
Дата: 28.12.2015 15:47:42
LightN
Rivkin Dmitry,
А2003+ линкованные таблицы если 2015.
Если Год<>2015, то форма меняет rst на New ADODB.Recordset
В 2015 году ключ есть, а как его задать на ADODB ?

Но это же делается на ODBC линкованные таблицы а не на ADODB.Connection, или я не прав?
       txt = "CREATE UNIQUE INDEX PrimaryKey On [" & Me.[TableName] & "] (" & Me.PrimaryIdFields_Dub & ") With PRIMARY;"
       CurrentDb.Execute txt, dbFailOnError
   

Это совсем неправильная постановка вопроса: первичный ключ должен создаваться при проектировании и созадании базы данных а не на "ходу". Я не знаю причин по которым первичный ключ неприемлем при проектировании таблиц
LightN
Дата: 28.12.2015 17:37:26
Rivkin Dmitry
Это совсем неправильная постановка вопроса: первичный ключ должен создаваться при проектировании и созадании базы данных а не на "ходу". Я не знаю причин по которым первичный ключ неприемлем при проектировании таблиц

А я знаю. Причина - MSSQL - сервер. Если Connection смотрит на MSSQL - таблицу, то ключ есть автоматом, а если на View (т.е. запрос), то ключа нет. В этом случае на ODBC - прилинкованной таблице его нужно указать явно.
В моем случае это была View ...