Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Соединение с SQLite  [new]
q1w1e1
Member

Откуда: Кы-рск
Сообщений: 1048
Здравствуйте, постоянно из районов шлют SQLite базы, они по размеру маленькие, SQL запросом объединить не получится, нужно внутри цикла делать много проверок, т.е. это я к тому, что соединяться с SQLite базой придётся регулярно, а не разово(перебросить в Excel и перекинуть в фокс). Как соединиться с SQLite базой?, т.е. как мне проверить стоят ли на компе odbc драйвера нужной версии, если не стоят, то где их можно скачать, как проверить, что драйвера встали нормально, а не криво, и как создать конекшин строку и попытаться соединиться с тестовой базой?
22 ноя 21, 10:08    [22398914]     Ответить | Цитировать Сообщить модератору
 Re: Соединение с SQLite  [new]
Dima T
Member

Откуда:
Сообщений: 16054
Тут почитай, там ссылки и на драйвер и на строку подключения.
22 ноя 21, 10:16    [22398923]     Ответить | Цитировать Сообщить модератору
 Re: Соединение с SQLite  [new]
q1w1e1
Member

Откуда: Кы-рск
Сообщений: 1048
Dima T,
Спасибо, но какой драйвер ODBC увидит фокс?, 32 битный или 64 битный?
22 ноя 21, 12:01    [22398990]     Ответить | Цитировать Сообщить модератору
 Re: Соединение с SQLite  [new]
q1w1e1
Member

Откуда: Кы-рск
Сообщений: 1048
q1w1e1,
В общем 64 битный не видит, а когда подключаешь 32 битный, то кракозябры в view
22 ноя 21, 12:38    [22399024]     Ответить | Цитировать Сообщить модератору
 Re: Соединение с SQLite  [new]
q1w1e1
Member

Откуда: Кы-рск
Сообщений: 1048
q1w1e1, всё вроде разобрался
22 ноя 21, 12:50    [22399030]     Ответить | Цитировать Сообщить модератору
 Re: Соединение с SQLite  [new]
Dima T
Member

Откуда:
Сообщений: 16054
Фокс 32-битный, поэтому может использовать только 32-битные драйвера.
22 ноя 21, 13:06    [22399039]     Ответить | Цитировать Сообщить модератору
 Re: Соединение с SQLite  [new]
Dima T
Member

Откуда:
Сообщений: 16054
Если нужно чтобы работало на разных рабочих местах можно использовать Command Line Shell For SQLite, это что-то типа консоли, которой можно дать скрипт и она его выпонит. Например экспортирует все таблицы в отдельные файлы CSV, затем фоксом их парси как обычный текст.
22 ноя 21, 13:29    [22399057]     Ответить | Цитировать Сообщить модератору
 Re: Соединение с SQLite  [new]
q1w1e1
Member

Откуда: Кы-рск
Сообщений: 1048
Спасибо
23 ноя 21, 09:00    [22399513]     Ответить | Цитировать Сообщить модератору
 Re: Соединение с SQLite  [new]
q1w1e1
Member

Откуда: Кы-рск
Сообщений: 1048
Здравствуйте, а не подскажите, почему экзешнику(MinGW) спокойно соединяется с базами sqllite db без всяких odbc драйверов, а для фокса нужен odbc драйвер?
25 ноя 21, 07:46    [22400475]     Ответить | Цитировать Сообщить модератору
 Re: Соединение с SQLite  [new]
Dima T
Member

Откуда:
Сообщений: 16054
q1w1e1
Здравствуйте, а не подскажите, почему экзешнику(MinGW) спокойно соединяется с базами sqllite db без всяких odbc драйверов, а для фокса нужен odbc драйвер?

Потому что в SQLite основной способ обращения к данным это API для С/С++.
Драйвер ODBC это тоже надстройка над этим API, сделали чтобы иметь универсальное решение для любых других языков в виндавсе.

Можно сделать собственную надстройку в виде DLL, и через нее обращаться к БД, но будет неудобно пользоваться такой конструкцией из фокса.
25 ноя 21, 08:31    [22400486]     Ответить | Цитировать Сообщить модератору
 Re: Соединение с SQLite  [new]
q1w1e1
Member

Откуда: Кы-рск
Сообщений: 1048
спасибо, а как можно переделать строку dsn, а то что не могу преобразовать, в проекте создал конекшн, представление и данные выбираются Connect string
DSN=SQLite3 Datasource;Database=;StepAPI=0;SyncPragma=NORMAL;NoTXN=0;Timeout=100000;ShortNames=0;LongNames=0;NoCreat=0;NoWCHAR=

А теперь я пытаюсь перенести в программу чё-то не получается
TEXT TO lcConn NOSHOW PRETEXT 15
	Driver=SQLite3 Datasource;
	DATABASE="x:\data.sdb";
	CHARSET=WIN1251;
	DIALECT=1;
ENDTEXT 

PUBLIC nConn
nConn=SQLSTRINGCONNECT(lcConn)
IF nConn=-1
  aerror(laErr)
     MessageBox(laErr[1,2]) 
ELSE
  MESSAGEBOX('Ок')
ENDIF

SELECT * FROM table1
25 ноя 21, 09:16    [22400498]     Ответить | Цитировать Сообщить модератору
 Re: Соединение с SQLite  [new]
Dima T
Member

Откуда:
Сообщений: 16054
Запрос надо делать через SqlExec()

Примерно так
lnErr = SqlExec(nConn, 'SELECT * FROM table1', 'cursor1')
IF lnErr =-1
  aerror(laErr)
     MessageBox(laErr[1,2]) 
ELSE
  sele cursor1
  browse
ENDIF


Сообщение было отредактировано: 25 ноя 21, 09:30
25 ноя 21, 09:30    [22400502]     Ответить | Цитировать Сообщить модератору
 Re: Соединение с SQLite  [new]
q1w1e1
Member

Откуда: Кы-рск
Сообщений: 1048
до select не доходит, что-то со строкой конекшина, пишет, что microsoft диспетчер драйверов ODBC источник данных не найден и не указан драйвер
25 ноя 21, 09:47    [22400508]     Ответить | Цитировать Сообщить модератору
 Re: Соединение с SQLite  [new]
Dima T
Member

Откуда:
Сообщений: 16054
q1w1e1
до select не доходит, что-то со строкой конекшина, пишет, что microsoft диспетчер драйверов ODBC источник данных не найден и не указан драйвер

Надо название драйвера указывать. Тут пишут
... DRIVER=SQLite3 ODBC Driver; ...

Попробуй заменить на это.
Как точно драйвер называется можно посмотреть в настройках ODBC вкладка Драйверы.
Возможно надо фигурные скобки добавить, например для MS SQL у меня так прописано
Driver={SQL Server Native Client 11.0};...
25 ноя 21, 10:17    [22400531]     Ответить | Цитировать Сообщить модератору
 Re: Соединение с SQLite  [new]
q1w1e1
Member

Откуда: Кы-рск
Сообщений: 1048
спасибо, с помощью каких то тыков вроде получилось, правда кракозябры, сейчас ещё поэкспериментирую
TEXT TO lcConn NOSHOW PRETEXT 15
Driver={SQLite3 ODBC Driver};
Database=D:\TMP\data.db;
StepAPI=0;
SyncPragma=;
NoTXN=0;
Timeout=;
ShortNames=0;
LongNames=0;
NoCreat=0;
?8Ã!
ENDTEXT


Сообщение было отредактировано: 25 ноя 21, 11:14
25 ноя 21, 11:12    [22400571]     Ответить | Цитировать Сообщить модератору
 Re: Соединение с SQLite  [new]
Dima T
Member

Откуда:
Сообщений: 16054
q1w1e1
правда кракозябры

Строки в SQLite хранятся в кодировке UTF-8, Используй STRCONV() для преобразования.
25 ноя 21, 11:29    [22400584]     Ответить | Цитировать Сообщить модератору
 Re: Соединение с SQLite  [new]
q1w1e1
Member

Откуда: Кы-рск
Сообщений: 1048
Спасибо, STRCONV(stroka,11), сконвертировала нормально
25 ноя 21, 11:52    [22400605]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить