Avatar billede lotte48 Nybegynder
24. august 2007 - 14:11 Der er 11 kommentarer og
1 løsning

Excel - Query - databaseforespørgsel

Jeg har problemer med nedenstående macro....
Jeg vil gerne opdatere en forespørgsel - med et nyt vilkårligt nummer i databasen dvs. ændre 4194 til et andet nummer - fx. med en msgbox eller blot få macroen til at læse det nummer jeg taster i celle A1.
Men...  hvad skal jeg ændre i koden, for at den virker??

Sub Macro4()
    With Selection.QueryTable
        .Connection = Array(Array( _
        "ODBC;DRIVER={Client Access ODBC Driver (32-bit)};COMPRESSION=0;LAZYCLOSE=1;CMT=0;PKG=QGPL/DEFAULT(IBM),2,0,1,0,512;LANGUAGEID=ENU;DF" _
        ), Array("TPKGLIB=QGPL;DBQ=DTDDAN;SYSTEM=10.128.59.11;"))
        .CommandText = Array( _
        "SELECT ZUFAPO.ZUFP_AUFTNR, ZUFAPO.ZUFP_AUFPOS, ZUFAPO.ZUFP_ARTNUM, ZUFAPO.ZUFP_ARTBEZ, ZUFAPO.ZUFP_BMENGE, ZUFAPO.ZUFP_BERTST, ARTSTM.ASS1_LAGBST, ARTSTM.ASS1_REIH01, ARTSTM.ASS1_FACH01" & Chr(13) & "" & Chr(10) & "FROM SERVER1." _
        , _
        "DTDDAN.ARTSTM ARTSTM, SERVER1.DTDDAN.ZUFAPO ZUFAPO" & Chr(13) & "" & Chr(10) & "WHERE ARTSTM.ASS1_ARTNUM = ZUFAPO.ZUFP_ARTNUM AND ((ZUFAPO.ZUFP_AUFTNR=4194) AND (ZUFAPO.ZUFP_AUFPOS>=100))" _
        )
        .Refresh BackgroundQuery:=True
    End With
End Sub


/Lotte
Avatar billede kabbak Professor
24. august 2007 - 14:57 #1
Sub Macro4()
    With Selection.QueryTable
        .Connection = Array(Array( _
        "ODBC;DRIVER={Client Access ODBC Driver (32-bit)};COMPRESSION=0;LAZYCLOSE=1;CMT=0;PKG=QGPL/DEFAULT(IBM),2,0,1,0,512;LANGUAGEID=ENU;DF" _
        ), Array("TPKGLIB=QGPL;DBQ=DTDDAN;SYSTEM=10.128.59.11;"))
        .CommandText = Array( _
        "SELECT ZUFAPO.ZUFP_AUFTNR, ZUFAPO.ZUFP_AUFPOS, ZUFAPO.ZUFP_ARTNUM, ZUFAPO.ZUFP_ARTBEZ, ZUFAPO.ZUFP_BMENGE, ZUFAPO.ZUFP_BERTST, ARTSTM.ASS1_LAGBST, ARTSTM.ASS1_REIH01, ARTSTM.ASS1_FACH01" & Chr(13) & "" & Chr(10) & "FROM SERVER1." _
        , _
        "DTDDAN.ARTSTM ARTSTM, SERVER1.DTDDAN.ZUFAPO ZUFAPO" & Chr(13) & "" & Chr(10) & "WHERE ARTSTM.ASS1_ARTNUM = ZUFAPO.ZUFP_ARTNUM AND ((ZUFAPO.ZUFP_AUFTNR=" & Range("A1").Value & ") AND (ZUFAPO.ZUFP_AUFPOS>=100))" _
        )
        .Refresh BackgroundQuery:=True
    End With
End Sub
Avatar billede lotte48 Nybegynder
24. august 2007 - 19:49 #2
Tak for input....

Run time error '1004'
SQL syntaksfejl
og denne linie er markeret:
.Refresh BackgroundQuery:=True

Den henter ikke data....

/Lotte
Avatar billede kabbak Professor
24. august 2007 - 21:40 #3
står du på en af cellerne med date, hvis du ikke gør det, kan du ikke opdatere.
Avatar billede lotte48 Nybegynder
24. august 2007 - 23:34 #4
date ??  == data ??

Hvad skal tilføjes, for at nummeret kan indtastes i en msgbox ??
og for at man står et korrekt sted i arket vd start.

/Lotte
Avatar billede kabbak Professor
25. august 2007 - 12:20 #5
jeg går ud fra at din QueryTable, starter i A1, så skulle denne virke.


Sub Macro4()
Dim NR As Integer
Range("A1").Activate
NR = InputBox("Indtast nummer")
    With Selection.QueryTable
        .Connection = Array(Array( _
        "ODBC;DRIVER={Client Access ODBC Driver (32-bit)};COMPRESSION=0;LAZYCLOSE=1;CMT=0;PKG=QGPL/DEFAULT(IBM),2,0,1,0,512;LANGUAGEID=ENU;DF" _
        ), Array("TPKGLIB=QGPL;DBQ=DTDDAN;SYSTEM=10.128.59.11;"))
        .CommandText = Array( _
        "SELECT ZUFAPO.ZUFP_AUFTNR, ZUFAPO.ZUFP_AUFPOS, ZUFAPO.ZUFP_ARTNUM, ZUFAPO.ZUFP_ARTBEZ, ZUFAPO.ZUFP_BMENGE, ZUFAPO.ZUFP_BERTST, ARTSTM.ASS1_LAGBST, ARTSTM.ASS1_REIH01, ARTSTM.ASS1_FACH01" & Chr(13) & "" & Chr(10) & "FROM SERVER1." _
        , _
        "DTDDAN.ARTSTM ARTSTM, SERVER1.DTDDAN.ZUFAPO ZUFAPO" & Chr(13) & "" & Chr(10) & "WHERE ARTSTM.ASS1_ARTNUM = ZUFAPO.ZUFP_ARTNUM AND ((ZUFAPO.ZUFP_AUFTNR=" & NR & ") AND (ZUFAPO.ZUFP_AUFPOS>=100))" _
        )
        .Refresh BackgroundQuery:=True
    End With
End Sub
Avatar billede lotte48 Nybegynder
28. august 2007 - 16:22 #6
Tilbage igen....  det fungerer 'næsten'.... 
på den måde at det har udløst et par andre problemer.

1) Opdatering medfører at der kan være færre linier end i foregående
opdatering....  hvordan sletter man uden at gøre ravage ?

2) Hvordan markerer man det område, der indeholder data, og kopierer til en
anden fil med 'pæn' formatering.

3)og hvordan gemmer man denne formaterede fil med et nyt navn, som
indeholder &NR plus dags dato. ??

Jeg er klar over, at spørgsmålet er udvidet - og det skal nok blive belønnet, men jeg synes at der er sammenhæng i spørgsmplene her - som jeg gerne vil kunne anvende i en senere opgave af samme salgs.

Tak for din hjælp

/Lotte
Avatar billede kabbak Professor
28. august 2007 - 17:00 #7
1. Hvis den starter i A1, må du gerne slette fra række 2 og nedad, men aldrig række 1.


2. Jeg er i tvivl om du mener manuelt eller via kode, sådan her manuelt:
  Hvad mener du med 'pæn' formatering, som det står i din query.??
  marker området, vælg kopier, gå over i den nye fil(ark), vælg sæt ind. så skulle den
  være i orden.
Avatar billede lotte48 Nybegynder
29. august 2007 - 11:37 #8
1)  OK, var nervøs for om jeg kom til at slette "bindinger" til
opslaget.

2) Ja, jeg mener Via koden - dvs. kopier til slags skabelonfil, som er præ-formateret
som et skema (dvs. skal ikke kodes), men "kaldes" fra en skabelonmappe....  og efter kopieringen skal skabelonen gemmes med nyt filnavn == &NR-dags-dato.

Det, der er mit problem her er, at få koden åbne skabelonen,
og at finde/markere området, som kun indeholder A1:[den sidste celle med data], fordi hver opdatering har variabelt antal rækker....

og så at gemme skabelonfilen med et navn, som består af [&NR og DagsDato]

/Lotte
Avatar billede kabbak Professor
29. august 2007 - 23:24 #9
prøv at tjekke denne

Dim NR As Integer
Sub Macro4()
    Range(Range("A2"), Range("A65536")).Rows.ClearContents    ' tømmer arket fra A2 og ned

    Range("A1").Activate
    NR = InputBox("Indtast nummer")
    With Selection.QueryTable
        .Connection = Array(Array( _
                            "ODBC;DRIVER={Client Access ODBC Driver (32-bit)};COMPRESSION=0;LAZYCLOSE=1;CMT=0;PKG=QGPL/DEFAULT(IBM),2,0,1,0,512;LANGUAGEID=ENU;DF" _
                            ), Array("TPKGLIB=QGPL;DBQ=DTDDAN;SYSTEM=10.128.59.11;"))
        .CommandText = Array( _
                      "SELECT ZUFAPO.ZUFP_AUFTNR, ZUFAPO.ZUFP_AUFPOS, ZUFAPO.ZUFP_ARTNUM, ZUFAPO.ZUFP_ARTBEZ, ZUFAPO.ZUFP_BMENGE, ZUFAPO.ZUFP_BERTST, ARTSTM.ASS1_LAGBST, ARTSTM.ASS1_REIH01, ARTSTM.ASS1_FACH01" & Chr(13) & "" & Chr(10) & "FROM SERVER1." _
                    , _
                    "DTDDAN.ARTSTM ARTSTM, SERVER1.DTDDAN.ZUFAPO ZUFAPO" & Chr(13) & "" & Chr(10) & "WHERE ARTSTM.ASS1_ARTNUM = ZUFAPO.ZUFP_ARTNUM AND ((ZUFAPO.ZUFP_AUFTNR=" & NR & ") AND (ZUFAPO.ZUFP_AUFPOS>=100))" _
                    )
        .Refresh BackgroundQuery:=True
    End With
End Sub


Public Sub Gem()
    Dim Sti As String
    Sti = "C:\data\"    ' ret til hvor du vil gemme
    ActiveSheet.Copy
    ActiveWorkbook.SaveAs Filename:= _
                          Sti & NR & "_" & Date & ".xls", FileFormat:=xlNormal, _
                          Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
                          CreateBackup:=False
    ActiveWindow.Close
End Sub
Avatar billede lotte48 Nybegynder
01. december 2007 - 23:55 #10
kabbak - jeg vil gerne takke - vil du lægge et svar

/Lotte
Avatar billede kabbak Professor
02. december 2007 - 09:26 #11
et svar ;-))
Avatar billede lotte48 Nybegynder
23. februar 2008 - 00:27 #12
Undskyld, jeg glemte at slutte af....
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

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