Russian Qt Forum
Ноябрь 23, 2024, 11:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: [SOLVED] SQLITE регистронезависимый LIKE  (Прочитано 29028 раз)
virtual_root
Гость
« Ответ #15 : Апрель 19, 2013, 09:26 »

Ребята, помогите пожалуйста! Я программирую под Linux(debian). Мне нужно организовать регистронезависимый LIKE в запросах.
Сделала как описано выше:
Цитировать
1. Необходимо установить пакеты
 
Код:
- libsqlite3-dev
- sqlite3-0-dbg (необязательно)

2. Скачиваем icu.c
 
Код:
wget www.sqlite.org/cvstrac/getfile?f=sqlite/ext/icu/icu.c -O icu.c
но 3 пункт не могу пройти...
для AMD 64
Код:
gcc -shared icu.c `icu-config --ldflags` -fPIC -o libSqliteIcu.so
у меня вылазит ошибка:
icu.c:1:1: error: expected identifier or ‘(’ before ‘<’ token
я выполняю 3 пункт из домашней директории, куда и скачала  icu.c, но не знаю как преодолеть эту ошибку..
Меня удивило содержание файла uci.c:
Код:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="/cvstrac.css" media="all">
<title>SQLite CVSTrac</title>
 
</head>
<body>
<div><!-- container div to satisfy validator -->

<div class="sqlite_header">
<a href="/index.html">
<img class="logo" src="/images/sqlite370_banner.gif" alt="SQLite Logo" border="0"></a>
<div><!-- IE hack to prevent disappearing logo--></div>
<div class="tagline">Small. Fast. Reliable.<br>Choose any three.</div>

<table width=100% style="clear:both"><tr><td>
  <div class="se"><div class="sw"><div class="ne"><div class="nw">
  <div class="toolbar">
    <a href="/about.html">About</a>
    <a href="/sitemap.html">Sitemap</a>
    <a href="/docs.html">Documentation</a>
    <a href="/download.html">Download</a>
    <a href="/copyright.html">License</a>
    <a href="/news.html">News</a>
    <a href="/cvstrac/index">Developers</a>
    <a href="/support.html">Support</a>
  </div></div></div></div></div>
</td></tr></table>
</div><div id="header">
<h1 id="title">
sqlite - Home Page
</h1>
<p id="identity">
<a href="honeypot"><notatag arg="meaningless"></a>
<a href="login?nxp=/cvstrac/index" title="Log in">Not logged in</a>
</p>
<ul id="navigation">
<li><a href="honeypot">Honeypot</a></li>
<li><a href="dir">Browse</a></li>
<li id="current"><a href="index">Home</a></li>
<li><a href="login">Login</a></li>
<li><a href="mainmenu">Main Menu</a></li>
<li><a href="reportlist">Reports</a></li>
<li><a href="search">Search</a></li>
<li><a href="timeline">Timeline</a></li>
<li><a href="wiki">Wiki</a></li>
</ul>
</div>
<div id="content">
<strong class="two">SQLite developer links:</strong>

<p><ul>
<li><a class="external" href="http://www.sqlite.org/src/tktnew">Report A Bug</a>
<li><a href="wiki">Wiki</a>
<li><a class="external" href="http://www.sqlite.org/src/timeline">Timeline</a>
<li><a class="external" href="http://www.sqlite.org/src/dir">Browse historical source files</a>
<li><a class="external" href="http://www.sqlite.org/docsrc">Documentation Sources</a>

<p><li><a href="wikiedit?p=HomePage">Edit this page</a>
   (registered developers only)</ul>
</div>
</div></body></html>
Может чего-то не хватает для выполнения пункта 3 ?
Подскажите пожалуйста!!!
« Последнее редактирование: Апрель 19, 2013, 09:59 от tiny developer » Записан
Termit
Самовар
**
Offline Offline

Сообщений: 144



Просмотр профиля WWW
« Ответ #16 : Апрель 19, 2013, 10:17 »

Это скачалась html страничка. У файла, видимо, изменился адрес.
Прикрепляю к сообщению.
Записан

Человеческая глупость дает представление о бесконечности
(с) Иоанна Хмелевская
virtual_root
Гость
« Ответ #17 : Апрель 19, 2013, 10:40 »

спасибо огромное!
Записан
virtual_root
Гость
« Ответ #18 : Апрель 19, 2013, 11:21 »

всё наконец собралось и я получила файл libSqliteIcu.so. Но теперь проблема в следующем:
пробую выше приведенный кусок кода:
Код:
/*
         После того как базу данных открыли пишем
         */
         QVariant v = _db.driver()->handle();
         if (v.isValid() && qstrcmp(v.typeName(), "sqlite3*")==0) {
           sqlite3 *handle = *static_cast<sqlite3 **>(v.data());

           if (handle != 0) { // check that it is not NULL
             int res = sqlite3_enable_load_extension(handle,1);
           }
         }
Но у меня программа падает при вызове функции sqlite3_enable_load_extension(handle,1); с ошибкой сегментирования... Я закоментировала эту функцию, программа не падает. Подскажите пожалуйста почему это может быть? И как решить эту проблему?
Записан
Termit
Самовар
**
Offline Offline

Сообщений: 144



Просмотр профиля WWW
« Ответ #19 : Апрель 19, 2013, 12:03 »

Файл libSqliteIcu.so необходимо скопировать в какой-нить каталог в котором система ищет библиотеки. Я копирую в /usr/lib/
Код
Bash
sudo cp libSqliteIcu.so /usr/lib/

либо в каталоге /etc/ld.so.conf.d/
создать файл с расширением conf и прописать в нем полный путь к библиотеке. После этого запустить
Код
Bash
sudo ldconfig


Если это не поможет покажите полный код, может в нем что-то не так.
Записан

Человеческая глупость дает представление о бесконечности
(с) Иоанна Хмелевская
virtual_root
Гость
« Ответ #20 : Апрель 19, 2013, 12:45 »

Не помогло.. По этой ссылке http://helper.program21.ru/wp-content/uploads/2013/04/SQLite_with_module_icu.zip можно скачать мой проект. Помогите пожалуйста! Подскажите что я сделала не так?
Может у меня что-то с sqlite3 не так?
Записан
Termit
Самовар
**
Offline Offline

Сообщений: 144



Просмотр профиля WWW
« Ответ #21 : Апрель 20, 2013, 11:43 »

Необходимо привести в такой вид загрузку самого расширения. Изменения выделил отступами.

Код
C++ (Qt)
QVariant v = db.driver()->handle();
if (v.isValid() && qstrcmp(v.typeName(), "sqlite3*")==0) {
 sqlite3 *handle = *static_cast<sqlite3 **>(v.data());
 if (handle != 0) { // check that it is not NULL
               int res = sqlite3_enable_load_extension(handle,1);
               if (res == SQLITE_OK)
                   sqlite3_load_extension(handle,"libSqliteIcu.so",0,0);
 }
}

Помимо этого в SQL запросе не нужно напрямую писать текст кириллицей. Лучше биндить параметры через bindValue, а сам текст делать через tr(). Ну или на крайняк использовать
Код
C++ (Qt)
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
 
Записан

Человеческая глупость дает представление о бесконечности
(с) Иоанна Хмелевская
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.261 секунд. Запросов: 22.