MS Access: Утилита по выдаче данных запроса в консоль отладки

    Работая с Аксесом каждый день, я несколько раз на дню сталкиваюсь с проблемой, что мне где-нибудь в VBA-коде нужно посмотреть, что же вернет мне тот или иной SQL-запрос. Для этого мне приходится переключаться из VBA-редактора в основную часть программы, и либо создавать временный запрос (который потом волей-неволей сохраняется), либо быстренько менять SQL в каком-нибудь временном запросе. Поскольку на это тратится всегда куча времени, я решил написать простую функцию, которая выдает результаты запроса в консоль отладки.

    Утилита это называется q (чтобы было удобно вызывать, и намек на Query — запрос), принимает она в качестве параметров сам запрос (либо полностью в виде SQL, либо только название запроса или таблицы, главное, чтобы это можно было открыть через CurrentDB.OpenRecordset), максимальную ширину поля при выдаче (если поле больше — оно обрезается, по умолчанию — 10 символов) и максимальное количество записей (по умолчанию — 100 записей), и выдает в консоль содержимое результатов данного запроса в текстовом виде, выглядит это вот так:

    ?q("qryStatBestVertriebler")
    Running qryStatBestVertriebler...
    Query returned 9 entries.
    -------------------------------------------------------------------------------------
    |  Nr |        VMB |      FName |    Einkauf |    Verkauf |     Gewinn |        Num | 
    -------------------------------------------------------------------------------------
    |    1|        757 | Sönke Doba |  492661,52 |   718774,8 |  226113,28 |        231 | 
    |    2|        877 | Johannes W |   10464,99 |   59677,25 |   49212,26 |         39 | 
    |    3|       1098 | Marco Müll |    8233,18 |   12244,77 |    4011,59 |         36 | 
    |    4|       5527 | Torben Jas |   12974,64 |   24642,42 |   11667,78 |         16 | 
    |    5|       6214 | Thiemo Wol |    5932,17 |   12175,97 |     6243,8 |         23 | 
    |    6|       7833 | Florian Mi |  207384,93 |  293553,82 | 86168,8900 |        254 | 
    |    7|       8310 | Daniel Sch |    3525,56 |    4338,92 |     813,36 |          4 | 
    |    8|       8917 | Daniela He |  187881,29 |  638726,06 |  450844,77 |        559 | 
    |    9|       9330 | Konrad Cyw |   94142,67 |  133056,71 |   38914,04 |        139 | 
    -------------------------------------------------------------------------------------
    Falsch
    


    А вот ее код:
    1. Public Function q(Optional strSQL As String = "", Optional intWidth As Integer = 10, Optional intMax As Integer = 100) As Boolean
    2.  
    3.   Dim tmpRCDSet As Recordset, tmpFeld As Field, tmpString As String, I As Integer, intTemplen As Integer
    4.   Dim intNr As Integer
    5.   
    6.   On Error GoTo Err_SQL
    7.   Debug.Print «Running „ & strSQL & “...»
    8.   Set tmpRCDSet = CurrentDb.OpenRecordset(strSQL)
    9.     tmpRCDSet.MoveLast
    10.     Debug.Print «Query returned „ & tmpRCDSet.RecordCount & “ entries.»
    11.     tmpRCDSet.MoveFirst
    12.     tmpString = "| Nr | "
    13.     For Each tmpFeld In tmpRCDSet.Fields
    14.       tmpString = tmpString & padleft(tmpFeld.Name, intWidth) & " | "
    15.     Next
    16.     
    17.     Debug.Print String(Len(tmpString) — 1, "-")
    18.     Debug.Print tmpString
    19.     Debug.Print String(Len(tmpString) — 1, "-")
    20.     
    21.     intNr = 1
    22.     While (Not (tmpRCDSet.EOF)) And (intNr <= intMax)
    23.       tmpString = "| " & padleft(Str(intNr), 4) & "| "
    24.       For Each tmpFeld In tmpRCDSet.Fields
    25.         tmpString = tmpString & padleft(Nz(tmpFeld.Value, ""), intWidth) & " | "
    26.       Next
    27.       Debug.Print tmpString
    28.       intNr = intNr + 1
    29.       tmpRCDSet.MoveNext
    30.     Wend
    31.     Debug.Print String(Len(tmpString) — 1, "-")
    32.   
    33.   Exit Function
    34.  
    35.  
    36. Err_SQL:
    37.   Debug.Print Err.Number & " " & Err.Description
    38.   Debug.Print «Bad SQL string»
    39.  
    40.  
    41. End Function
    42.  
    43. Function padleft(strLineIn As String, intWidth As Integer) As String
    44.  
    45. If Len(strLineIn) = intWidth Then
    46.   padleft = strLineIn
    47. ElseIf Len(strLineIn) > intWidth Then
    48.   padleft = Mid(strLineIn, 1, intWidth)
    49. Else
    50.   padleft = String(intWidth — Len(strLineIn), " ") & strLineIn
    51. End If
    52.  
    53. End Function
    * This source code was highlighted with Source Code Highlighter.
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 2

      0
      да давуно я VB кода не видел,воспоминания мои не добрые

      автару респект,за то что сам,сделал и поделился
        0
        > да давуно я VB кода не видел,воспоминания мои не добрые
        Да я бы тоже с радостью его не видел, но приходится поддерживать системы, написанные еще лет 10-12 назад...
        > автару респект,за то что сам,сделал и поделился
        Спасибо за плюсик!
        У меня таких наработок много, буду потихоньку выкладывать...

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

      Самое читаемое