Avatar billede the_bma_man Nybegynder
05. juni 2003 - 11:38 Der er 10 kommentarer og
1 løsning

Data fra SQL-server til Excel

Hejsan.
Dette spørgsmål skulle måske have været stillet i en excel-kategori - men en sådan kunne jeg ikke finde...

Nå - here goes -

Jeg skal have hentet data fra en tabel i sql-server over i et excel-regneark. Jeg har prøvet at lege med "Eksterne data" (MSQuery), og det virker næsten. Jeg kan godt opbygge mit select/join i MSQ, men jeg har brug for at kunne få en where-clause fra regnearket med over - og det kan jeg ikke lige gennemskue hvordan jeg gør (men der står i help at det kan lade sig gøre - bare ikke hvordan :-()

En anden mulighed er at lave et lille stykke VBA, der så danner et record-set. Og det er nemt nok. Men hvordan får jeg så data fra dette record-sæt ind i regnearket?

En tredie mulighed - som jeg har prøvet - er at bruge SQL-funktionerne i Excel (der er til rådighed efter aktivering af ODBC-udvidelses-program). Her strander jeg på, at jeg ikke kan få det endelige resultat vist - jeg kan godt få SQLOpen, SQLExecQuery til at gøre noget, men jeg kan ikke få  SQLRetrieve til at give mig out-puttet (men det er måske heller ikke sådan man skal gøre?).

Som du kan se har jeg efterhånden prøvet lidt forskelligt - uden held. Men det må da være muligt med 2 MS-produkter, så det korte spørgsmål er:

Hvordan får jeg data fra en SQL-server over i et excel-regneark, når jeg fra Excel skal kunne angive where-clause til selectet? (Skal jeg angive hele sql-statementet i Excel er dette fint nok med mig).

Håber der er et klogt hoved her blandt SQL-server-hajerne :-)

Mvh.
BMA
Avatar billede slash Nybegynder
05. juni 2003 - 12:01 #1
Nu er jeg ikke excel expert, men en måde det måske kunne løses på var at lave det vha. DTS på sql-serveren. Vha. DTS kan du importere din where clause til en temp. tabel på sql-serveren - du kan dernæst - igen via dts, lave din query og selecte where clausen fra den just indstatte where del fra temp tabellen. Dernæst fyrer du den komplette sql af mod tabellen i sql-server og får dts til at gemme resultatet i en excel fil og får dts til måske at maile filen til dig.
Avatar billede soda Nybegynder
05. juni 2003 - 12:04 #2
Du kan bruge DTS.

Åben Enterprise Manager og højreklik på din database du vil have data fra til et excel ark.

Vælge all task -> Export data.

Her skal du vælge source, som er din database og destination er så dit excel ark.

Du får mulighed for at flytte det hele over eller lave en SQL sætning (med f.eks. where clause).

Dette skulle være alt hvad du har brug for.
Avatar billede the_bma_man Nybegynder
05. juni 2003 - 12:06 #3
Mja - nu er der bare det, at det ikke skal i en NY excel-fil, men resultatet skal havne i et ark i den excel-fil, man kører "funktionen" fra.
Jeg er rimelig tæt på en løsning der virker vha. MSQuery - mangler her bare lige at få en where-clause overført til query'en. Men måske noget temp-tabel-noget her - det skal jeg lige tænke over / undersøge.
Avatar billede the_bma_man Nybegynder
05. juni 2003 - 12:10 #4
soda> Det skal helst være noget, der kører i et regneark.
Scenariet er følgende:
Der er en fane i regnearket med noget funktionalitet ala det jeg ønsker. Her hentes noget data fra en AS400.
Disse data bruges så som "input" til en anden fane, hvor man formatterer noget output - nærmest til en rapport.
Det jeg skal lave er så en ny fane, hvor man kan hente data fra en SQL-server. Disse skal så, sammen med dem fra fane1 (AS400) kunne bruges på "output-fanen".
Det lidt kryptiske er, at man på en tredie (eller er vi oppe på fire nu :-)) fane angiver op til 10 kundenumre, som er dem, vi ønsker at trække data for.
Og brugeren har ikke adgang til en Enterprise Manager - så det skal kunne køre fra Excel-regnearket.
Avatar billede slash Nybegynder
05. juni 2003 - 12:15 #5
det burde kunne lade sig gøre vha. nogle VBA makroer i excel...
Avatar billede the_bma_man Nybegynder
05. juni 2003 - 13:08 #6
slash> Det har jeg også prøvet med - med et dao-recordset mod databasen. Og jeg får fint data i mit recordset. Hvis man går denne vej, så er spørgsmålet så bare, hvordan jeg får mit recordset hældt ind i regnearket.
Og nej - jeg er IKKE en haj til Excel.
Avatar billede slash Nybegynder
05. juni 2003 - 13:47 #7
kig i hjælpen til excel..... det skulle kunne lade sig gøre... det er jo i princippet bare at lave en lille løkke som traverserer recordsettet igennem og for hvert gennemløb sætter data ind i cellerne - altså noget á la

While Not ConName.EOF
With ConName
If not ConName.EOF Then
oExcel.Worksheets("Sheet1" ).Activate
oExcel.Worksheets("Sheet1" ).Range("I11" ).Value = ConName("ID")oExcel.Worksheets("Sheet1" ).Range("C11" ).Value = ConName("Navn")
oExcel.Worksheets("Sheet1" ).Range("C12" ).Value = ConName("Adr")
End If
.MoveNext
End With
Wend
Avatar billede slash Nybegynder
06. juni 2003 - 08:08 #8
er du kommet videre?

Er ADO i øvrigt ikke hurtigere/bedre end DAO ?
Avatar billede the_bma_man Nybegynder
06. juni 2003 - 08:40 #9
Kigger på det nu.
Avatar billede the_bma_man Nybegynder
06. juni 2003 - 10:08 #10
Sorry - sov i timen.
Det er ADO jeg bruger.
Avatar billede the_bma_man Nybegynder
06. juni 2003 - 10:09 #11
Super - det var lige det, der skulle til.
Et recordset - og så lidt hokus-pokus i VBA.
Takker - pointene velfortjent.
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
Computerworld tilbyder specialiserede kurser i database-management

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