2009-09-02 3 views
2

У меня есть запрос, сохраненный в разделе запросов. Я запускаю запрос из VBA. Можно ли сохранить результаты этого запроса в строку?ms-access сохранить результат запроса в строке

+0

Что ваш запрос возвращения? Набор записей или один элемент? – Patrick

+0

набор записей из таблицы –

+0

Вы должны уточнить свой вопрос: нужны ли вам заголовки? что отделяет возвращаемые значения полей? должны ли столбцы иметь фиксированную ширину или нет? Что разделяет строки? Это для отображения или сохранения файла? –

ответ

4

антидопингового Recordset имеет GetString метод, который может быть полезно для вас.

У меня есть запрос с именем qryListTables который выглядит следующим образом:

SELECT m.Name AS tbl_name 
FROM MSysObjects AS m 
WHERE 
     (((m.Name) Not Like "msys%" 
    And (m.Name) Not Like "~%") 
    AND ((m.Type)=1)) 
ORDER BY m.Name; 

Обратите внимание, что запрос использует % вместо * в качестве символа подстановки. Причиной этого выбора является то, что для ADO требуются символы дикой карты ANSI (% и _ вместо * и ?).

можно использовать следующую функцию, чтобы выплюнуть строку, содержащую кавычки имена обычных таблиц в моей базе данных, разделенных точкой с запятой, называя это так:

? DemoGetString("qryListTables", True) 

Public Function DemoGetString(ByVal pQueryName As String, _ 
    Optional ByVal AddQuotes As Boolean = False) As Variant 
    '* early binding requires a reference to Microsoft ActiveX 
    '* Data Objects Library 
    'Dim rs As ADODB.Recordset 
    'Set rs = New ADODB.Recordset 

    '* use late binding; no referenced needed 
    Dim rs As Object 
    Set rs = CreateObject("ADODB.Recordset") 

    Dim varOut As Variant 
    rs.Open pQueryName, CurrentProject.Connection 
    If AddQuotes Then 
     varOut = """" & rs.GetString(2, , , """;""") '2 = adClipString 
     ' strip off last quote 
     If Len(varOut & vbNullString) > 0 Then 
      varOut = Left(varOut, Len(varOut) - 1) 
     End If 
    Else 
     varOut = rs.GetString(2, , , ";") '2 = adClipString 
    End If 
    rs.Close 
    Set rs = Nothing 
    DemoGetString = varOut 
End Function 
+1

В наборах записей DAO вы можете сделать то же самое, поместив вывод GetRows в массив, а затем с помощью функции Join() преобразовать массив в список с разделителями. –

+0

Спасибо. Сначала я искал GetString в DAO, прежде чем понял, что доступен только в ADO.Но я обычно предпочитаю DAO, поэтому я ценю ваше предложение. – HansUp

+0

Поскольку так много людей здесь, на SO, используют ADO, я стараюсь, чтобы была опубликована версия DAO любых решений ADO (где это имеет смысл), поскольку DAO - это интерфейс, соответствующий Access. –

3

Ок .. взяв полный выстрел в темноте здесь ...

Запроса вы работаете буквально запрос ... думать об этом как своей собственной таблице ... это можно ссылаться, как вы будет любая другая таблица и может быть запрошена.

Если вы пытаетесь вернуть один элемент строки на основе одного критерия Ваш лучший выбор является DLookUp:

Lookup = Nz(DLookup(string Field, string Table, string Criteria), "") 

Если вы ищете для группы записей:

dim tsSQL as string 
stSQL = "SELECT * FROM table WHERE field=criteria" 
dim toRecordset as new ADODB.Recordset 
toRecordset.open stSQL, CurrentProject.AccessConnection, int Keyset, int Lock 

Тогда вы можете прямо получить доступ к полям:

If toRecordset.RecordCount > 0 then 
    String = toRecordset!FieldName 
End If 

W/o больше информации ... это об этом ... Также он работает в другом направлении, а ..

Вы можете сделать:

toRecordset.AddNew 
toRecordset!Field = Value 
toRecordset.Update 

Я надеюсь, что где-то там есть ответ для вас.

Чтобы получить весь запрос, который вы могли бы изменить вверх выберите заявление, например, один для «SELECT * FROM имени запроса», и это должно тянуть все это в.

Смежные вопросы