Как обновить данные из таблицы Excel в базу данных на основе SQL? - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть таблица Excel со столбцами name, value и Date.Я хочу поместить эти значения и даты в базу данных.Мне удалось создать соединение с базой данных с помощью следующего кода.Стратегия в этом коде состоит в том, чтобы войти в базу данных с именем, а затем на следующем шаге перейти к основной таблице с уникальным идентификатором этого имени.Затем с этим идентификатором обновите значения и дату в базовой таблице.Проблема состоит в том, чтобы связать таблицу Excel так, чтобы она принимала значения и даты из этой таблицы Excel с заданным именем.

Name               Value           Date 

12345_ABC_DefGeh   12345678        01.11.2018

...... около 15 значений.

Sub fixing()    
      Dim pReference As String  
      Dim pFixingValue As Double
      Dim pFixingdate As Date
      Dim pReferenceUnderlying As String

       Dim Con As ADODB.Connection
       Dim Q As New AblSQLQuery
       Dim SQL As String

      Dim uniqueid As Long  ' uniqueid is the unique code of this instrument
      Dim uniqueidUnderlying As Long  
      Dim QuoteType As Long
      Dim Numero As Long
      Dim Stmt As ADODB.Recordset
      Dim bInsert As Boolean
      Dim Ins As SR2COM.Instrument
      Dim InsUnderlying As SR2COM.Instrument
      Dim Ins2 As SR2COM.Instrument
       '
     If isDeveloper() = True Then
         pReference = "12345_ABC_DefGeh"
     End If
     '
     Engine.Risque.Initialise
     Pref.GetUserID Operator, OperatorGroup

     Set Con = Engine.xvz.ConnectADO
     ' get uniqueid and set instrument

     uniqueid = Engine.Instrument(pReference).Code
     Set Ins = Engine.Instrument(uniqueid)

      If pReferenceUnderlying <> vbNullString Then
         UniqueidUnderlying = Engine.Instrument(pReferenceUnderlying).Code
      End If

      ' select latest fixing entry

           SQL = "SELECT *" & _
            " FROM ABV_local_fixings a" & _
           " WHERE Code = " & uniqueid

     If SicovamUnderlying <> 0 Then
         SQL = SQL & _
             " AND underlying = " & uniqueUnderlying
     End If

    SQL = SQL & _
             " AND observation = (SELECT MAX(observation)" & _
                                  " FROM ABV_local_fixings b" & _
                                 " WHERE b.code = a.code"
     If UniqueidUnderlying <> 0 Then
         SQL = SQL & _
                                   " AND b.underlying = a.underlying"
     End If
     SQL = SQL & _
                                 ")" & _
           " ORDER BY numero DESC"

     Set Stmt = Con.Execute(SQL)
 '    End If
     Numero = Stmt!Numero
     QuoteType = Stmt!QuoteType
     UniqueidUnderlying = Stmt!Underlying
     Set InsUnderlying = Engine.Instrument(UniqueidUnderlying)

    If pReferenceUnderlying = vbNullString Then
         pReferenceUnderlying = InsUnderlying.Reference
     End If

check if insert or update

     SQL = "SELECT *" & _
            " FROM ABV_local_fixings a" & _
           " WHERE Code = " & uniqueid

    If UniqueidUnderlying <> 0 Then
         SQL = SQL & _
             " AND underlying = " & UniqueidUnderlying
     End If

    SQL = SQL & _
             " AND observation = TO_DATE('" & Format(pFixingdate, "ddmmyyyy") & "', 'DDMMYYYY')"

     Set Stmt = Con.Execute(SQL)

    If Stmt.EOF Then
         bInsert = True
     End If

     ' insert/update fixing

       If bInsert = True Then
         SQL = "INSERT INTO ABV_local_fixings" & _
                         " (numero, code, observation, underlying, value,  quotetype)" & _
                  " VALUES (" & Numero + 1 & _
                          "," & Uniqueid & _
                          ",TO_DATE('" & Format(pFixingdate, "ddmmyyyy")   & "', 'DDMMYYYY')" & _
                          "," & UniqueidUnderlying & _
                          "," & pFixingValue & _
                          "," & QuoteType & _
                          ")"
     Else
         SQL = "UPDATE ABV_local_fixings" & _
                 " SET value = " & pFixingValue & _
               " WHERE numero = " & Numero & _
                 " AND code = " & Uniqueid & _
                 " AND observation = TO_DATE('" & Format(pFixingdate, "ddmmyyyy") & "', 'DDMMYYYY')" & _
                 " AND underlying =" & UniqueidUnderlying
     End If  

 End Sub>

Проблема в том, чтобы подключить таблицу Excel, я взял этот код из аналогичного предыдущего проекта.Но это прекрасно работает, чтобы войти в базу данных и добраться до базовой таблицы.Я уверен, что небольших модификаций будет достаточно, я потратил слишком много времени, но все еще не смог решить проблему.

1 Ответ

0 голосов
/ 04 февраля 2019

используйте

insert into table_name values ()

это всего 15 строк, которые вам нужно вставить.Кроме того, вы можете автоматизировать эту вставку из Excel с помощью небольшого количества копий / вставок строковых значений.

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