Avatar billede karsten_madsen Juniormester
21. januar 2004 - 12:55 Der er 8 kommentarer og
1 løsning

ODBC fra Navision til Excel

Jeg er ved at lave en odbc opdatering fra en navision database til Excel 2000
Når jeg kører den på min egen pc (fra fil) kan jeg godt hente data, men når de skal hentes via serveren går det galt.

Disse to herunder fungerer

    SqlQu = "SELECT Salgsfakturahoved.Kundenr_, Salgsfakturahoved.Nummer, Salgsfakturahoved.""Faktureres til kundenr_"", Salgsfakturahoved.Sælgerkode, Salgsfakturahoved.""Debitor-bogføringsgruppe"", Salgsfakturahoved.Bogføringsdato, "
    SqlQu = SqlQu & "Salgsfakturalinie.Bilagsnr_, Salgsfakturalinie.SalgsVareGr, Salgsfakturalinie.Beløb, Debitor.Nummer, Debitor.Sælgerkode, Debitor.""Oprettet Dato"", Debitor.Kundetype "
    SqlQu = SqlQu & Chr(13) & "" & Chr(10) & "FROM Debitor Debitor, Salgsfakturahoved Salgsfakturahoved, Salgsfakturalinie Salgsfakturalinie "
    SqlQu = SqlQu & Chr(13) & "" & Chr(10) & "WHERE Debitor.Nummer = Salgsfakturahoved.Kundenr_ AND Salgsfakturahoved.Nummer = Salgsfakturalinie.Bilagsnr_ AND "
    SqlQu = SqlQu & "(Salgsfakturahoved.Sælgerkode='" & SælgerNr$ & "') AND "
    SqlQu = SqlQu & "(Salgsfakturahoved.Bogføringsdato>={ts '" & SøgStartDato$ & " 00:00:00'}) AND "
    SqlQu = SqlQu & "(Salgsfakturahoved.Bogføringsdato<={ts '" & SøgSlutDato$ & " 00:00:00'}) "
    SqlQu = SqlQu & Chr(13) & "" & Chr(10) & "ORDER BY Salgsfakturahoved.Nummer"


    'Hent data fra fil
    With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
        "ODBC;DSN=Sample C/ODBC 32 bit;CSF=No;Database=C:\navibase\firma.fdb;PPath=C:\firma" _
        ), Array("\firma\Navi2.60 DK;UID=odbc;PWD=odbc1430;CN=1. regnskab;SERVER=N;")) _
        , Destination:=Range(Dest$))
        .CommandText = SqlQu
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlOverwriteCells
        .SavePassword = True
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .Refresh BackgroundQuery:=False
    End With
    '
    '
    'Hent Data fra database
    With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
        "ODBC;DSN=Navision database;CSF=Yes;SName=financials;NType=tcp;PPath=firma\Navi2.60 DK;UID=user;PWD=password;CN=1" _
        ), Array(". regnskab;SERVER=N;")), Destination:=Range("A1"))

        .CommandText = Array( _

        "SELECT Debitor.Navn, Debitor.Nummer" & Chr(13) & "" & Chr(10) & "FROM Debitor Debitor" & Chr(13) & "" & Chr(10) & "WHERE (Debitor.Nummer>='100000000')" _
        )
        .Name = "Forespørgsel fra Navision database"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlOverwriteCells
        .SavePassword = True
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .Refresh BackgroundQuery:=False
    End With
   
men denne her fungerer ikke

    'Hent Data fra database
    With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
        "ODBC;DSN=Navision database;CSF=Yes;SName=financials;NType=tcp;PPath=firma\Navi2.60 DK;UID=user;PWD=password;CN=1" _
        ), Array(". regnskab;SERVER=N;")), Destination:=Range("A1"))

        .CommandText = SqlQu

        .Name = "Forespørgsel fra Navision database"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlOverwriteCells
        .SavePassword = True
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .Refresh BackgroundQuery:=False
    End With
   

Den kommer med en objekt-fejl 1004

Hvad er der galt?
Avatar billede stewen Praktikant
21. januar 2004 - 13:44 #1
Jeg kan se at I bruger Financials! De steder der står "SNAME" svarer til "SERVERNAME" - du skal derfor være opmærksom på om financials er servernavnet???
Avatar billede karsten_madsen Juniormester
21. januar 2004 - 13:58 #2
Ja "financials" er navnet på serveren

I øvrigt er der kun .connection i forskel mellem de nederste to QueryTables.Add (eller der burde kun være)
Avatar billede stewen Praktikant
21. januar 2004 - 14:18 #3
Alternativt kan du gøre det, at du indspiller en makro i Excel!

- Start indspilningen
- Højreklik i dit ODBC-træk (som trækker fra serveren)
- Vælg "Rediger forespørgsel"
- På den måde kommer du ind i Microsoft Query
- Forlad query'en igen
- Stop Indspilningen

Af den kode du har indspillet - fremgår din

.connection

Denne forbindelse svarer så til det du skal bruge i din kode!

Må nok indrømme at jeg aldrig har haft probelemer! Har selv brugt nedenstående kode til at forbinde:

.Connection = _
"ODBC;DSN=Sample C/ODBC 32 bit;CSF=Yes;SName=10.1.2.3;NType=TCP;UID=user;PWD=password;CN=regnskab;SERVER=N;"
Avatar billede karsten_madsen Juniormester
21. januar 2004 - 17:20 #4
Det er faktisk en indspillet connection. Jeg har kun ændret i .commandtext

Det hele virker på min egen maskine med en lokal database (kopi af den originale), men ikke på serveren. Dog virker den indspillede (nr. 2).

Jeg vil prøve at simplificere .connection, med det du har skrevet herover

Send et svar - så vil jeg teste det på fredag og du vil få en pose points.
Avatar billede stewen Praktikant
22. januar 2004 - 08:24 #5
Virker nu underligt - men hvis du får det til at virke - så kanon!
Avatar billede karsten_madsen Juniormester
05. februar 2004 - 01:14 #6
Stewen: Du har så ærligt fortjent de 200 point, men der er 200 mere hvis du vil vise mig hele din query i excel.
Jeg synes min er bundet op til en bestemt celle i regnearket, men det er vel fordi jeg har optaget den ?
Avatar billede karsten_madsen Juniormester
05. februar 2004 - 01:30 #7
I øvrigt, så var det en odbc driver veer 2.70d til en 2,70f database - den holdt ikke.
Avatar billede stewen Praktikant
11. februar 2004 - 15:13 #8
Undskyld ventetiden - ikke flere point...

Dim selections As Range
Set selections = [Datofelt]

        With Selection.QueryTable
            .Connection = _
            "ODBC;DSN=Sample C/ODBC 32 bit;CSF=Yes;SName=Navision;NType=TCP;UID=User;PWD=password;CN=Regnskab;SERVER=N;"
            .CommandText = Array( _
            "SELECT Finanskonto.Nummer, Finanskonto.Navn, Finanskonto.""Saldo til dato""" & Chr(13) & "" & Chr(10) & "FROM Finanskonto Finanskonto" & Chr(13) & "" & Chr(10) & "WHERE (Finanskonto.Kontotype=0) AND (Finanskonto.Datofilter='" & [Datofelt] & "') AND (Finanskonto." _
        , """Global dimension 1-filter""='1')")
            .Refresh BackgroundQuery:=False
        End With

Din markør skal jo stå en i en celle i trækket......
Avatar billede karsten_madsen Juniormester
12. februar 2004 - 00:48 #9
Hej Stewen

I mellemtiden har jeg fundet ud af følgende statement:
With ActiveSheet.QueryTables.Add(Connection:=ConnStr, Destination:=Range("A2"), Sql:=SqlQu)

Hvor:
ConnStr = "ODBC;DSN=MinODBC;" (eller hav ODBC måtte hedde)
SqlQu = "SELECT ......."

Jeg fandt ud af at lade DSN overtage hele ODBC opgaven i stedet for at tilføje alle opkoblingsparametrene selv, på den måde kan man bare ændre ODBC parametrene i ODBC DSN'en i stedet for at skulle hardcode sig selv ud af det.

men 1000 tak.
Dine points var velfortjent - du hjalp min virkelig over en stor hurdle.
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