Делает доступ MS (2003), имеют что-либо сопоставимое с Хранимой процедурой. Я хочу выполнить сложный запрос в доступе MS

Для конфигураций s3 bucket, ec2 server, cloudfront, route 53 вы можете создать один единственный шаблон облачной информации.

Для лямбда-функций создайте отдельный шаблон облачной информации.

Аналогично для конфигурации кода развертывания.

9
задан 2 revs, 2 users 100% 9 January 2014 в 20:45
поделиться

10 ответов

Можно связать записи с Определяемой пользователем функцией (UDF).

Код ниже может быть вставлен, 'как' в стандартный модуль. SQL для Вас пример был бы:

SELECT tbl.A, Concatenate("SELECT B  FROM tbl
        WHERE A = " & [A]) AS ConcA
FROM tbl
GROUP BY tbl.A

Этот код DHookom, MVP Доступа, и взят из http://www.tek-tips.com/faqs.cfm?fid=4233

Function Concatenate(pstrSQL As String, _
        Optional pstrDelim As String = ", ") _
            As String
    'example
    'tblFamily with FamID as numeric primary key
    'tblFamMem with FamID, FirstName, DOB,...
    'return a comma separated list of FirstNames
    'for a FamID
    '    John, Mary, Susan
    'in a Query
    '(This SQL statement assumes FamID is numeric)
    '===================================
    'SELECT FamID,
    'Concatenate("SELECT FirstName FROM tblFamMem
    '     WHERE FamID =" & [FamID]) as FirstNames
    'FROM tblFamily
    '===================================
    '
    'If the FamID is a string then the SQL would be
    '===================================
    'SELECT FamID,
    'Concatenate("SELECT FirstName FROM tblFamMem
    '     WHERE FamID =""" & [FamID] & """") as FirstNames
    'FROM tblFamily
    '===================================

    '======For DAO uncomment next 4 lines=======
    '======     comment out ADO below    =======
    'Dim db As DAO.Database
    'Dim rs As DAO.Recordset
    'Set db = CurrentDb
    'Set rs = db.OpenRecordset(pstrSQL)

    '======For ADO uncomment next two lines=====
    '======     comment out DAO above     ======
    Dim rs As New ADODB.Recordset
    rs.Open pstrSQL, CurrentProject.Connection, _
            adOpenKeyset, adLockOptimistic
    Dim strConcat As String 'build return string
    With rs
        If Not .EOF Then
            .MoveFirst
            Do While Not .EOF
                strConcat = strConcat & _
                    .Fields(0) & pstrDelim
                .MoveNext
            Loop
        End If
        .Close
    End With
    Set rs = Nothing
    '====== uncomment next line for DAO ========
    'Set db = Nothing
    If Len(strConcat) > 0 Then
        strConcat = Left(strConcat, _
            Len(strConcat) - Len(pstrDelim))
    End If
    Concatenate = strConcat
End Function 
11
ответ дан 4 December 2019 в 10:34
поделиться

Нет способа, которым я знаю о выполнить хранимые процедуры в базе данных Access. Однако Доступ может выполнить хранимые процедуры, если он используется против бэкенда SQL. Если Вы не можете разделить UI к Доступу и данные к SQL, то Ваш лучший выбор будет состоять в том, чтобы, вероятно, кодировать модуль VBA, чтобы дать Вам вывод, в котором Вы нуждаетесь.

2
ответ дан 4 December 2019 в 10:34
поделиться

Я полагаю, что можно создать функции VBA и использовать их в запросах доступа. Это могло бы помочь Вам.

3
ответ дан 4 December 2019 в 10:34
поделиться

Для выполнения задачи, необходимо будет использовать код. Одно решение, с помощью большего количества понятных имен, следующие:

Основная таблица с двумя применимыми столбцами:

Имя таблицы: виджеты

Поле 1: идентификатор (долго)

Поле 2: цвет (текст 32)

Добавьте таблицу с двумя столбцами:

Имя таблицы: ColorListByWidget

Поле 1: идентификатор (долго)

Поле 2: ColorList (текст 255)

Добавьте следующий код к модулю и звоните по мере необходимости для обновления таблицы ColorListByWidget:

Public Sub GenerateColorList()

Dim cn As New ADODB.Connection
Dim Widgets As New ADODB.Recordset
Dim ColorListByWidget As New ADODB.Recordset
Dim ColorList As String

Set cn = CurrentProject.Connection

cn.Execute "DELETE * FROM ColorListByWidget"
cn.Execute "INSERT INTO ColorListByWidget (ID) SELECT ID FROM Widgets GROUP BY ID"

With ColorListByWidget
   .Open "ColorListByWidget", cn, adOpenForwardOnly, adLockOptimistic, adCmdTable
   If Not (.BOF And .EOF) Then
      .MoveFirst
      Do Until .EOF
         Widgets.Open "SELECT Color FROM Widgets WHERE ID = " & .Fields("ID"), cn
         If Not (.BOF And .EOF) Then
            Widgets.MoveFirst
            ColorList = ""
            Do Until Widgets.EOF
               ColorList = ColorList & Widgets.Fields("Color").Value & ", "
               Widgets.MoveNext
            Loop
         End If
         .Fields("ColorList") = Left$(ColorList, Len(ColorList) - 2)
         .MoveNext
         Widgets.Close
      Loop
   End If
End With


End Sub

Таблица ColorListByWidget теперь содержит Вашу желаемую информацию. Будьте осторожны, что список (раскрашивает этот пример) не превышает 255 символов.

2
ответ дан 4 December 2019 в 10:34
поделиться

Никакие хранимые процедуры, никакие временные таблицы.

Если бы необходимо было возвратить запрос как recordset, то Вы могли бы использовать разъединенный recordset.

1
ответ дан 4 December 2019 в 10:34
поделиться

Возможно, вместо того, чтобы спросить, имеет ли Струя хранимые процедуры, необходимо объяснить, что Вы хотите выполнить, и затем мы можем объяснить, как сделать это со Струей (не ясно, используете ли Вы Доступ для своего приложения или просто используете Струю MDB в качестве Вашего хранилища данных).

1
ответ дан 4 December 2019 в 10:34
поделиться

Можно использовать GetString в VBA, который возвратит recordset, разделенный любым значением, которое Вы любите (например, запятая, тире, ячейки таблицы и т.д.), хотя я должен признать, что только использовал его в VBScript, не Visual Basic. W3Schools имеет хорошее учебное руководство, которое, надо надеяться, предоставит себя Вашим потребностям.

0
ответ дан 4 December 2019 в 10:34
поделиться

Ну, можно использовать объект Recordset циклично выполниться через запрос в VBA, связывая значения полей на основе любых критериев, в которых Вы нуждаетесь.

Если Вы захотите возвратить результаты как строки, то Вы будете в порядке. Если Вы хотите возвратить их как запрос, который будет более сложным. Вам, возможно, придется составить временную таблицу и сохранить результаты там, таким образом, можно возвратить их как таблицу или запрос.

0
ответ дан 4 December 2019 в 10:34
поделиться

Можно записать хранимую процедуру как текст и отправить его против базы данных с:

Dim sp as string
sp = "your stored procedure here" (you can load it from a text file or a memo field?)

Access.CurrentProject.AccessConnection.Execute sp

Это предполагает использование объектов ADODB (Библиотека объектов данных ActiveX является coorectly, на который ссылаются в приложении).

Я уверен, что существует что-то похожее с ДАО...

0
ответ дан 4 December 2019 в 10:34
поделиться

@Remou на DHookom's Связывают функцию: ни стандарт SQL, ни Струя не имеют a CONCATENATE() функция множества. Проще говоря, это вызвано тем, что это - нарушение 1 нФ. Я предпочел бы делать это на стороне приложения, а не попытке вынудить SQL сделать что-то, что это не было разработано, чтобы сделать. Возможно, многозначные типы ACE (Access2007) являются лучшим соответствием: все еще NFNF, но по крайней мере существует поддержка уровня механизма. Помните, вопрос касается хранившего объекта: как был бы пользовательский запрос нескалярный столбец с помощью SQL...?

@David W. Fenton на том, имеет ли Струя хранимые процедуры: не сделал Вас, и я обсуждаю это в группах новостей несколько лет назад. Начиная с версии 4.0 Струя/ACE поддерживала следующий синтаксис в Режиме Запроса ANSI-92:

CREATE PROCEDURE procedure (param1 datatype[, param2 datatype][, ...]) AS sqlstatement;

EXECUTE procedure [param1[, param2[, ...]];

Столь Струйный создает и выполняет что-то, что это знает (в одном режиме, по крайней мере) как 'процедура', которая 'хранится' в файле MDB. Однако Струя/ACE SQL чиста и проста: это не имеет никакого синтаксиса управления потока и a PROCEDURE может только содержать один SQL-оператор, таким образом, любой процессуальный кодекс вне рассмотрения. Поэтому ответ на то, имеет ли Струя хранимые процедуры, субъективен.

0
ответ дан 4 December 2019 в 10:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: