| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY wird von NVIDIA zum Händler des Jahres gewählt – zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: ADOLISP zugriff auf 32bit Datenbank mit 64bit System (1051 / mal gelesen)
|
Archäologie Bubi Mitglied Archäologische Funddokumentation
Beiträge: 64 Registriert: 09.03.2021 AutoCAD Map 3D 2013 AutoCAD Map 3D 2023 AutoCAD Map 3D 2024 Faro AS-Built / TachyCAD BricsCAD V18 Elcovision ElTheo Agisoft Photoscan Agisoft Metashape Professional 1.7 Agisoft Metashape Professional 2.0
|
erstellt am: 11. Aug. 2022 14:46 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum Meine Situation: Ich muss für meinen Betrieb ein LISP schreiben, welches Daten aus einer MS Access 2010 Datenbank (*.mdb)(32Bit) auslesen und in Dynamische Blöcke einfügen kann. Diese LISP soll nicht nur auf meinem sondern auf allen PCs mit AutoCAD funktionsfähig sein. Ich arbeite mit AutoCAD MAP 3D 2013 auf einem Windows 10 (64bit) PC. Für den Datenbankzugriff habe ich mir die ADOLISP 2.5.2 heruntergeladen. Mein Problem: Mein Problem ist bereits der Zugriff auf die Datenbank. Ich habe verschiedene ConnectionStings ausprobiert: - "Provider=MSDASQL;Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=K:\\08_Postfach\\Bubendorf\\LISP\\ADOLISP\\2020-30_Test.mdb" - "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=K:\\08_Postfach\\Bubendorf\\LISP\\ADOLISP\\2020-30_Test.mdb;Persist Security Info=False;" - "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=K:\\08_Postfach\\Bubendorf\\LISP\\ADOLISP\\2020-30_Test.mdb;Persist Security Info=False" - *Wahrscheinlich noch mehr, habe mich durch eine Internetseite von Microsoft durchprobiert Code: (if (not ADOLISP_ConnectToDB) (load "K:\\08_Postfach\\Bubendorf\\LISP\\ADOLISP\\ADOLISP_Library.lsp") );end if (setq ConnectString "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=K:\\08_Postfach\\Bubendorf\\LISP\\ADOLISP\\2020-30_Test.mdb;Persist Security Info=False;") (if (not (setq ConnectionObject (ADOLISP_ConnectToDB ConnectString "" "")));;<- Als UserID habe ich auch noch "admin" und meine eigene UserID probiert (progn (prompt "\nConnection failed!") (ADOLISP_ErrorPrinter) );end progn (prompt "\nResult: succeeded!") );end if
Ich bekomme immer folgende Fehlermeldungen: - siehe Anhang 1 + 2 Meine Einschränkungen: Ich arbeite in einem Kantonsbetrieb mit zentralisierter IT. Ich habe also keine Adminrechte und kann keine Treiber installieren. Auch ein Update der Office Programme auf 64bit ist nicht möglich. Meine Frage: Ich habe mich schon durch etliche Foren gelesen und alle Lösungsvorschläge dort haben mir nicht geholfen. Denn wie in meinen Einschränkungen bereits geschrieben kann ich nicht einfach etwas neues Installieren. Also mache ich bei der Eingabe einen kritischen Fehler oder liegt es wirklich an den Installationen? Und gäbe es einen Weg um diese Situation zu umgehen, im Notfall auch abseits von ADOLISP? Ich selbst kann inzwischen einigermassen Lisplen, bin aber noch weit entfernt von all dem Wissen rund um Applikationen, Treiber und dem ganzen Handling.
Ich drücke mal die Daumen, dass die geballte Macht des Forums mir ein weiteres mal helfen kann. Besten Dank im Voraus ------------------ ___________________________________________ Bubi spiele, Bubi glücklich! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 11. Aug. 2022 16:23 <-- editieren / zitieren --> Unities abgeben: Nur für Archäologie Bubi
|
Archäologie Bubi Mitglied Archäologische Funddokumentation
Beiträge: 64 Registriert: 09.03.2021 AutoCAD Map 3D 2013 AutoCAD Map 3D 2023 AutoCAD Map 3D 2024 Faro AS-Built / TachyCAD BricsCAD V18 Elcovision ElTheo Agisoft Photoscan Agisoft Metashape Professional 1.7 Agisoft Metashape Professional 2.0
|
erstellt am: 16. Aug. 2022 08:38 <-- editieren / zitieren --> Unities abgeben:
Hallo Wolfgang Ich habe es jetzt auch mal versucht selber über die Vlax-Befehle zusammen zu bauen: Code: (vl-load-com) (setq adocn (vlax-create-object "ADODB.Connection") adorst (vlax-create-object "ADODB.Recordset") );end setq (vlax-invoke-method adocn "Open" (strcat "Provider=MSDASQL;" "Driver={Microsoft Access Driver (*.mdb, *.accdb)};" "DBQ=K:\\08_Postfach\\Bubendorf\\LISP\\ADOLISP\\2020-30_Test.mdb" );end strcat T T T );end vlax-invoke-method (setq sqlstrread (strcat "SELECT * FROM [Bef_Nr-Zeichnung] " "INNER JOIN [Bef_Nr-Journal] " "ON [Bef_Nr-Zeichnung].ID = [Bef_Nr-Journal].ID " "ORDER BY [Bef_Nr-Journal].Bef_Nr;" );end strcat );end setq (vlax-invoke-method adorst "Open" sqlstrread adocn -1 3 1)
Leider noch immer ohne Erfolg. Ich bekomme noch immer die gleichen Fehlermeldungen über die Treiber. Um die komme ich wohl kaum herum und solange die sich verweigern sehe ich kein vorankommen. ------------------ ___________________________________________ Bubi spiele, Bubi glücklich! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Vino Mitglied
Beiträge: 229 Registriert: 24.05.2005 Windows 10 BricsCAD Pro V23
|
erstellt am: 16. Aug. 2022 11:34 <-- editieren / zitieren --> Unities abgeben: Nur für Archäologie Bubi
Hallo, wirklich Profi bin ich in dem Thema auch nicht, aber als Versuch: Wenn du im Windows-Startmenü nach ODBC suchst, kommen 2 verschiedene Programme (ODBC-Datenquellen 32- und 64-Bit) Für deinen Fall sollte hier ja 32 Bit relevant sein. Wenn ich das hier öffne, dann steht unter Treiber "Microsoft Access Driver (*.mdb)" Der Treiber den du immer verwendest ("Microsoft Access Driver (*.mdb, *.accdb)") steht bei mir in der 64-Bit-Version. Vielleicht reicht es schon, den 32-Bit-Treiber zu verwenden? Gruß Stefan
[Diese Nachricht wurde von Vino am 16. Aug. 2022 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1455 Registriert: 11.01.2006 WIN 10 ACAD 2022 BricsCAD V23
|
erstellt am: 17. Aug. 2022 09:07 <-- editieren / zitieren --> Unities abgeben: Nur für Archäologie Bubi
Hm ... du hast Wolfgangs Vorschlag gar nicht umgesetzt. Ich mache genau das schon Jahre mit Excel und es funktioniert super. Probier das doch mal aus, müsste mit Access eigentlich auch funktionieren. Allerdings musst du, wenn du dann Zugriff auf das Access-Objekt hast, anders weiterprogrammieren aber das siehst du dann schon (wenn nicht treffen wir uns wieder hier). ------------------ Geht nicht, gibts nicht Gruß Andreas http://kraus-cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Archäologie Bubi Mitglied Archäologische Funddokumentation
Beiträge: 64 Registriert: 09.03.2021 AutoCAD Map 3D 2013 AutoCAD Map 3D 2023 AutoCAD Map 3D 2024 Faro AS-Built / TachyCAD BricsCAD V18 Elcovision ElTheo Agisoft Photoscan Agisoft Metashape Professional 1.7 Agisoft Metashape Professional 2.0
|
erstellt am: 17. Aug. 2022 13:56 <-- editieren / zitieren --> Unities abgeben:
@Stefan Die Treiber im ODBC habe ich mir auch schon angeschaut. Aber der Inhalt ist bei mir identisch, egal ob ich die 32er oder 64er App öffne. Habe auch bereits alle Treiber als String durchprobiert. @Andreas @Wolfgang Andreas, du hast absolut recht. Ich habe gar nicht wie Wolfgang auf die Applikation gesetzt. Bin gerade mit ziemlich vielen anderen Problemen beschäftigt und habe das hier nur zwischendurch noch Probieren wollen. Da bin ich im Tran wohl von der Lösung abgekommen... Ich werde mich ASAP nochmals mit der "access.application" auseinandersetzten und mich (hoffentlich) bald mit einer Lösung oder halt mit weiteren Fragen zurückmelden. ------------------ ___________________________________________ Bubi spiele, Bubi glücklich! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Archäologie Bubi Mitglied Archäologische Funddokumentation
Beiträge: 64 Registriert: 09.03.2021 AutoCAD Map 3D 2013 AutoCAD Map 3D 2023 AutoCAD Map 3D 2024 Faro AS-Built / TachyCAD BricsCAD V18 Elcovision ElTheo Agisoft Photoscan Agisoft Metashape Professional 1.7 Agisoft Metashape Professional 2.0
|
erstellt am: 25. Aug. 2022 15:58 <-- editieren / zitieren --> Unities abgeben:
Hallo Andreas Ich konnte mich inzwischen nochmals etwas an mein Programm setzten und kann nun auch auf die Datenbank zugreifen. Code: (if (setq AccApp (vlax-get-object "Access.Application")) (vlax-release-object AccApp) );end if (setq AccApp (vlax-get-or-create-object "Access.Application")) (vlax-invoke-method AccApp "OpenCurrentDatabase" AccFile T "" ) (vla-put-visible AccApp :vlax-true) (setq AccObj (vlax-invoke-method AccApp "CurrentDB"));Hier komm ich noch nicht weiter (vlax-invoke-method AccApp "CloseCurrentDatabase") (vlax-release-object AccApp)
Von da an habe ich versucht auf meine Daten in der Datenbank zuzugreifen. Bis jetzt ohne Erfolg. Um auf die verschiedenen Tabellen und Felder zu kommen habe ich mich durch die Angaben von (vlax-dump-object AccApp T) und die Hilfen von dieser Seite (Link) probiert. https://docs.microsoft.com/en-us/office/vba/api/access.application Aber nur mit wildem herumprobieren (welch Überraschung) komme ich da nicht durch. Weitere Beiträge dazu habe ich im Internet nicht gefunden (zumindest nicht mit Google), da bei jedem dieser Beiträge zügig auf ADOLisp verwiesen wird. Ich kann natürlich nicht einfach eine unserer Datenbanken hochladen, aber was bräuchte ich grundsätzlich für Methoden um in einer Tabelle nach einem Wert (mit mehreren Einträgen) zu suchen und über die jeweiligen IDs denn dazu passenden (und verknüpfen) Wert einer anderen Tabelle zu bekommen? Oder könnte ich sogar eine SQL Suche machen? Dann müsste sie Suchanfrage wahrscheinlich so aussehen: SELECT * FROM [Bef_Nr-Zeichnung] INNER JOIN [Bef_Nr-Journal] ON [Bef_Nr-Zeichnung].ID = [Bef_Nr-Journal].ID ORDER BY [Bef_Nr-Journal].Bef_Nr; Ich sage schon mal Vielen Dank im Voraus und hoffe, dass du/ihr mir auch hier helfen kannst.
------------------ ___________________________________________ Bubi spiele, Bubi glücklich! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 26. Aug. 2022 09:59 <-- editieren / zitieren --> Unities abgeben: Nur für Archäologie Bubi
Habe immer noch keine Ahnung wie schon gesagt. Aber schau doch mal bei Google nach access objects model ggf. mal auf Bilder schalten, da siehst du den Objektbaum, durch den du dich hangeln kannst. ------------------ Gruß Wolfgang Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Archäologie Bubi Mitglied Archäologische Funddokumentation
Beiträge: 64 Registriert: 09.03.2021 AutoCAD Map 3D 2013 AutoCAD Map 3D 2023 AutoCAD Map 3D 2024 Faro AS-Built / TachyCAD BricsCAD V18 Elcovision ElTheo Agisoft Photoscan Agisoft Metashape Professional 1.7 Agisoft Metashape Professional 2.0
|
erstellt am: 29. Aug. 2022 08:55 <-- editieren / zitieren --> Unities abgeben:
Ich habe mich dieses Wochenende nochmals eine Weile vor den PC gesetzt und kräftig in die Tasten gehauen. Das Ergebnis:
Code: (if (setq AccApp (vlax-get-object "Access.Application")) (vlax-release-object AccApp) );end if (setq AccApp (vlax-get-or-create-object "Access.Application")) (setq DBEngine (vlax-get-property AccApp 'DBEngine)) (setq WSpace (vlax-invoke-method DBEngine 'CreateWorkspace "AccessWorkspace" "Admin" "" '"")) (setq AccDB (vlax-invoke-method WSpace 'OpenDatabase AccFile)) (setq Data (vlax-invoke-method AccDB 'OpenRecordset (strcat "SELECT Struktur, Bef_Nr FROM [Bef_Nr-Zeichnung] INNER JOIN [Bef_Nr-Journal] " "ON [Bef_Nr-Zeichnung].ID = [Bef_Nr-Journal].ID " "WHERE Zeichnung = 'G065' ORDER BY [Bef_Nr-Journal].Bef_Nr;" );end strcat );end vlax-invoke-method );end setq (setq nData (vlax-get-property Data 'RecordCount)) (setq NewData (vlax-safearray->list (vlax-variant-value (vlax-invoke-method Data 'GetRows nData) );end vlax-variant-value );end vlax-safearray->list );end setq (vlax-invoke-method AccDB 'Close)
Läuft bei mir einwandfrei, ist aber auch noch nicht bis in alle Fälle getestet. Wahrscheinlich sollte ich da auch noch irgendwelche Fehlerabfragen einbauen, aber immerhin Läuft es jetzt, und zwar ohne ADOLisp und Treiber. Nochmals vielen Dank für die richtungsweisenden Tipps! ------------------ ___________________________________________ Bubi spiele, Bubi glücklich! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |