| 
 
SQLite из Visual Foxpro 
    
           
    
    #40140629
    
    
        Ссылка: 
    
    Ссылка на сообщение: 
    
    Ссылка с названием темы: 
    
    
        Ссылка на профиль пользователя: 
    
    
                                                                    
    
     
 
 | 
| 
   
 | 
 | 
Приветствую! 
Закончил обертку для доступа к 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 
  
   
   
 
 |