Экспорт формы MS Access 2016 с пустыми полями в электронную таблицу Excel с использованием SQL - PullRequest
0 голосов
/ 31 января 2020

Я экспортирую данные формы MS Access 2016 в электронную таблицу Excel.

Dim ctrlForm As Control
Dim sqlSelect As String
sqlSelect = "Select "

For Each ctrlForm  In Forms![Student Listing].Form.Controls
    If TypeOf ctrlForm  Is TextBox Then
        If ctrlForm .ColumnHidden = False Then
            ' this prints 109, which is text box - perfect
            Debug.Print "Control Type: " & ctrlForm .ControlType
            sqlSelect = sqlSelect & ctrlForm .Name & ","
        End If 'end if for hidden              
    End If 'end if for TypeOf
Next ctrlForm 

sqlSelect = Left(sqlSelect, Len(sqlSelect) - 1) 

sqlSelect = sqlSelect & " From " & Forms![Student Listing].Form.RecordSource

'prints the SQL statement - perfect too, all the view-able fields
Debug.Print "SQL Prompt: " & sqlSelect

Dim rs As Recordset
'errors here  with: Run-time error '3061' Too few parameters.
'Expected 1(or some other number) - even if there are 30 entries in the sqlSelect variable.
Set rs = CurrentDb.OpenRecordset(sqlSelect)

Если я скрываю все поля, которые могут содержать «нет данных - или пустые», это работает. Самая большая проблема - средний инициал, но я подозреваю, что поиск пустого / пустого - это ключ. Как мне go сделать это и сохранить пустое поле (столбец) для экспортированного файла Excel?

Ответы [ 2 ]

0 голосов
/ 03 февраля 2020

Спасибо за вашу помощь. Я нашел проблему. Вопросом оказались поля даты. Если я не экспортирую поле даты, все работает. Если поле даты экспортируется - сообщение об ошибке я описал выше. Видимо, это на самом деле известная вещь. Обходной путь - создать вторичное текстовое поле, содержащее текст поля даты. Вместо этого экспортируйте это поле. Без потери функциональности, но экспорт работает нормально.

0 голосов
/ 03 февраля 2020

" Слишком мало параметров " означает, что вы указали имя поля без значения (даже пустое - в этом случае не достаточно запятых в части данных строки)

вариант 1: ваша единственная ошибка может быть пробелом между "ctrlForm .Name"

, если это не помогает, попробуйте:
проверить, если контрольный текст пуст - когда он есть, запишите пустую строку (или сообщение об ошибке) и запятую, а не пропустите поле. итак после отладки:

if .Name <> "" then
    sqlSelect = sqlSelect & ctrlForm .Name & ","
else 
    sqlSelect = sqlSelect & ","
end if
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...