Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 739

/ вопрос решён /

Здравствуйте, товарищи!
Проблема такая: использую sqlite3.dll в своем проекте.
Возникает ошибка линковки при использовании русских путей (если папка с проектом на рабочем столе).

mirt.steelwater Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: mirt.steelwater (статус: Посетитель)
Вопрос отправлен: 12 ноября 2011, 14:59
Состояние вопроса: решён, ответов: 0.


Мини-форум вопроса

Всего сообщений: 5; последнее сообщение — 14 ноября 2011, 13:24; участников в обсуждении: 2.
min@y™

min@y™ (статус: Доктор наук), 12 ноября 2011, 15:50 [#1]:

Ну чо, блин, за идиотская привычка??!!! Вас этому в школе учат, что ли? Говорить про ошибку, и тщательно скрывать информацию о ней! Прям хочется взять и уе...ть!!! Вытаскивать инфу приходится буквально плоскотижами изо рта. Ну чё за хрень???!!!111

Пипец... Админ, сорри, еле удержался от мата.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
mirt.steelwater

mirt.steelwater (статус: Посетитель), 13 ноября 2011, 12:43 [#2]:

ну и к чему все это?
кажется я ясно выразился - ошибка открытия файла БД движком SQLite, если этот файл лежит по кириллическому пути.
ошибка воспроизводится элементарно, так к чему эти крики?
картинки:
http://s02.radikal.ru/i175/1111/4c/e3beb81fe3bf.jpg
http://s017.radikal.ru/i444/1111/3a/57537f82a6db.jpg
как видим, исключение вызывается непосредственно в движке sqlite, а не в интерфейсном модуле.
Ⓐ свобода сопротивление солидарность
min@y™

min@y™ (статус: Доктор наук), 13 ноября 2011, 12:49 [#3]:

А в случае НЕрусских путей всё ОК?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
mirt.steelwater

mirt.steelwater (статус: Посетитель), 14 ноября 2011, 12:59 [#4]:

ДА! Подозреваю, что библиотека sqlite3.dll не понимает передаваемый ей русский путь.
На второй картинке видно, что передается PChar (FileName).
Возможно мне стоит передавать PWideChar (FileName) ?
Версия BDS 2006, без поддержки юникода.

Вот нашел обсуждение по той же проблеме:
http://www.sql.ru/forum/actualthread.aspx?tid=753797
Но там решили проблему включение файлов исходников sqlite3 в проект. На delphi этот вариант не подходит.
Как открывать файл БД sqlite через Handle файла - я не понял из того, что там писали.
Ⓐ свобода сопротивление солидарность
mirt.steelwater

mirt.steelwater (статус: Посетитель), 14 ноября 2011, 13:24 [#5]:

Нашел! http://www.delphimaster.net/view/15-1223635750

Исправил модули:

sqlite3dll.pas :
function  sqlite3_open(filename: PUTF8String; var db: pointer): integer; cdecl; external 'sqlite3.dll';

SQLite3.pas :
function SQLite3_Open(dbname: PUTF8String; var db: TSqliteDB): integer; cdecl; external 'sqlite3.dll' name
'sqlite3_open';

SQLiteTable3.pas :
constructor TSQLiteDatabase.Create(const FileName: string);
var
  Msg: pchar;
  iResult: integer;
begin
  inherited Create;
 
  self.fInTrans := False;
 
  Msg := nil;
  try
    iResult := SQLite3_Open( PUTF8String ( AnsiToUtf8 (FileName) ), Fdb );
 
    if iResult <> SQLITE_OK then
      if Assigned(Fdb) then
      begin
        Msg := Sqlite3_ErrMsg(Fdb);
        raise ESqliteException.CreateFmt('Failed to open database "%s" : %s',
          [FileName, Msg]);
      end
      else
        raise ESqliteException.CreateFmt('Failed to open database "%s" : unknown error',
          [FileName]);
 
    //set a few configs
    self.ExecSQL('PRAGMA SYNCHRONOUS=NORMAL;');
//    self.ExecSQL('PRAGMA full_column_names = 1;');
    self.ExecSQL('PRAGMA temp_store = MEMORY;');
 
  finally
    if Assigned(Msg) then
      SQLite3_Free(Msg);
  end;
 
end;
Ⓐ свобода сопротивление солидарность

14 ноября 2011, 13:27: Статус вопроса изменён на решённый (изменил автор вопроса — mirt.steelwater): Камрады админы, поменяйте в статье об SQLite соответствующие модули, чтобы люди не отлавливались на русских путях к файлам БД SQLite

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 31 марта 2023, 05:57
Выполнено за 0.03 сек.
Рейтинг@Mail.ru