Alle Tabellen aus MS Access importieren

HiHo

trotz Suche über Google und auch hier, finde keine Lösung für mein Problem. Also könnt nur wieder ihr Spezialisten helfen :-)

Ich habe eine Access-DB sowieso.mdb. Diese beinhaltet mehrere Tabellen. Das SAS-Programm soll alle Tabellen einlesen und als SAS-Tabellen ablegen. Die Anzahl und Namen der Access-Tabellen sind variabel. Leider finde ich nicht einmal eine Tabelle "SYSTABLES" oder ähnliches, woraus ich womöglich schon die Tabellennamen einlesen könnte.

Könnt Ihr hier helfen?

Genutzt wird SAS8.2 und Access 2003

Proc Datasets

Guten Morgen,

den Inhalt einer Datenbank (bzw. einer SAS-Lib) zu kopieren ist ganz einfach:

libname acc access "D:\Acess.mdb" ;

proc datasets library=acc;
   
copy out=dest;
run;

In dem Fall braucht man auch keine Systables.

Viele Grüße
Lutz Ritter

Läuft ab V9

Hallo Herr Ritter,

vielen Dank für die schlanke Lösung, aber leider läuft diese erst ab SAS V9. Das haben wir hier zwar auf dem Terminalserver laufen, von dort aus habe ich aber leider keinen Zugriff auf die Quell-DB.

Gruß aus Hamburg
Marco Schmidt

Welches SAS/ACCESS?

Kommt darauf an, welches SAS/ACCESS Sie im Einsatz haben. Bei SAS Access to PC File Formats fällt mir für SAS 8.2 erstmal keine Lösung ein. Wenn Sie SAS/ACCESS to ODBC haben, geht es so:

libname myacc odbc noprompt="DSN=MS Access Database; DBQ=c:\temp\sowieso.mdb;";

data _null_;
    
set sashelp.vtable;
    
where libname='MYACC';
    
call execute ('data work.' !! memname !! ';');
    
call execute ('   set myacc.' !! memname !! ';');
    
call execute ('run;');
run;

libname myacc;
Voraussetzung ist natürlich, dass die ODBC-Datenquelle "MS Access Database" definiert ist.

Das ist die Lösung!

Hallo Herr Mangold,

super. Nicht so einfach wie die V9-Lösung, aber für V8.2 genau das was ich suchte. Die ODBC-Verbindung funktioniert bei uns. Allerdings muss ich dort als Datenquelle "DSN=Microsoft Access-Datenbank" eintragen.

Vielen Dank und Gruß aus Hamburg
Marco Schmidt

einfacher

Ja, aber da hat Lutz Ritter natürlich Recht - es geht einfacher, auch mit SAS 8.2. Wir kombinieren einfach meinen LIBNAME mit seinem PROC DATASETS:

libname myacc odbc noprompt="DSN=MS Access Database; DBQ=c:\temp\sowieso.mdb;";

proc datasets library=myacc;
   
copy out=dest;
run;

Hatte ich schon

Klar. Das hab ich dann auch bemerkt und entsprechend umgesetzt :) Danke aber nochmal für den Hinweis.

Gruß aus Hamburg
Marco Schmidt