| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Access-Datei öffnen (vba) (8961 mal gelesen)
|
Dexta Mitglied
Beiträge: 38 Registriert: 23.02.2005
|
erstellt am: 09. Mrz. 2005 11:41 <-- editieren / zitieren --> Unities abgeben:
hi Leute, wie kann man von autocad aus eine access-datei öffnen ich habe in autocad schon eine schaltflache erstellt, hinter der eine vba-prozedur hinterlegt ist. Nur wie lautet der code, um direkt in eine access datei zu springen. bis jetzt weiss ich nur, wie man access öffnet: --------------------------------------------------------------------- Sub Accessöffnen() Dim stAppName As String stAppName = "C:\Programme\Microsoft Office\Office10\MSACCESS.EXE " Call Shell(stAppName, 1) End Sub --------------------------------------------------------------------- das funktioniert auch, aber der direkte weg wäre mir lieber. zur information: -Es ist in der access-db kein passwort hinterlegt. -Pfad der access-datei: C:\Dokumente und Einstellungen\ddre\Desktop\adp1.mdb Danke schonmal, :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 09. Mrz. 2005 12:05 <-- editieren / zitieren --> Unities abgeben: Nur für Dexta
Oh, ich dachte das mit dem Shell hat sich erledigt, vergisses das wird so nix ;-) Guck mal in der Hilfe, ob da ein Bsp. zu finden ist, ansonsten häng ich mal eines von einer Excel-CD dran, wie vom Prinzip her der Zugriff gehen könnte. Allerdings hab ich mit sowas auch noch nicht viel gemacht, also bei weiteren Fragen ist mein Name Hase. HTH, Nancy
Code:
Sub rec_fields() Dim conn As New Connection Dim rec As New Recordset Dim f As Field Dim ws As Worksheet Dim i& Set ws = ThisWorkbook.Worksheets("fields") conn.Open "Provider=microsoft.jet.oledb.4.0;" + _ "Data Source=" + ThisWorkbook.Path + "\nwind.mdb;" rec.Open "employees", conn For Each f In rec.Fields i = i + 1 ws.[a1].Cells(i) = f.Name ws.[b1].Cells(i) = f.Type ws.[c1].Cells(i) = TypeName(f.Value) Next rec.Close: conn.Close End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dexta Mitglied
Beiträge: 38 Registriert: 23.02.2005
|
erstellt am: 09. Mrz. 2005 12:57 <-- editieren / zitieren --> Unities abgeben:
Hi startrek, Danke für deinen Beitrag, aber ich glaube, du hast da was falsch verstanden, ich will eine einfache verknüpfung mit access, nicht excel. Diese soll nichts weiter machen, nur eine access-datei öffnen. kann eigentlich garnicht so kompliziert sein, aber ich weiss einfach nicht wie es geht. :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 09. Mrz. 2005 13:08 <-- editieren / zitieren --> Unities abgeben: Nur für Dexta
Dann höchstens noch so [ungetestet]: Code:
App= "C:\Programme\Microsoft Office\Office10\MSACCESS.EXE " myFile="C:\Dokumente und Einstellungen\ddre\Desktop\adp1.mdb" Shell(App & myfile, 1)
Gruss Nancy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 10. Mrz. 2005 15:01 <-- editieren / zitieren --> Unities abgeben: Nur für Dexta
ich würds eher mit der API ShellExecute machen Das hat den Vorteil, dass ich NICHT wissen muss , wo access installiert ist. Mit einem Aufruf von ShellExecute kannst du direkt die accesDATEI öffnen, und die damit verknüpfte Applikation (MS Access) wird automatisch gesucht. Die API Definition :
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, _ ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal _ lpDirectory As String, ByVal nShowCmd As Long) As Long Und der Aufruf z.B.: ShellExecute(0, "open", "d:\test\test.mdb", "-fast", "C:\", 3)
------------------ Ing. Anton Fuchs WWW.FFZELL.AT.TC Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dexta Mitglied
Beiträge: 38 Registriert: 23.02.2005
|
erstellt am: 10. Mrz. 2005 15:17 <-- editieren / zitieren --> Unities abgeben:
Hi Fuchsi, dank dir vielmals, ich hab nur ein kleines Problem, ich versteh den unteren Code nicht wirklich, da ich neu in VBA bin. Wenn ich den Code kompiliere, kommt die Fehlermeldung: "fehler beim kompilieren: Erwartet:=" Hier nochmal der Code: Public Declare Function accessöffnen Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, _ ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal _ lpDirectory As String, ByVal nShowCmd As Long) As Long ShellExecute(0, "open", "C:\Dokumente und Einstellungen\ddre\Desktop\AutoCAD.mdb", "-fast", "C:\", 3) End Function
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 10. Mrz. 2005 15:30 <-- editieren / zitieren --> Unities abgeben: Nur für Dexta
Sorry, schreib einfach vor dem Aufruf ein ret = ShellExecute ( 0, "open", "d:\test\test.mdb", "-fast", "C:\", 3) oder einfach CALL ShellExecute ( 0, "open", "d:\test\test.mdb", "-fast", "C:\", 3) oder auch so (ohne Klammer): ShellExecute 0, "open", "d:\test\test.mdb", "-fast", "C:\", 3 (Sch.... VB5/6 mit der undurchsichtigen Klammersetzung) ------------------ Ing. Anton Fuchs WWW.FFZELL.AT.TC Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dexta Mitglied
Beiträge: 38 Registriert: 23.02.2005
|
erstellt am: 24. Mrz. 2005 08:44 <-- editieren / zitieren --> Unities abgeben:
Morgen Fuchsi, Habs jetzt , mit deinem neuen Code probiert, diesmal kommt ne andere Fehlermeldung: Fehler beim kompilieren, außerhalb einer Prozedur ungültig: ret = ShellExecute(0, "open", "C:\Dokumente und Einstellungen\ddre\Desktop\AutoCAD.mdb", "-fast", "C:\", 3) und die Null wird bei dieser Fehlermeldung markiert! Hast Du vielleicht ne Ahnung woran es liegen könnte?? :-)
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BerndE Mitglied Hochbautechniker
Beiträge: 557 Registriert: 05.07.2003 Revit 2013 ACA 2012 deutsch BuildingOne 5.4.5 Win7 WindowsNetz
|
erstellt am: 23. Nov. 2005 10:00 <-- editieren / zitieren --> Unities abgeben: Nur für Dexta
|
autogis Mitglied Dr.-Ing. E-Technik
Beiträge: 185 Registriert: 09.02.2001
|
erstellt am: 25. Nov. 2005 14:46 <-- editieren / zitieren --> Unities abgeben: Nur für Dexta
Hallo Dexta, hab ich Dich richtig verstanden, dass Du aus AutoCAD auf die Werte einer Access-Tabelle zugreifen willst? Wenn ja, arum dann nicht einfach über DAO? Hier ml ein einfaches Beispiel, mit dem ein Block an den Positionen der Koordinaten aus einer ACCESS-Tabelle eingefügt wird. Bei mir funzt es mit ACCESS2000. Zunächst unter Extras--> Verweise "Microsoft DAO 3.6 Object Library" aktivieren und dann folgenden Code testen: Dim DB As Database Dim NamDb As String 'Name meiner ACCESS-DB mit Pfad Dim Rs1 As Recordset Dim SymIns (0 to 2) as Double 'für Einfügepunkt Dim Sym as AcadBlocReference NamDb = "D:\APPS\autoverm\AV_Tracks\TRACKS2000.MDB" Set DB = OpenDatabase(NamDb) Set Rs1 = DB.OpenRecordset("POI_STADAT")'Tabellenname Rs1.MoveFirst 'Auf ersten Datensatz gehen While Not Rs1.EOF SymIns(0) = Val(Rs1![poi_x_wgs]) 'poi_x_wgs ist der Spaltenname, der die X-Koordinate enthält SymIns(1) = Val(Rs1![poi_y_wgs]) SymIns(2) = 0 Set Sym = ThisDrawing.ModelSpace.InsertBlock(SymIns, "POI_DENKMAL", 1, 1, 1, 0) Sym.Layer = "POI_DENKMALE" Rs1.MoveNext'gehe zum nächsten Datensatz Wend
Im Prinzip ist es also so, dass Du zunächst die DB öffnest, dann ein Recordset nimmst. In unserem Fall eine Tabelle, kann aber auch ne Abfrage sein. Um an die einzelnen Werte zu kommen mußt Du nur die Syntax mit den eckigen Klammern und dem Ausrufezeichen beachten. Ich hoffe das hilft weiter. Viele Grüße - Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|