Author Topic: SQLiteLsp  (Read 6639 times)

Vaidas

  • Administrator
  • Full Member
  • *****
    • View Profile
SQLiteLsp
« on: 2012-01-13, 16:44:49 »
SQLite yra biblioteka, kuri realizuota kaip nepriklausomas, nereikalaujantis serverio, nereikalaujantis konfigūravimo SQL duomenų bazių variklis. SQLite labiausiai pasaulyje paplitęs SQL duomenų bazių variklis. Su LISP SQLite veikia nepaprastai greitai.

Nuorodos parsisiuntimui iš TheSwamp
Kodų pavyzdžiai BricscadAPI

Ir tai yra vienas geriausių dalykų, sukurtų LISP ir Bricscad,  ir aš su dideliu malonumu juo naudojuosi!
Veikia su Bricscad Windows ir Linux.

Vaidas

  • Administrator
  • Full Member
  • *****
    • View Profile
Re: SQLiteLsp
« Reply #1 on: 2012-01-13, 20:48:24 »
Linijų rūšiavimo pagal ilgį ir spalvą pavyzdys.
Pastaba: spalva 'bylayer' gražins klaidą, todėl visoms linijoms reikia priskirti spalvas ne pagal sluoksnį.

Code: [Select]
(defun c:test ( / a my-dbf)
 
  (setq my-dbf (strcat (getvar "dwgprefix") "SQLiteLsp-test-" (getvar "program")"-" (rtos (atof (getvar "acadver")) 2 2) ".db"))

  (if (findfile my-dbf)
    (progn
      (DSQL_OPEN my-dbf)
      (DSQL_DML my-dbf "DELETE FROM Lines;")
      (DSQL_CLOSE my-dbf)
      (vl-file-delete my-dbf)
      ))

 
  (DSQL_OPEN my-dbf)
  (DSQL_QUERY my-dbf "PRAGMA foreign_keys = ON;")
  (DSQL_QUERY my-dbf "PRAGMA foreign_keys;")
  (DSQL_DML my-dbf "CREATE TABLE Lines (Id int, N int, Handle char(16), LineLength int, Color int, Layer char(255));")
  (DSQL_CLOSE my-dbf)
 

(if (setq ss (ssget "_X"
 '(
    (0 . "LINE")
  )
))

(progn 
  (setq n (sslength ss) which 0)


  (DSQL_OPEN my-dbf)
  (DSQL_DML my-dbf "BEGIN TRANSACTION;")
  (DSQL_CMPSTMT my-dbf "INSERT INTO Lines VALUES (?, ?, ?, ?, ?, ?);")
 
  (repeat n
    (setq line (ssname ss which))

    (DSQL_STMTBIND
            which
            0
    (cdr (assoc 5 (entget line)))
    (fix (distance (cdr (assoc 10 (entget line)))(cdr (assoc 11 (entget line)))))
    (cdr (assoc 62 (entget line)))
    (cdr (assoc 8 (entget line)))
    )
     
        (setq which (+ which 1))
  )
 
  (DSQL_DML my-dbf "COMMIT TRANSACTION;")
  (DSQL_STMTFNL)
  (DSQL_CLOSE my-dbf)


  (setq which 0)
  (DSQL_OPEN my-dbf)

  (setq lst (DSQL_ASSOCQUERY my-dbf "SELECT DISTINCT Lines.LineLength, Lines.Color, Lines.Layer FROM Lines ORDER BY Lines.LineLength DESC, Lines.Color ASC;"))
  (setq which_dif 1)

  (foreach dif lst
  (setq LineLength (cdr (assoc "LineLength" dif)) Color (cdr (assoc "Color" dif)) Layer (cdr (assoc "Layer" dif)))
  (setq lst-id (cdr (DSQL_QUERY my-dbf (strcat "SELECT DISTINCT Lines.Id FROM Lines WHERE Lines.LineLength=" (itoa LineLength) " AND Lines.Color=" (itoa Color) " AND Lines.Layer=" Layer ";"))))

  (foreach it lst-id
  (DSQL_DML my-dbf (strcat "UPDATE Lines SET N=" (itoa which_dif) " WHERE Id=" (itoa (car it)) ";"))
    )

    (setq which_dif (1+ which_dif))

    )


  (DSQL_CLOSE my-dbf)
);p
    );i
 
  (princ)
)

(princ)

Vaidas

  • Administrator
  • Full Member
  • *****
    • View Profile
Re: SQLiteLsp
« Reply #2 on: 2012-01-13, 20:52:13 »
SQLite duomenų bazių peržiūrai naudojuosi sqlitebrowser. Lengvas, paprastas, nereikia įdiegti ir konfigūruoti. Duomenų bazės išplėtimas gali būti bet koks, tačiau dėl bendros tvarkos naudoju .db