преобразование из строки в дату в VBA и очистка старого вывода данных SQL для программы автоматизации - PullRequest
0 голосов
/ 09 июля 2009

Я создаю инструмент согласования через VBA, который автоматизирует запросы из моей базы данных оракула и рабочего листа. Когда я запускаю запрос, я хочу, чтобы пользователь указал, какой элемент (в данном случае конвейер) запрашивать (на листе много элементов) и даты окончания / начала. У меня проблемы с выяснением следующего:

1) Это запрос - если возвращаемое значение равно NULL, как я могу сказать ему распечатать «ДАННЫЕ НЕ ДОСТУПНЫ»
2) Как очистить старый оператор SQL / вывод данных из конвейера A, когда я запрашиваю конвейер B?
3) Мои даты сохраняются как строки в Oracle - как я могу преобразовать это в дату?
Спасибо!

Вот что у меня есть:

Option Explicit
Option Base 1

Dim cnnObject As ADODB.Connection
Dim rsObject As ADODB.Recordset
Dim strGPOTSConnectionString As String

Dim Pipeline As String
Dim DateStart As Date
Dim DateEnd As Date
Dim strQuery As String

Sub ClickButton2()

Debug.Print ("Button has been clicked")
Pipeline = InputBox("Enter PipeLine", "My Application", "Default Value")
DateStart = InputBox("Enter Start Date", "My Application", DateTime.Date)
DateEnd = InputBox("Enter End Date", "My Application", DateTime.Date + 1)

Range("B1").Value = Pipeline
Range("B2").Value = DateStart
Range("B3").Value = DateEnd

strQuery = "select pipelineflow.lciid lciid, ldate, volume, capacity, status, " & _
"pipeline, station, stationname, drn, state, county, owneroperator, companycode, " & _
"pointcode, pointtypeind, flowdirection, pointname, facilitytype, pointlocator, " & _
"pidgridcode from pipelineflow, pipelineproperties " & _
"where pipelineflow.lciid = pipelineproperties.lciid " & _
"and pipelineflow.audit_active = 1 " & _
"and pipelineproperties.audit_active =1 " & _
"and pipelineflow.ldate >= '" & Format(DateStart, "dd-MMM-yyyy") & "' and pipelineflow.ldate < '" & Format(DateEnd, "dd-MMM-yyyy") & "' " & _
"and pipelineproperties.pipeline = '" & Pipeline & "' "


    Call PullZaiNetData(strQuery)

    Call TieOut

End Sub

Sub PullZaiNetData2(ByVal strQry As String)

    Set cnnObject = New ADODB.Connection
    Set rsObject = New ADODB.Recordset

    strGPOTSConnectionString = "DRIVER={Microsoft ODBC for Oracle}; SERVER=XYZ; PWD=XYZ; UID=XYZ"


    cnnObject.Open strGPOTSConnectionString

    rsObject.Open strQry, cnnObject, adOpenStatic
    Worksheets("ZaiNet Data").Cells(1, 1).CopyFromRecordset rsObject


    rsObject.Close
    cnnObject.Close

    Set rsObject = Nothing
    Set cnnObject = Nothing

End Sub

Sub TieOut()

End Sub

Кроме того, если бы я хотел что-то изменить, как я мог бы разрешить пользователю вводить даты и передавать в ячейку вместо запроса? Я знаю, что я должен сделать что-то вроде установки:

startDate = Worksheets("Instructions").Cells(5, 4).Value

Но возможно ли это?

1 Ответ

1 голос
/ 10 июля 2009
  1. Чтобы заменить ваши нули, вы можете использовать функцию Oracle NVL. например "ВЫБЕРИТЕ NVL (pipeflow.lciid, 'ДАННЫЕ НЕ ДОСТУПНЫ') ..."

  2. Чтобы очистить старые данные, вы можете использовать Рабочие таблицы («Данные ZaiNet»). Cells.Clear

  3. Чтобы преобразовать строки даты в даты, используйте функцию Oracle TO_DATE, например, «SELECT TO_DATE (ldate, 'dd-mon-yyyy') ...», где dd-mon-yyyy - формат даты строки даты в базе данных.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...