Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да направите редактируема заявка за преминаване / преминаване?

В съответствие с моя коментар по-горе и отговора на Yawar, не знам, че Pass Through Queries могат да се редактират/актуализират. Те могат да се редактират в смисъл, че можете да редактирате запазен обект на Pass Through Query, но не вярвам, че е възможно Pass Through Query да създаде редактируем набор от записи.

Основно има два метода за свързване на Access към източник на данни, който не е Access.

Първият метод и най-популярен е да се използва някаква форма на свързани таблици, обикновено ODBC свързани таблици. Има различни методи за използване на ODBC свързани таблици с MS Access, но това, което повечето разработчици предпочитат, е да използват DSN-Less връзки, които се обновяват или възстановяват (изтриват и свързват отново) по време на стартиране на вашето приложение. Имайте предвид, че когато използвате ODBC, вие все още използвате и DAO. DAO е обектът за достъп до данни по подразбиране, вграден в MS Access и дори когато не пишете изрично DAO код, MS Access все още използва DAO под капака, за да свърже вашите формуляри, отчети и заявки с вашия източник на данни. В случая с ODBC, всъщност в крайна сметка имате два работещи слоя за достъп до данни, DAO и ODBC. Но можете да използвате ODBC/DAO с доста прилична производителност и без писане на код (освен за поддържане на ODBC свързаните таблици).

Вторият метод е да използвате ADO. Противно на общоприетото схващане, това не означава, че трябва да използвате необвързани форми. Но това означава, че трябва да напишете повече код, отколкото да използвате JET/DAO/MSAccess или DAO/ODBC/SSQL сървър. Трябва да напишете код, за да въведете записи от вашата база данни в и ADO Recordset и след това да използвате код, за да обвържете формуляра си с този Recordset. Трябва да напишете повече код, за да поддържате дъщерните форми в синхрон с родителските форми, да вмъквате чужди ключове в дъщерните форми, когато се създават нови записи, както и за редица други неща, като филтриране и сортиране като вградено във формуляра филтриране и сортиране опциите обикновено не работят с ADO набори от записи. ADO е чудесен начин да говорите със SQL Server, тъй като наистина ви дава много контрол, но тъй като кодът е интензивен и тъй като ODBC свързаните таблици работят толкова добре, повечето разработчици не препоръчват използването на ADO, освен ако няма друг начин да направите каквото ти искаш да направиш. Един пример за това е извикването на съхранени процедури. Вярвам, че Pass Through Queries може да се използва за извикване на съхранени процедури, но също така мисля, че има някои ограничения там (като използването на параметри). Вярвам, че в повечето случаи разработчиците използват ADO за извикване на съхранени процедури. Използвам ADO много, но не използвам много съхранени процедури (все още не), така че нямам много информация за това.

Друго нещо, което си струва да се спомене, е, че DAO с ODBC използва „мързеливо зареждане“, но ADO ви принуждава да изтеглите всички данни, което може да отнеме много време и да изразходва много памет, ако имате> милиони редове. В противен случай ще трябва да внедрите някакъв вид страниране.

Моята собствена функция за създаване на единична ODBC свързана таблица без DSN е по-долу. Ако сте нов в Access и нов в VBA, това вероятно няма да има много смисъл за вас. Кодът изтрива всяка дефиниция на таблица, която вече съществува за таблицата, която се опитвате да свържете, което е малко опасно, защото вярвам, че може да изтрие локална, несвързана таблица, която не бихте искали. Обработката на грешки тук също не е на ниво, но повечето онлайн примерни кодове нямат добра обработка на грешки в себе си поради усложненията, които включват. Създаването на индекси на първичен ключ на свързана таблица не винаги е необходимо. Просто го имам вграден във функцията си, защото ми трябваше веднъж за конкретен проект, така че сега го оставям там и го използвам, за добро или за лошо.

За да използвате правилно този код, наистина трябва да имате някъде списък с всичките си свързани таблици и да преминете през този списък и да извикате тази функция за всяка таблица. Тази функция ви позволява да свържете таблицата, като използвате име, различно от действителното й име в SQL Server. Трябва също така да имате начин за изграждане на валиден ODBC низ за връзка, който също трябва да бъде предаден в тази функция.

Private Sub LinkODBCTable(sSourceTableName As String, _
                        sLocalTableName As String, _
                        sPrimaryKeyField As String, _
                        sConString As String)

    Dim dbCurrent As DAO.Database
    Dim tdfCurrent As DAO.TableDef
    Set dbCurrent = DBEngine.Workspaces(0).Databases(0)

    On Error Resume Next
    'Be Careful, this could delete a local, non-linked table.
    dbCurrent.TableDefs.Delete sLocalTableName
    If Err.Number <> 0 Then
        If Err.Number = 3011 Then
            'Table does not exist
        Else
            MsgBox "Error in LinkODBCTable" & vbCrLf & vbCrLf & Err.Number & " " & Err.Description
        End If
        Err.Clear
    End If

    On Error GoTo 0

    Set tdfCurrent = dbCurrent.CreateTableDef(sLocalTableName)
    tdfCurrent.Connect = sConString
    tdfCurrent.sourceTableName = sSourceTableName
    dbCurrent.TableDefs.Append tdfCurrent

    On Error Resume Next
    If sPrimaryKeyField <> "" Then
        dbCurrent.Execute "CREATE INDEX __UniqueIndex ON [" & sLocalTableName & "] (" & sPrimaryKeyField & ")", dbFailOnError
        If Err.Number <> 0 Then
            If Err.Number = 3283 Then
                'Primary Key Already Exists
            Else
                MsgBox "Error in LinkODBCTable" & vbCrLf & vbCrLf & Err.Number & " " & Err.Description
            End If
            Err.Clear
        End If
    End If

    Set tdfCurrent = Nothing
    Set dbCurrent = Nothing
End Sub

Има няколко наистина добри ресурса, които трябва да проверите относно DAO, ADO, Pass Through Queries, SQL Server и т.н.:

http://technet.microsoft.com /en-us/library/bb188204%28v=sql.90%29.aspx
http://www.utteraccess.com/wiki/Choosing_between_DAO_and_ADO

Ето пример за обвързване на формуляр към ADO набор от записи. Това обаче е малко подвеждащо, защото е най-добре да имате обект за глобална връзка, който остава отворен по време на изпълнение на приложението. Това ви позволява да използвате ADO набори от записи, които могат да се актуализират автоматично. Използването на тази практика може също да направи вашия набор от записи обект на ниво формуляр.

http://msdn.microsoft .com/en-us/library/office/bb243828%28v=office.12%29.aspx



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да увелича стойността за всяка итерация INSERT INTO?

  2. Всичко, което трябва да знаете за SQL Server JOINS

  3. scope_identity срещу ident_current

  4. Изчисляване на SQL Server ROW_NUMBER() OVER() за извлечена таблица

  5. Изпълнение на задание на SQL Server Agent от съхранена процедура и връщане на резултат от заданието