|
Вопрос # 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
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|