Avatar billede hjald8 Nybegynder
10. november 2008 - 19:47 Der er 1 kommentar og
1 løsning

Sql-Oracle-odbc-vba

Hej

Jeg har fået adgang til en oracle database, som jeg vil connecte via vba (evt. ved at aktivere en commandbutton eller ved opstart af filen) Sådan som jeg ser det, er det en provider=MSDAORA.1 med et UserIT (test) og kodeord (test), samt et databasenavn (test).

Der er i databasen lavet 3 views: Eksempel1_view, Eksempel2_view og Eksempel3_view. Alle views har i første felt en firmakode, som gerne skulle bruges til at jeg kun får hits med en defineret firmakode fra de forskellige views ned i Excel. Firmakoden er angivet i en celle i Excel.

Resultat er udtræk kunne lægges i Ark1. Det første i række 1-9, næste i række 10-19, næste i række 20-29. Ingen af resultaterne bliver over 10 hits.

Jeg har ingen erfaring i at connecte med sql og oracle herunder sprogbrug hertil, så jeg håber at én vil bære over med mig og hjælpe. ;-)
Avatar billede hjald8 Nybegynder
11. november 2008 - 14:56 #1
Jeg har nu forsøgt mig på forskellig vis bland andet med makrooptageren. Dette virker jo fint med at få et view ned i excel:

With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
        "OLEDB;Provider=MSDAORA.1;User ID=odbc_user;Data Source=test", Destination:= _
        Range("$A$7")).QueryTable
        .CommandType = xlCmdTable                       
        .CommandText = Array("""EDB"".""Eksempel1_VIEW""")
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .SourceConnectionFile = _
        "\\Datakilder\test (Standard) Eksempel1_VIEW.odc"
        .ListObject.DisplayName = "Tabel_test__Standard__Eksempel1_VIEW7"
        .Refresh BackgroundQuery:=False
    End With

Men for det første får jeg det ned i en form for querytabel, som er filteret. Kan jeg forhindre dette - eller er det viewet, som skal ændres?
Næste er hvorledes sikre jeg at jeg kun får de få rækker for den pågældende firmakode?
Avatar billede hjald8 Nybegynder
16. november 2008 - 08:18 #2
Problemet er løst ved god hjælp fra en ven. Det blev noget i denne stil, hvor man skal sikre sig at vba i tools/reference er indstillet til dette (Microsoft ActiveX Data Object Library 2.8):

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim row As Integer
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset

' firmakode
SQL_Firma = Sheets("test").Range("A1").Value

' sql
SQL_Tabel_test_standard_Eksempel1_VIEW = "SELECT * FROM Tabel_test_standard_Eksempel1_VIEW WHERE FIRMA = " & SQL_Firma & _
  " AND ANSVARLIG = 'Chef'"

cn.Open ("Provider=MSDAORA.1;Data Source=Base;User Id=test;Password=test;")

' hente data om Standard
rs.Open SQL_Tabel_test_standard_eksempel1_VIEW, cn
With Worksheets("test").Range("H15:P15")
  .ClearContents
  .CopyFromRecordset rs
End With
rs.Close

Set rs = Nothing

cn.Close
Set cn = Nothing
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel-kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester