Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  ADOLISP zugriff auf 32bit Datenbank mit 64bit System

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  ADOLISP zugriff auf 32bit Datenbank mit 64bit System (946 mal gelesen)
Archäologie Bubi
Mitglied
Archäologische Funddokumentation


Sehen Sie sich das Profil von Archäologie Bubi an!   Senden Sie eine Private Message an Archäologie Bubi  Schreiben Sie einen Gästebucheintrag für Archäologie Bubi

Beiträge: 38
Registriert: 09.03.2021

erstellt am: 11. Aug. 2022 14:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


ADOLISP_ConnectionError_1.png


ADOLISP_ConnectionError_2.png

 
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



Sehen Sie sich das Profil von Meldin an!   Senden Sie eine Private Message an Meldin  Schreiben Sie einen Gästebucheintrag für Meldin

Beiträge: 381
Registriert: 15.07.2011

ACA2020
Windows10

erstellt am: 11. Aug. 2022 16:23    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Archäologie Bubi 10 Unities + Antwort hilfreich

Hallo, keine Ahnung davon, aber wie wäre es so ?
Code:
(if (setq accessappli
(vlax-get-or-create-object "access.application")
)
      (progn
....
      )
    )

------------------
Gruß Wolfgang

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Archäologie Bubi
Mitglied
Archäologische Funddokumentation


Sehen Sie sich das Profil von Archäologie Bubi an!   Senden Sie eine Private Message an Archäologie Bubi  Schreiben Sie einen Gästebucheintrag für Archäologie Bubi

Beiträge: 38
Registriert: 09.03.2021

erstellt am: 16. Aug. 2022 08:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von Vino an!   Senden Sie eine Private Message an Vino  Schreiben Sie einen Gästebucheintrag für Vino

Beiträge: 207
Registriert: 24.05.2005

Windows 10
BricsCAD V20-22

erstellt am: 16. Aug. 2022 11:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Archäologie Bubi 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Andreas Kraus an!   Senden Sie eine Private Message an Andreas Kraus  Schreiben Sie einen Gästebucheintrag für Andreas Kraus

Beiträge: 1356
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 17. Aug. 2022 09:07    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Archäologie Bubi 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Archäologie Bubi an!   Senden Sie eine Private Message an Archäologie Bubi  Schreiben Sie einen Gästebucheintrag für Archäologie Bubi

Beiträge: 38
Registriert: 09.03.2021

erstellt am: 17. Aug. 2022 13:56    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

@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


Sehen Sie sich das Profil von Archäologie Bubi an!   Senden Sie eine Private Message an Archäologie Bubi  Schreiben Sie einen Gästebucheintrag für Archäologie Bubi

Beiträge: 38
Registriert: 09.03.2021

AutoCAD Map 3D 2013
AutoCAD Map 3D 2023
Faro AS-Built / TachyCAD
BricsCAD V18
Elcovision ElTheo
Agisoft Metashape Professional

erstellt am: 25. Aug. 2022 15:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von Meldin an!   Senden Sie eine Private Message an Meldin  Schreiben Sie einen Gästebucheintrag für Meldin

Beiträge: 381
Registriert: 15.07.2011

ACA2020
Windows10

erstellt am: 26. Aug. 2022 09:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Archäologie Bubi 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Archäologie Bubi an!   Senden Sie eine Private Message an Archäologie Bubi  Schreiben Sie einen Gästebucheintrag für Archäologie Bubi

Beiträge: 38
Registriert: 09.03.2021

erstellt am: 29. Aug. 2022 08:55    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz