Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Variablen aus ADOLisp verwenden

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:  Variablen aus ADOLisp verwenden (911 mal gelesen)
josch76
Mitglied


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

Beiträge: 5
Registriert: 20.05.2009

erstellt am: 20. Mai. 2009 17:36    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 zusammen,

ich verwende ADOLisp, um Daten aus einer SQL Datenbank auszulesen. Wie komme ich aber an die Variablen ran, um Autocad damit zu füttern?
Ein Beispiel:

Executing a SELECT statement to retrieve some data:
"SELECT * FROM g000 WHERE identnr = '4.6015.00100'"
Result:
(("fi_nr" "identnr" "ben" "gegrp" "ch" "info" "doku" "me" "mes" "disstufe"
"txt_nr" "datneu" "userneu" "dataen" "useraen" "aendnr" "chargen_gen"
"chargen_pflicht" "kn_variant" "kurz_ben" "objektid" "serien_pflicht" "var_akt"
"updatenr" "etiketttyp" "etkeinheit" "herstellernr" "identnr_nf" "kn_verp"
"lm_art") (23 "4.6015.00100          " "Kugelhahn AE                           
" "    " "20" "0" "A" "STK" "  " 0 "            " "03/05/2001" "widmann "
"03/06/2001" "jlutz  " 1 nil "0" "0" nil nil "0" "    " 0 nil nil nil nil " "
" ")) ;

Ich will nun z.B. an die Variable ben, wie mach ich das?

Liebe Grüße aus dem Süden
Jan

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

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
Registriert: 02.11.2001

Windows 10 64bit
AutoCAD Architecture 2018/2019 (deu/eng)
AEC-Collection 2019 (Revit und Zeugs)
Wenn sich's nicht vermeiden läßt:
D-A-CH Erweiterung (mies implementierter Schrott)

erstellt am: 20. Mai. 2009 19:05    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 josch76 10 Unities + Antwort hilfreich

Ich würde es ungefähr folgendermassen machen:

Code:

;|
Example
(setq XX '(("fi_nr"    "identnr"   "ben" "gegrp"
    "ch"    "info"   "doku" "me"
    "mes"    "disstufe"   "txt_nr" "datneu"
    "userneu"    "dataen"   "useraen" "aendnr"
    "chargen_gen"  "chargen_pflicht" "kn_variant"
    "kurz_ben"    "objektid"   "serien_pflicht"
    "var_akt"    "updatenr"   "etiketttyp" "etkeinheit"
    "herstellernr" "identnr_nf"   "kn_verp" "lm_art"
   )
   (23      "4.6015.00100          "
    "Kugelhahn AE                           
"     "    "      "20"       "0"
    "A"      "STK"       "  "
    0      "            "   "03/05/2001"
    "widmann "      "03/06/2001"     "jlutz  "
    1      NIL       "0"
    "0"      NIL       NIL
    "0"      "    "       0
    NIL      NIL       NIL
    NIL      " "       " "
   )
  )
)

(setq val (ADOLISTGETVALUE "chargen_gen" xx)) - ergibt für o.g. Beispiel: ("chargen_gen") - weil Wert aus ADO NIL ist
(setq val (ADOLISTGETVALUE "identnr" xx)) - ergibt für o.g. Beispiel: ("identnr" . "4.6015.00100          ") - weil Wert aus ADO "4.6015.00100          " ist
(setq val (ADOLISTGETVALUE "KeyNichtEnthalten" xx)) - ergibt für o.g. Beispiel: nil - Weil Schlüssel "KeyNichtEnthalten" nicht in der Adoliste existiert

|;
;|
Begin Subroutines
Funktion "ADOLIST2ASSOCABLELIST" macht aus der ADOLisp Rückgabe 'ne assocable List
Argumente:
LSTADOLIST = Liste wie sie aus AdoLisp für SQL Abfrage zurückgegeben wird (siehe Beispiel oben)

Rückgabe:
Liste die jeden Schlüssel mittels cons an seinen entsprechenden Wert bindet und damit über die Funktion assoc ein sog. dotted pair zurückgeben kann.
Beispiel:
(setq yy (ADOLIST2ASSOCABLELIST xx))
Rückgabe (verkürzt):
(("fi_nr" . 23) ("identnr" . "4.6015.00100          ") ("ben" . "Kugelhahn AE") ... ("lm_art" . " "))
oder nil wenn die drei Bedingungen nicht erfüllt sind.
|;
(defun ADOLIST2ASSOCABLELIST (LSTADOLIST / RETVAL)
  (if (and (= (type LSTADOLIST) 'list) ;_ Argument ist eine Liste
   (= (length LSTADOLIST) 2) ;_ Liste hat zwei Elemente
   (= (length (car LSTADOLIST)) (length (cadr LSTADOLIST))) ;_ Beide Listenelemente haben die gleiche Anzahl Objekte
      )
    (setq RETVAL (mapcar '(lambda (X Y) (cons X Y))
(car LSTADOLIST)
(cadr LSTADOLIST)
)
    )
  )
  RETVAL
)

;|
Funktion "ADOLISTGETVALUE" sucht sich aus der ADOLisp Rückgabe den Schlüssel und gebundenen Wert entsprechend des übergebenen Arguments "STRKEYNAME".
Argumente:
STRKEYNAM = Gesuchter Schlüssel. Achtung! Case sensitive!!!
LSTADOLIST = Liste wie sie aus AdoLisp für SQL Abfrage zurückgegeben wird (siehe Beispiel oben).

Rückgabe:
Dotted Pair Liste die den Schlüssel und dessen Wert enthält oder nil.
Beispiel:
(setq val (ADOLISTGETVALUE "identnr" xx))
Rückgabe:
("identnr" . "4.6015.00100          ")
oder nil wenn die ADOListe die Bedingungen aus "ADOLIST2ASSOCABLELIST" nicht erfüllt oder aber der gesuchte Schlüssel nicht in der Liste enthalten ist.
|;
(defun ADOLISTGETVALUE (STRKEYNAME LSTADOLIST / ASSOCABLELIST RETVAL)
  (if (setq ASSOCABLELIST (ADOLIST2ASSOCABLELIST LSTADOLIST))
    (setq RETVAL (assoc STRKEYNAME ASSOCABLELIST))
  )
  RETVAL
)


Edit: Ach so, ich sollte vielleicht noch sagen, das das meiste o.g. einfach der erklärende Kommentar zu den eigentlichen Funktionen ist. Das ist bereits so formatiert, das es auch von AutoCAD als Kommentar erkannt und zur Laufzeit nicht interpretiert wird. Leider geht hier im Forum der eigentliche Code etwas unter... Anbei also nur Code in Kopie zu oben:

Code:

(defun ADOLIST2ASSOCABLELIST (LSTADOLIST / RETVAL)
  (if (and (= (type LSTADOLIST) 'list) ;_ Argument ist eine Liste
   (= (length LSTADOLIST) 2) ;_ Liste hat zwei Elemente
   (= (length (car LSTADOLIST)) (length (cadr LSTADOLIST))) ;_ Beide Listenelemente haben die gleiche Anzahl Objekte
      )
    (setq RETVAL (mapcar '(lambda (X Y) (cons X Y))
(car LSTADOLIST)
(cadr LSTADOLIST)
)
    )
  )
  RETVAL
)

(defun ADOLISTGETVALUE (STRKEYNAME LSTADOLIST / ASSOCABLELIST RETVAL)
  (if (setq ASSOCABLELIST (ADOLIST2ASSOCABLELIST LSTADOLIST))
    (setq RETVAL (assoc STRKEYNAME ASSOCABLELIST))
  )
  RETVAL
)


...

------------------
Ciao,
Marc
    

[Diese Nachricht wurde von marc.scherer am 20. Mai. 2009 editiert.]

[Diese Nachricht wurde von marc.scherer am 20. Mai. 2009 editiert.]

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

josch76
Mitglied


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

Beiträge: 5
Registriert: 20.05.2009

erstellt am: 22. Mai. 2009 09:53    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

Danke für die schnelle Antwort. Nur so ganz klar komme ich damit noch nicht. Ich kopiere also den unteren Code in meine Lisp Datei, soweit klar. Nur wie ich an die einzelnen Werte komme, ist mir noch nicht ganz klar.

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

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
Registriert: 02.11.2001

Windows 10 64bit
AutoCAD Architecture 2018/2019 (deu/eng)
AEC-Collection 2019 (Revit und Zeugs)
Wenn sich's nicht vermeiden läßt:
D-A-CH Erweiterung (mies implementierter Schrott)

erstellt am: 23. Mai. 2009 02:02    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 josch76 10 Unities + Antwort hilfreich

 
Zitat:

Nur wie ich an die einzelnen Werte komme, ist mir noch nicht ganz klar

*staun* Mensch, Du machst mit ADOLisp rum und weißt nicht wie Du aus dem Ergebnis meiner Funktion den Wert des gesuchten Schlüssels bekommen kannst?
Hast Du Dir den ganzen Kommentar der beiden Funktionen mal DURCHGELESEN?
Wenn Du den nicht liest, wirst Du auch keine Ahnung davon bekommen was Du damit anfangen sollst...

Aber mal 'n Tip:
Die Funktion ADOLISTGETVALUE gibt ja 'n punktiertes Paar zurück wenn der gesuchte Key gefunden wurde.
In etwas so etwas:
("identnr" . "4.6015.00100          ")

Jetzt liest Du Dir am besten noch mal die Lisp-Hilfe zu den beiden Funktionen:
"car" und "cdr" durch und dann kannst Du Dir Deine Frage selbst beantworten!

 

Zitat:

Ich kopiere also den unteren Code in meine Lisp Datei, soweit klar.

Nein, ich denke Du solltest den gesamten oberen Teil (der inklusive Kommentar) in Deine Lisp kopieren. Der Kommentar ist nämlich zum Verständnis dessen (auch in einem Jahr noch...) was dort passiert wichtig. Wenn Du irgendwann Deinen Code pflegst und diesen ohne Kommentare einfach nackt stehen hast, dann wird's schnell nervig und zeitaufwändig. Also: Kommentare drinnen lassen und vor allem den eigenen Code unbedingt ausreichend kommentieren!

------------------
Ciao,
Marc
   

[Diese Nachricht wurde von marc.scherer am 23. Mai. 2009 editiert.]

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

josch76
Mitglied


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

Beiträge: 5
Registriert: 20.05.2009

erstellt am: 23. Mai. 2009 09:54    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

Hi Marc,

danke nochmals für die Antwort. Das punktierte Paar hatte ich schon, den Rest schaffe ich dank deiner Hilfe auch noch. Vielen Dank!

Gruß
Jan

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