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 :-)
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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.