OpenDCL Forums

OpenDCL => Localization Project => GERMAN => Topic started by: SpEEDY on May 06, 2010, 06:05:47 AM

Title: ListView
Post by: SpEEDY on May 06, 2010, 06:05:47 AM
Guten Tag Forum,
ich hätte mal einen Frage zum ListView.
Habe mich gerade durch die Hilfe von OpenDCL gearbeitet und bin auf folgendes gestoßen.

Auszug aus OpenDCL Hilfe zum Thema ListView_SetItemData
ââ,¬Å¾Diese Methode weist dem angegebenen Eintrag nutzerspezifische Daten zu (z.B. den eindeutigen Schlüssel eines Datensatzes aus einer Datenbanktabelle).ââ,¬Å"

Da habe ich mich gefragt. OpenDCL kann einen Verbindung mit einer Datenbank aufnehmen und das auch anzeigen.

Wenn ja hätte ich mal ein paar Fragen.
Um welche Form von Datenbank handelt es sich. Eine MDB?
Wie kann man sich mit der Datenbank verbinden?
Lässt sich die Datenbank ändern?

Wahrscheinlich ist es nicht möglich.
Cool  8) wer es auf alle Fall.

Danke schon mal für die Antworten.

Mit freundlichen Grüßen
SpEEDY
Title: Re: ListView
Post by: Fred Tomke on May 06, 2010, 08:24:07 AM
Hallo, SpEEDY,

Nein, OpenDCL kann selbst nicht auf Datenbanken zugreifen. Du kannst allenfalls Inhalte aus Datenbanken in OpenDCL-Dialogen visualisieren, eine Eingabemaske zum Verändern vorhalten und die Änderungen aus diesen Dialogen auslesen und selbst in die Datenbank zurückschreiben. Das Stichwort sei in diesem Falle AdoDb.Connection und Fleming Group. Ein Anwendungsbeispiel findest Du hier: http://acad.fleming-group.com/Download/ADOLisp/ADOLisp.html (http://acad.fleming-group.com/Download/ADOLisp/ADOLisp.html)

Ich nutze SetItemData bei Trees, Grids und ListViews zur Adressierung der Einträge in diesen Steuerelementen in den Datensätzen verschiedener Datenquellen (MDB, MySQL, ...), wenn der Schlüssel eine Ganzahl (Integer) ist. Für den Fall, dass der eindeutige Schlüssel eines Datensatzes ein Integer-Wert ist, kann man ihn mit Hilfe von ListView_SetItemData der ListView-Zeile zuweisen, dass es selbst nach dem Sortieren mit Hilfe der OpenDCL-eigenen Methoden gelingt, vom markierten ListView-Eintrag die ID zu bekommen und den antsprechenden Datensatzeintrag zu adressieren, ohne die ID in einer zusätzlichen Spalte oder globalen Variable vorhalten zu müssen.

Der Hinweis auf die Datenbank war eben (siehe "z.B." in Deinem Zitat) nur ein Anwendungsbeispiel von vielen.  ;)

Ich wollte schon länger ein Beispiel zum Thema OpenDCL und Datenbanken erstellen, habe es jedoch leider aus zeitlichen Gründen bisher nicht geschafft.

VG, Fred
Title: Re: ListView
Post by: SpEEDY on May 11, 2010, 03:20:46 AM
Hallo Fred,
erst mal Danke für das Programm.
Ich bin begeistert.

Kämpfe mich ein bisschen mit dem Ding herum.
Ich möchte eine Verbindung mit deiner anderen Datenbank herstellen.
Habe den Pfad in der Expample Datei geändert und die SQL-Angepasst.

Leider bekomme ich den Fehler das ich keine ââ,¬Å¾Leseberechtigungââ,¬Å" habe.
Woran könnte das liegen?
Nutze Access 2003 um die MDB zu erstellen.
Könnte es daran liegen?

Mit freundlichen Grüßen
SpEEDY
Title: Re: ListView
Post by: Fred Tomke on May 11, 2010, 06:48:18 AM
Ist das OS Vista oder Win7, kann vielleicht die Datenbank genau von dieser Stelle nicht gelesen werden. Mal woanders hinlegen. Stammverzeichnis von C: und D: mögen Vista und Win 7 nicht recht...

VG, Fred
Title: Re: ListView
Post by: SpEEDY on June 28, 2011, 06:24:00 AM
Mahlzeit Fred.
Wir haben über das Thema ADOLisp lange nicht mehr gesprochen. ;)

An dieser Stelle Danke nochmal für das Tool. Hoffe das ich in nächster Zeit wieder mehr "Lipsen" kann. ;)
Hätte mal einen Frage an die, habe den "ConnectString" mit einer "normalen" Datenbank hinbekommen.
Wollte das ganze aber jetzt über eine *.WDW ,also eine Arbeitsdatei, laufen lassen.
Hast du vielleicht Erfahrung damit?

Habe hier einen recht kurze Anweisung gefunden: http://208.74.205.69/t5/ASE-SQL-OLE-ADE/Workgroup-Information-file-mdw-missing-error/td-p/2112604 (http://208.74.205.69/t5/ASE-SQL-OLE-ADE/Workgroup-Information-file-mdw-missing-error/td-p/2112604)
Meine ursprüngliche ist zu lang.
Code (autolisp) Select
(setq ConnectString  (strcat "Provider=Microsoft.Jet.OLEDB.4.0;User ID=XXX;Data Source=" Datei ";Mode=Share Deny None;Jet OLEDB:System database=XXXX;Jet"
                              " OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk "
                               "Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet"
                               " OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;"))


Die XXX sind jetzt nur Platzhalter. MDW-Datei ist vorhanden!

Erhalte dann aber den Fehler:  Automatisierungsfehler Die Anwendung kann nicht
gestartet werden. Die Informationsdatei für die Arbeitsgruppe fehlt oder ist
exklusiv von einem anderen Benutzer geöffnet.

Vielleicht kennt sich jemand damit aus!
Ich bedanke mich schon mal im voraus.

Grüß
SpEEDY

Title: Re: ListView
Post by: Fred Tomke on June 28, 2011, 06:41:44 AM
Hallo, SpEEDY, musste den Eintrag ein zweites Mal schreiben, weil ich bei meiner ersten Antwort auf eine falsche Frage antwortete -  jetzt aber:

Hast Du schon diese Seite (http://support.microsoft.com/kb/300699/de) angesehen? Da steht etwas zu.

VG, Fred
Title: Re: ListView
Post by: Fred Tomke on June 28, 2011, 06:46:42 AM
Achso, und ich finde in deinem String die Security Info nicht (siehe Dein Link).

VG, Fred
Title: Re: ListView
Post by: SpEEDY on June 29, 2011, 12:36:13 AM
Vielen Dank für die Hilfe Fred.
Habe versucht wie in deinen Link beschrieben die Entwurfsansicht der "Datenzugriffsseite" zu öffnen, leider erhalte ich dabei immer den den Fehler "Der OLE-Server ist nicht registriert". Habe schon im Netz geschaut was das sein könnte. Habe gefunden das es an Norten Liegen könnte was ich nicht auf den PC haben oder an Bilder, die ich nicht in der MDW habe. Komischerweise hat meine MDW-Datei keine "Datenzugriffsseite" dort sind nur Abfragen.

Naja, werde mal schauen ob ich noch was finde. Ich bedanke mich noch mal und wünsche dir einen schönen Warmen Tag. ;)

Gruß
SpEEDY 
Title: Re: ListView
Post by: Fred Tomke on June 29, 2011, 03:07:55 AM
Ja, den wünsch ich Dir auch. Ich sitz grad im Wald und dennoch brennt mir's Fell!
Morgen kommt ja Abkühlung.

Mein Verweis auf die Microsoft-Seite galt inbesondere dem UNC-Pfad. Und die Sache mit der Berechtigung sollte meinen, dass Du den Eintrag Security Info in deinem ConnectionString ergänzt.
Kommst Du denn als Admin ran?

VG, Fred
Title: Re: ListView
Post by: SpEEDY on June 29, 2011, 04:53:21 AM
Im Wald sitzen das nenne ich mal Arbeit. ;-D
Ich freue mich über das Wetter, leider muss ich im Büro mir langer Hose sitzen.
Und du weißt wahrscheinlich wie man sich bei den Wetter dann fühlt. ;-D

Das ist ja genau das Problem das ich habe. Die MDB-Datei die ich verwenden möchte, sind für den Admin gesperrt.
Sprich man muss für die entsprechenden Tabellen erst Lese und schreibe Rechte setzen. Die Rechte sind spezial für die Benutzergruppe gesetzt.
Deswegen muss ich mich über die MDW-Datei anmelden.

Ich würde dir gerne die beiden Daten zu Verfügung stellen, das darf ich leider nicht machen. :-( Kundendaten und MDW ist halt Geschütz, bzw. Rechte gedöns. Sorry!!!

Gruß
SpEEDY
Title: Re: ListView
Post by: Fred Tomke on June 29, 2011, 05:05:00 AM
OK, fangen wir doch mal einfach an:
Man müsste erst einmal herausbekommen, ob der ConnectionString prinzipiell funktioniert.
Hast Du es mal mit einer einfachen anderen Datenbank mit MDW probiert?

VG, Fred
Title: Re: ListView
Post by: SpEEDY on July 04, 2011, 11:37:21 PM
Sorry Fred das ich ich mich erst jetzt melde.
Das Problem ist das ich nicht genau weiß wie ich eine eigen MDW Datei erstellen kann.
Versuche mich mal nächste Woche nochmal damit. Ich melde mich noch mal.

Schönen Diensttag noch.

Gruß
SpEEDY
Title: Re: ListView
Post by: SpEEDY on September 08, 2011, 02:58:43 AM
Morgen Fred wollte mich noch einmal melden.
Habe es hingekommen..  ;D ;D ;D

Mit dem ConnectString 

(setq ConnectString  (strcat "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" DatenbankName ";Persist Security Info=False;Jet OLEDB:System Database=.mdw" ))

und

(ADOLISP_ConnectToDB ConnectString USER PASSWORT)

geht es!


Juhuhuh!!! Wollte ich nur mal mitteilen. Danke nochmal für die Hilfe.

MFG

SpEEDY
Title: Re: ListView
Post by: Fred Tomke on September 08, 2011, 05:28:39 AM
Hallo, SpEEDY, vielen Dank für die Info. Das ist mit Sicherheit auch für andere hilfreich!

VG, Fred
Title: Re: ListView
Post by: SpEEDY on September 08, 2011, 05:57:06 AM
Keine Ursache, immer wieder gerne.

Wollte nur mitteilen das es zu Problemen mit Win 7 uns SP1 gegeben kann. Microsoft hat da die ADO.DLL geändert und man bekommt keinen richtigen zugriff mehr. Habe noch keine richtige Hilfe dafür gefunden.

MFG
SpEEDY
Title: Re: ListView
Post by: Fred Tomke on September 08, 2011, 11:41:54 AM
Hi, auf 64-Bit-Betriebssystemen verwenden wir kein Jet mehr, sondern die AccessDatabaseEngine für Office 2010 x64.

VG, Fred
Title: Re: ListView
Post by: SpEEDY on September 08, 2011, 11:57:42 PM
Danke Fred und wieder was gelernt.

Ein paar Fragen hätte ich aber noch.
- kann ich damit auch Access 2003 MDBs öffnen?
- Wie muss der "ConnectString" den aussehen?
- gibt es einen Möglichkeit in der Reg zu sehen ob es sich um ein x64 System handelt?
  Außer zu schauen ob "HKEY_LOCAL_MACHINE\Software\WOW6432Node" vorhanden ist?

Sind auch meine letzten Fragen zu dem Thema.  ;D
Danke noch mal.

MFG

SpEEDY
Title: Re: ListView
Post by: Fred Tomke on September 09, 2011, 03:28:26 AM
Hi,

Quotekann ich damit auch Access 2003 MDBs öffnen
ja

QuoteWie muss der "ConnectString" den aussehen?
Ich mache das immer so:
Code (autolisp) Select
(setq strDriver (if (= (getenv "PROCESSOR_ARCHITECTURE") "x86") "Microsoft.Jet.OLEDB.4.0" "Microsoft.ACE.OLEDB.12.0"))
(setq err (vl-catch-all-apply 'vlax-invoke-method (list oDbv "Open" (strcat "Provider=" strDriver ";Data Source=" strFile) strUser strPass -1)))


VG, Fred
Title: Re: ListView
Post by: SpEEDY on September 15, 2011, 04:38:48 AM
Danke Fred noch mal für die Antwort, leider funktioniert es nicht unter X64 Rechner.
Nutzt du die ADO.Lisp? oder gehts du über eine ActiveX verbindung?

Gruß
SpEEDY
Title: Re: ListView
Post by: Fred Tomke on September 15, 2011, 04:49:39 AM
Hi, was funktioniert konkret nicht?

Eine ADO.Lisp kenne ich jetzt ad hoc nicht. Basierend auf dem Wissen aus den Beispielen der Flemming group und dem Buch AutoCAD Database Connectivity und meinen sonstigen Erfahrungen mit ActiveX habe ich mir eine ADO-Bibliothek gebaut, die im Prinzip auf Connection-Object holen, SQL-Statement absetzen und Connection-Objekt schließend besteht. Mit den unten genannten ConnectionStrings komme ich in die Datenbank (vorausgesetzt, sie liegt nicht in einem von Windows7 gesperrten Ordner wie unterhalb von C:\ProgramData).

VG, Fred
Title: Re: ListView
Post by: SpEEDY on September 16, 2011, 02:00:04 AM
bekomme einfach keine Verbindung auf einen X64 PC. Ich meine diese ADO.lsp http://acad.fleming-group.com/Download/ADOLisp/ADOLisp.html (http://acad.fleming-group.com/Download/ADOLisp/ADOLisp.html)

Habe mal was gebastelt womit man prüfen kann ob einen Verbindung steht.
Unter x86 PC ist alles in Ordnung, leider unter einem einzigen X64 nicht.
Dieser hat aber ein Office X86 Paket installiert. Könnte es vielleicht daran liegen?
Gibt es einen Möglichkeit auf die 32bit ADO zuzugreifen, falls es eine gibt? Leider bin ich noch nicht so fit in dem Thema.

Was mich nur wundert ist folgendes. Es gib VB-Programme die unter einem 64-Bit System immer noch "Microsoft.Jet.OLEDB.4.0" diese werden wahrscheinlich auf 32bit-erstellt und greifen auf die Daten in "Programm X86" zu. ÃÅ"berlege mir die ganze zeit ob das auch mit Lisp möglich ist.

Oder bin ich vielleicht vorkommen auf den Holzweg.

Code (autolisp) Select
(defun C:ACC ()

(setq DatenbankName "X")
(setq MDWPFAD "X")
;;;(setq strDriver (if (= (getenv "PROCESSOR_ARCHITECTURE") "x86") "Microsoft.Jet.OLEDB.4.0" "Microsoft.ACE.OLEDB.12.0"))
  (setq strDriver "Microsoft.ACE.OLEDB.12.0")
 
    (setq ConnectString  (strcat "Provider=" strDriver ";Data Source=" DatenbankName ";Persist Security Info=False;Jet OLEDB:System Database=" MDWPFAD ))
    (setq ConnectionObject
                  (ADOLISP_ConnectToDB ConnectString "MASTER" "")
           )

  (if ConnectionObject
    (alert "Verbindung OK")
    (alert "keine Verbindung")
   )
)


PS. Für die Routine wird die "ADOLISP_Library.lsp" (http://acad.fleming-group.com/Download/ADOLisp/ADOLisp.html (http://acad.fleming-group.com/Download/ADOLisp/ADOLisp.html)) benötigt.
Gruß

SpEEDY
Title: Re: ListView
Post by: Fred Tomke on September 16, 2011, 03:50:46 AM
Quote from: SpEEDY on September 16, 2011, 02:00:04 AM
[...] greifen auf die Daten in "Programm X86" zu. Überlege mir die ganze zeit ob das auch mit Lisp möglich ist.
Nein, Du arbeitest mit Lisp immer im AutoCAD-Kontext. Ist AutoCAD 64-Bit, werden alle Klassen aus dem 64-Umfeld instanziiert.
Wir haben aber eine 32-Bit-Komponente, die sich im 64-Bit-Kontext instanziieren lässt. Warum auch immer. Durch diesen Tunnel habe ich mir schon mal eine 32-Bit-ADO-Instanz ins 64-Bit-AutoCAD geholt. Ich halte das aber für keine gute Idee.

Dein ConnectionString sieht eigenartig aus. Kann es sein, dass Du versuchst, auf eine MDW zuzugreifen? Von MDW's habe ich keine Ahnung. Kann ich eine Beispieldatenbank von Dir haben?

Wichtig ist, dass Du auf einem 64-Bit-Rechner dringend die Access Database Engine für Office 2010 64-Bit (http://www.microsoft.com/downloads/de-de/details.aspx?familyid=c06b8369-60dd-4b64-a44b-84b371ede16d&displaylang=de) installierst. Ein etwaig installiertes Office muss zunächst runter. Danach kann auch eine ältere 32-Bit Version wieder drauf. Soll es aber unbedingt Office 2010 sein, musst Du auf 64-Bit-Systemen auch das Office 2010 x64 verwenden.

VG, Fred