Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Проблема с SQLite Delphi в 2010


Автор: AntonPavlov 9.7.2010, 18:28
Такая проблема с SQLite в Delphi 2010. 
Для подключения к БД sqlite использую компоненты Zeos последней версии (правда версия альфа, но более ранние версии под дельфу 2010 не идут). Проблема в том, что когда подключаешься к базе (ставишь у Zconnection Connected в True), вылетает ошибка Library routine called out of sequence. Тоже самое если и проделать это в рантайме. Может кто в курсе в чем дело?
P.S. Можно предложить другие компоненты, но не платные (покупать не буду, а варез непойдет).

Автор: Frees 9.7.2010, 21:17
может sqlite.dll не та?

Добавлено через 25 секунд
или в Zconnection не тот тип БД выбран

Автор: AntonPavlov 9.7.2010, 22:06
перепробовал кучу разных длл - всеравно не работает....
и все правильно Zconnection выбрано.... 

Автор: Keeper89 10.7.2010, 00:03
Может это?
Цитата

К существенным проблемам можно отнести выполнение нескольких предложений
(statements) в рамках одного соединения (connection) в разных потоках
(threads). Приводит к ошибке "library routine called out of sequence" или
повреждениям в базе. Возможный обход - использование, например, thread-safe
ODBC драйвера - см. http://www.ch-werner.de/sqliteodbc/

http://www.sql.ru/forum/actualthread.aspx?tid=382600&pg=-1#3648203

Автор: Демо 10.7.2010, 13:52
Чем обусловлено использование Zeos?

Автор: AnalogXP 10.7.2010, 14:51
С Zeos я тоже намучался - то работает, то нет. Поэтому пришлось отказаться в пользу http://www.itwriting.com/blog/articles/a-simple-delphi-wrapper-for-sqlite-3/. 
Доволен  smile 

Автор: AntonPavlov 11.7.2010, 00:05
Чего то не врубаюсь я в ту штуку.... smile 

Автор: Демо 11.7.2010, 00:39
Цитата(AntonPavlov @  11.7.2010,  00:05 Найти цитируемый пост)
Чего то не врубаюсь я в ту штуку.... 


Так и не ответил на вопрос.
В зависимости от ответа и решение - подойдёт ли тебе решение 
Цитата(AnalogXP @  10.7.2010,  14:51 Найти цитируемый пост)
Поэтому пришлось отказаться в пользу этого. 


Добавлено @ 00:43
Цитата(AntonPavlov @  11.7.2010,  00:05 Найти цитируемый пост)
Чего то не врубаюсь я в ту штуку.... 


Код

//открыть БД
procedure DBOpen(FilePath: String);
begin
  DBClose;
  DB := TSQLiteDatabase.Create(FilePath);
end;



Код

//Создать таблицу
procedure DBClearTable(const TableName: String);
begin
  DB.ExecSQL('DELETE FROM '+TableName);
end;



Код


function DBSelect(const Query: String): TSQliteTable;
begin
  try
   Result := DB.GetTable(Query);
  except
    Result := nil;
  end;
end;

var
  t: TSQLiteTable;
begin
  t := DBSelect('SELECT * FROM U WHERE inn='+QStr(Inn));



Код

procedure DBBeginTran;
begin
  DB.BeginTransaction;
end;

procedure DBCommit;
begin
  DB.Commit;
end;

procedure DBRollBack;
begin
  DB.Rollback;
end;

procedure DBClose;
begin
  FreeAndNil(DB);
end;



Код


function QStr(const Src: String): String;
begin
  Result := '"'+StringReplace(Src,'"','''',[rfReplaceAll])+'"';
end;

procedure InsertRecordOrg(Info: PCust); overload;
var
  s: AnsiString;
begin
  s := 'INSERT INTO Org ('+
        'OrgId,'+
        'OrgName,'+
        'Inn,'+
        'Kpp,'+
        'LastUpdate,'+
        'IsNew) VALUES ('+
        QStr(Info^.Id)+','+
        QStr(Info^.Name)+','+
        QStr(Info^.Inn)+','+
        QStr(Info^.Kpp)+','+
        QStr(FormatDateTime('dd.mm.yyyy',Now))+','+
        '1'+
        ')';
        DB.ExecSQL(s);
end;




Код

  t := uDB.DBSelect(s);
  try
    for i := 0 to t.Count-1 do
    begin
      New(p);
      p^.purchId := t.FieldByName['purchId'];
      p^.PurchName := t.FieldByName['purchName'];
      p^.CId := t.FieldByName['CId'];
      p^.purchAmount := t.FieldByName['purchAmount'];
      p^.CustName := t.FieldByName['CustName'];
      p^.purchDescription := t.FieldByName['purchDescription'];
      p^.AuctionBeginDate := t.FieldByName['AuctionBeginDate'];
      p^.AuctionEndDate := t.FieldByName['AuctionEndDate'];
      p^.DateSort := t.FieldByName['DateSort'];
      p^.StateName := t.FieldByName['purchStateName'];
      p^.Protocol2Msg := t.FieldByName['Protocol2Msg'];
      p^.RowHigh := 0;
      ListA.AddObject(p^.purchId,Pointer(p));
      t.Next;
    end;



Вот куски примеров...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)