Как читать dt_DBTIME2 с помощью VBScript - PullRequest
1 голос
/ 22 мая 2019

Я пытаюсь прочитать набор записей из базы данных SQL, где некоторые поля имеют тип time (n). Когда я читаю строку (recordset.Fields(n)), VBScript останавливается на этом поле с «многошаговой ошибкой».

Я пытался установить переменную с набором записей, поэтому:

Dim a
Set a = recordset.Fields(specific time column)

Я пытался разыграть поле.

Я пытался найти какую-либо информацию об этом конкретном типе, но не могу найти какую-либо информацию об этой временной структуре, кроме того, она содержит часы, минуты, секунды и дробные части.

ReDim iArr(iColumnCount)

While Not objRecordset.EOF
    For iColumnIndex = 0 To (iColumnCount-1)
        'SQL_FIELDTYPE_TIME is a constant at top of page with value 145
        If objRecordset.Fields(iColumnIndex).Type = SQL_FIELDTYPE_TIME Then
            'Tried so much over here...
            Dim Tme, Str
            Set Tme = objRecordset.Fields.Item(iColumnIndex)

            iArr(iColumnIndex) = CStr(clDBTime(Tme).Hour)
            Set Tme = Nothing
        Else
            iArr(iColumnIndex) = objRecordset.Fields.Item(iColumnIndex)
        End If
        If Err.Number <> 0 Then
            fLogData("Ophalen data (" + oDB.strDatabaseNaam + ") rij " + _
                CStr(objRecordset.AbsolutePosition) + " kolom " + _
                CStr(iColumnIndex) + " mislukt: " + Err.Description)
            Err.Clear
        End If
    Next
    List.Add i, iArr
    i = i + 1
    objRecordset.MoveNext   'Next row
Wend

Ошибки, которые я получаю:

  • Объект не поддерживает это свойство
  • Ошибка нескольких шагов
  • Несоответствие типов

и т.д.. и т.д.

Кто-нибудь, кто может мне помочь, как прочитать значение времени из SQL в VBScript?

РЕДАКТИРОВАТЬ: решено! Стоит почти 4 часа пробной ошибки, но есть решение :) 1026 *

Изменен оператор выбора SQL на:

SELECT COL, COL,... (this are the 'usual' columns),CAST(TIMECOL -this is the time(n) column- as varchar),CAST(TIMECOL2 -this is the time(n) column- as varchar)  FROM tabel

И внутри кода: TimeValue(read value - from recordset.fields...) (это для того, чтобы изменить varchar во времени)

И .. это просто прекрасно работает!

Edit2: код набора записей:

if iResCount > 0 and iColumnCount > 0 then
  redim iArr(iColumnCount)

  while not objRecordset.EOF
    for iColumnIndex = 0 to (iColumnCount-1)
      iArr(iColumnIndex) = objRecordset.Fields.Item(iColumnIndex)
      if Err.Number <> 0 then
        fLogData("Ophalen data ("+oDB.strDatabaseNaam+") rij "+cstr(objRecordset.AbsolutePosition)+ " kolom "+cstr(iColumnIndex)+" mislukt: "+Err.Description)
        Err.Clear
      end if
    next
    List.Add i, iArr
    i = i + 1
    objRecordset.MoveNext  'Next row
  wend
  set oResult = List'CreateObject("Scripting.Dictionary")
end if

И пример вызова функции:

'fGetRecord(DB, Table, Columns, Condition, Field to sort on, Type of sort)
fGetRecord(oHoofdDB,CONST_HDB_STR_TBL_KALENDER,CONST_HDB_STR_KAL_ID+","+CONST_HDB_STR_KAL_NAAM+",CAST("+CONST_HDB_STR_KAL_STARTIJD+" as varchar),CAST("+CONST_HDB_STR_KAL_STOPTIJD+" as varchar)",CONST_HDB_STR_KAL_NAAM+"='"+Naam+"'", "", SORTEER_OPLOPEND)

John

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