powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SQLite из Visual Foxpro
1 сообщений из 1, страница 1 из 1
SQLite из Visual Foxpro
    #40140629
a.kornienko.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую!
Закончил обертку для доступа к SQLite через COM. Dll-ки и описание здесь https://github.com/Arkady23/COM.SQLite-COM.SQLite32.
Пример использования:
Код
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
* ТЕСТЫ РАБОТЫ С ОБЪЕКТОМ COM.SQLite
* TESTS OF WORKING WITH THE OBJECT COM.SQLite
  ? "Test 1: " + tran(Test1())
  ? "Test 2: " + tran(Test2())
  ? "Test 3: " + tran(Test3())
  ? "Test 4: " + tran(Test4())

FUNCTION Test1
  local ret
  SQLite = CreateO('COM.SQLite')

  ret = SQLite.Open('test.db')
     if ret<>0
        return 1
     endif
  ret = SQLite.DoCmd("DROP TABLE IF EXISTS people;"+ ;
        "CREATE TABLE people(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)")
     if ret<>0
        return 2
     endif

  * В запросе требуются два параметра со значениями:
  * The request requires two parameters with values:
  ret = SQLite.DoCmd("INSERT INTO people (name, age) VALUES (?, ?)", "Bill Gates", 69)
     if ret<>0
        return 3
     endif

  * Другие записи:
  * Other records:
  ret = SQLite.DoCmd("INSERT INTO people (name, age) VALUES (?, ?)", "Richard Hipp", 64)
     if ret<>0
        return 4
     endif
  ret = SQLite.DoCmd("INSERT INTO people (name, age) VALUES (?, ?)", ;
        Strconv("Аркадий Корниенко",9), 64)
     if ret<>0
        return 5
     endif
  ret = SQLite.Close()
     if ret<>0
        return 5
     endif

RETURN 0

FUNCTION Test2
  local ret
  SQLite = CreateO('COM.SQLite')

  * Указываем тип массива параметров с нулевого элемента для COM-объекта SQLite:
  * Specify the parameter array type with a zero element for the SQLite COM object:
  ComArray(SQLite,10)

  * Формируем массив параметров размером в 6 элементов:
  * We form an array of parameters with a size of 6 elements:
  dime vals(6)
  vals(1)="Bill Gates"
  vals(2)=69
  vals(3)="Richard Hipp"
  vals(4)=64
  vals(5)=Strconv("Аркадий Корниенко",9)
  vals(6)=64

  ret = SQLite.Open('test.db')
     if ret<>0
        return 6
     endif
  ret = SQLite.DoCmdN("DROP TABLE IF EXISTS people;"+ ;
        "CREATE TABLE people(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER);"+ ;
        "INSERT INTO people (name, age) VALUES (?, ?);"+ ;
        "INSERT INTO people (name, age) VALUES (?, ?);"+ ;
        "INSERT INTO people (name, age) VALUES (?, ?);", ;
        @vals)
     if ret<>0
        return 7
     endif
  ret = SQLite.Close()
     if ret<>0
        return 8
     endif

RETURN 0

FUNCTION Test3
  local ret
  SQLite = CreateO('COM.SQLite')

  ret = SQLite.Open('test.db')
     if ret<>0
        return 9
     endif

  * Использование транзакции при выполнении нескольких SQL-комманд:
  * Using a Transaction When Executing Multiple SQL Statements:
  ret = SQLite.DoCmd("BEGIN TRANSACTION;")
     if ret<>0
        return 10
     endif

  ret = SQLite.DoCmd("DROP TABLE IF EXISTS people;"+ ;
        "CREATE TABLE people(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER);"+ ;
        "INSERT INTO people (name, age) VALUES (?, ?);"+ ;
        "INSERT INTO people (name, age) VALUES (?, ?);"+ ;
        "INSERT INTO people (name, age) VALUES (?, ?);", ;
        "Bill Gates", 69, "Richard Hipp", 64, ;
        Strconv("Аркадий Корниенко",9), 64)
     if ret<>0
        ret = SQLite.DoCmd("ROLLBACK;")
        if ret<>0
           return 11
        endif
        return 12
     endif

  ret = SQLite.DoCmd("COMMIT;")
     if ret<>0
        return 13
     endif

  ret = SQLite.Close()
     if ret<>0
        return 14
     endif

RETURN 0

* СЖАТИЕ И КОПИРОВАНИЕ БД
* COMPRESSION AND COPYING OF THE DB
FUNCTION Test4
  local ret
  SQLite = CreateO('COM.SQLite')
  bak = 'sqlite.test.db.bak'
  backup = 'sqlite.test.db'

  if(file(m.bak))
     dele file (m.bak)
  endif
  if(file(m.backup))
     rena (m.backup) to (m.bak)
  endif

  ret = SQLite.Open('test.db')
     if ret<>0
        return 15
     endif

  ret = SQLite.DoCmd("VACUUM INTO ?",m.backup)
     if ret<>0
        return 16
     endif

  ret = SQLite.Close()
     if ret<>0
        return 17
     endif

RETURN 0
...
Изменено: 19.04.2025, 01:55 - a.kornienko.ru
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SQLite из Visual Foxpro
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]