05. juni 2003 - 11:38Der 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 :-)
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.
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.
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.
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.
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
Super - det var lige det, der skulle til. Et recordset - og så lidt hokus-pokus i VBA. Takker - pointene velfortjent.
Synes godt om
Ny brugerNybegynder
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.