Поскольку вы изменили свои вопросы, я добавлю еще один ответ.
1) Это запрос - если значение равно NULL, как я могу сказать ему распечатать «ДАННЫЕ НЕ ДОСТУПНЫ»
Какое значение? Я подозреваю, что вы имеете в виду, когда запрос не возвращает записей. Чтобы проверить это, проверьте для rsObject.RecordCount = 0:
Dim ws As Worksheet
Set ws = Worksheets("ZaiNet Data")
ws.UsedRange.Clear '' remove results of previous query if any
If rsObject.RecordCount = 0 Then
ws.Cells(1, 1) = "DATA NOT AVAILABLE"
Else
ws.Cells(1, 1).CopyFromRecordset rsObject
End If
Вы также можете проверить наличие одного или обоих из rsObject.BOF или rsObject.EOF («Начало файла» или «Конец файла» соответственно).
При разработке вещей в VBA, особенно при использовании новых функций, с которыми я не знаком, я провожу много тестов, которые выводят вещи в Immediate Window. Чтобы помочь с этим, я использую следующую небольшую процедуру:
Sub Say(s as String)
Debug.Print s
End Sub
Это немного облегчает генерацию результатов тестирования, которые постоянно вводят "Debug.Print" (даже немного легче, чем вводить "Debug.P" + Enter с помощью Intellisense).
Поэтому, когда вы открываете свой набор записей, показывайте количество записей после него:
rsObject.Open strQry, cnnObject, adOpenStatic
Say rsObject.RecordCount & " records"
Делайте что-то подобное в любое время, когда хотите проверить значение.
Позже, если вы хотите записать свои операторы отладки в текстовый файл, вам просто нужно изменить операцию подпрограммы Say ().
2) Как очистить старый вывод из конвейера A, когда я запрашиваю конвейер B?
Как показано в контексте выше:
ws.UsedRange.Clear '' remove results of previous query if any
3) Мои даты сохраняются как строки в Oracle - как я могу преобразовать это в дату?
Технически вам не нужно преобразовывать результирующие строки даты в значения даты, вы можете обнаружить, что просто поместив их в ячейку, Excel будет обрабатывать их как значения даты.
Вам просто нужно убедиться, что даты пользователя конвертируются в формат, ожидаемый базой данных.
Строка запроса в том виде, в каком она стоит выше, все еще показывает две строки, включающие даты пользователя. Тот, который использует Format () для преобразования их в формат "dd-MMM-yyyy", это тот, который вы хотите сохранить. Удалите вторую строку, убедившись, что синтаксис объединения строк по-прежнему правильный.
Чтобы фактически преобразовать строку даты в значение даты, вы должны использовать функцию CDate ():
Sub DateTest()
Dim sDate As String
Dim dDate As Date
sDate = "09-Jul-2009"
dDate = CDate(sDate)
Say "sDate = " & sDate
Say "dDate = " & dDate
dDate = dDate + 1
Say "dDate = " & dDate
End Sub
Immediate Window output:
sDate = 09-Jul-2009
dDate = 7/9/2009
dDate = 7/10/2009
Мы можем убедиться, что она преобразовала строку в значение даты, потому что она отображается в формате даты по умолчанию для моего компьютера и отвечает на математическую дату (добавление 1 дня).