| 
| 
 | Вопрос # 5 739/ вопрос решён / | 
 |  Здравствуйте, товарищи!Проблема такая: использую sqlite3.dll в своем проекте.
 Возникает ошибка линковки при использовании русских путей (если папка с проектом на рабочем столе).
 
|  |   Вопрос задал: mirt.steelwater (статус: Посетитель)Вопрос отправлен: 12 ноября 2011, 14:59
 Состояние вопроса: решён, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 5; последнее сообщение — 14 ноября 2011, 13:24; участников в обсуждении: 2. 
|   | min@y™ (статус: Доктор наук), 12 ноября 2011, 15:50 [#1]:Ну чо, блин, за идиотская привычка??!!! Вас этому в школе учат, что ли? Говорить про ошибку, и тщательно скрывать информацию о ней! Прям хочется взять и уе...ть!!! Вытаскивать инфу приходится буквально плоскотижами изо рта. Ну чё за хрень???!!!111 
 Пипец... Админ, сорри, еле удержался от мата.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | min@y™ (статус: Доктор наук), 13 ноября 2011, 12:49 [#3]:А в случае НЕрусских путей всё ОК? Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | 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 (статус: Посетитель), 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 Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |