Topic: [Solved] Can not load SQLite client library «SQLite3.dll». Check your install… (Read 38261 times)
Hi,
1.04 32 bit on Win7 64 bit:
Today all of my SQLite bases projects stopped working with above error. Am not aware of having made any changes besides some installs/uninstalls (which I realize may somehow have impacted said DLL).
Which version of that DLL needs to be present where? I have 6 different copies of it all over my harddrive. I did copy every single one of them into the project dir of one of my SQLite projects and tried to set the SQLite3Connection to active — all of them failed.
Do both run- & design time look for the same DLL locations? I have an sqlite3.inc in my Lazarus tree which seems to look for 3.5.9 — most of the DLLs on my system unfortunately have no version information (only one by Apple does)….
Any pointers?
TIA,
Kai
« Last Edit: December 18, 2012, 04:00:15 am by kpeters58 »
Logged
Lazarus 2.0.4/FPC 3.0.4/Win 64
Do both run- & design time look for the same DLL locations?
No, the design time uses what lazarus loads, the run time uses what you app loads. Both can be the same though.
Since SQLite is portable, you can put it along with your application (it’s windows only, right?) and it would be preferred over system wide one. The common problem is a mix of 32-bit and 64-bit app and library (any combination of them). 32-bit app should use 32-bit dll, and so is for 64-bit.
Logged
Hm — certainly not the case here: Fresh install of 1.04 32 bit and latest precompiled 32 bit SQLite3.dll from sqlite.org inf the project directory.
Can’t seem to debug into the underlying sources (even though I rebuilt Lazarus with debug) — must be missing something.
Tried a text search for the error message across my entire lazarus directory but it only shows up in lazarus.exe — nowhere in the source…
Am really confused now..
Logged
Lazarus 2.0.4/FPC 3.0.4/Win 64
Analyzed a working setup on a different machine with procexplorer and found that Lazarus 32bit wants to load sqlite3.dll from \Windows\SysWow64\. Why it wouldn’t fall back on looking for it in the current project folder is a mystery to me….????
Seems that one of my uninstalls must have removed that DLL from there. Downloaded the latest one from sqlite.org, put it there and all appears to be well.
Logged
Lazarus 2.0.4/FPC 3.0.4/Win 64
Analyzed a working setup on a different machine with procexplorer and found that Lazarus 32bit wants to load sqlite3.dll from \Windows\SysWow64\
Now I’m confused, is it your application or Lazarus that’s having this loading problem?
Logged
Probably Lazarus. He probably doesn’t have the sqlite dll in his project source dir (AFAIR, putting it in the lazarus dir works too) — he probably only has the dll in the project output dir…
Logged
I am talking about Lazarus — and I do have a good 32bit DLL in the project source dir (right next to the project’s lpi file).
It seems that when using 32bit Lazarus on a 64 bit Windows system, one MUST have a 32 bit sqlite3.dll in \windows\syswow64. Without it, all attempts to open a connection at designtime fail (at least on my 2 Windows 7 boxes).
At run time, my application uses the DLL in its source directory as expected (verified with procexplorer)
K
Logged
Lazarus 2.0.4/FPC 3.0.4/Win 64
Sorry, I think these 2 statements contradict each other:
— sqlite3.dll together with project.lpr:
I am talking about Lazarus — and I do have a good 32bit DLL in the project source dir (right next to the project’s lpi file).
-sqlite3.dll together with project.exe
At run time, my application uses the DLL in its source directory as expected (verified with procexplorer)
*)
… unless: project.exe and project.lpr are in the same directory?
Could you confirm that (e.g. copy/paste a dir /s)?
*) the application should not use the dll in the *source* directory but the *executable*/*application*/*target* directory (however you want to call it). As said, the source & application dirs can be the same…
Logged
Yes, they are the same in this case.
Logged
Lazarus 2.0.4/FPC 3.0.4/Win 64
Ok. Thanks. Hope somebody else can reproduce this…. and if so, it’s either a bug or the docs need to be updated.
Logged
I am talking about Lazarus — and I do have a good 32bit DLL in the project source dir (right next to the project’s lpi file).
You should have the DLL in Lazarus directory.
Logged
@Leledumbo, you’re right.
@Kpeters58, sorry I steered you in the wrong direction — seems I picked up the wrong ideas. Thinking about it, it makes sense that the IDE searches its own dir for the dlls as that is the way Windows works….
AFAIR, there were some wiki pages that have the wrong instructions — I’ll update them…
Logged
Makes perfect sense and works — thanks!
Logged
Lazarus 2.0.4/FPC 3.0.4/Win 64
I know it is solved but just to put some more evidence I’m in Linux and have a similar problem:
Lazarus at designtime searches for a specific version of mysql, sqlite and that kind of libraries. And of course I don’t have just the exact version of what Lazarus expect.
My system is Ubuntu 12.04 32 bits.
I’m actually using Zeos so I can specify the Library location at designtime. So that is not a problem for me. But it happens with the lazarus SQLdb components.
I think the correct way is not to search for a specific version (major and minor numbers included) but at least only for a major version (or libsqlite.so for example). But actually it searches for some like libsqlite3.so.0.8.6
Lazarus 1.0.2 32 bits
Logged
Lazarus at designtime searches for a specific version of mysql, sqlite and that kind of libraries. And of course I don’t have just the exact version of what Lazarus expect.
Yes, so does ZeosDB search for a certain version The problem is with the mysql libraries that expect a quite detailed specific version (e.g. 5.1 not just 5.x) as documented ad nauseam.
I’m actually using Zeos so I can specify the Library location at designtime. So that is not a problem for me. But it happens with the lazarus SQLdb components.
You can specify the library name at designtime with sqldb, too. Specifying the library location with Zeos seems… interesting! Would you have some documentation link for that?
Logged
aiisakov писал(а):Я понял, что для полного освоения Linux графических приложений мало.
Чего именно не хватает?
У меня основная система Linux Mint 18.3
Пользоваться начал с Ubuntu 10.04
Дома на убунтах и минтах — домашний медиасервер-файлохранилище, ноуты, на маленьком безвентиляторном компе htpc стоит Linux Mint+KODI
Все программы для дома и хобби имеются:
почта — громоптица как и в винде была.
браузеры — firefox, chrome, chromium — как и в винде
видеопрееры — Kodi, VLC (как и винде) и куча других.
просмотр и кромсание картинок — XnView или GwenView по функционалу такие же как FastStone в винде.
Paint — стоит два варианта
Не линейный видеомонтаж — KDEnLive (если сборка и для винды)
Skype есть
Торрентокачалка Transmission
Android Studio , Lazarus — работают, использую регулярно
запись с экрана — vokoscreen
Виртуальный планетарий — Stellarium
Студии для Postgree, MySQL, SQLite3, ставил, использовал при необходимости
И т.д. и т.п. и всё это без антивируса.
Стабильная работа годами.
Для работы ставил по предложению MS в 2016 году бету MS SQL Server на Убунту. И активно использовал на нем одну базу в 22гб в течении месяца.
Для работы с MS SQL Server и написания для него утилит на Lazarus используется Win8 (с выпиленным Metro) на VirtualBox (использовал версии от 4.0 до 5.2)
Так каких приложений не хватает? Может подскажу.
aiisakov писал(а):Нужно глубоко освоить консольные команды и консольные приложения (Aptitude). С точки зрения пользователя Windows набирание команд в окне «Выполнить» это извращение не нужное обычному пользователю (не говоря уже о PowerShell). А мне это «извращение» в Linux очень нравится, поднимает твой «скилл».
Не согласен. Не нужно.
Ширпотреб (команды) легко запоминается.
Редкоиспользуемые команды у меня лично в файлик записаны или я их гуглю.
Но ~95% вещей на десктопах делается через графические оболочки и программы.
На сервере удобнее в терминале просто стрелкой вверх пролистать до нужной команды, и выполнить. Потому там да, 50% в терминале делается.
Apt зачем глубоко осваивать? и что там осваивать? Вообще Синаптик отличная графическая замена aptitude
В целом потребность в консоли в убунтовых линуксах это устаревший миф.
Моя супруга, ни разу не айтишник, пользует линукс минт с 2011года, и пару раз удивлялась, т.к. забыла, что у нее не винда.
Имхо давно ушли те времена когда пользователи в основном только в винде могли что-то делать, сейчас такой зоопарк интерфейсов и в винде и на андроидах, что пользователь еще один интерфейс сходу осваивает, тем более что ширпотребные программы зачастую кроссплатформенные и одни и те же везде стоят.
Installer: bundled sqlite3laz package causes Lazarus to crash at startup: can’t run because sqlite3.dll is missing
Original Reporter info from Mantis: seier
-
Reporter name: Christian Blackburn
Description:
SQLite is the most used database in the world. It’s on virtually every cell phone and used by a variety of programs including Firefox and Adobe Air. Unlike most databases it doesn’t leave 2-3 programs running all the time. It’s just a DLL that’s loaded by programs when it’s needed and otherwise doesn’t slow down a system at all. Therefore it’s the single most logical choice of database to bundle with Lazarus. Thankfully, Lazarus bundles a package designed to work with SQLite. However, the actual database, two measly files totally 600KB isn’t (sqlite3.dll and sqlite3.def). Installing the sqlite3laz package causes Lazarus to crash at startup and be completely unusable until the user figures out where and how to install the database manually.
Repro:
(On Windows 7 x64 Pro SP1)
- Start Lazarus 32-bit 0.9.30.2
- Click «Packages» —> «Install/Uninstall packages…»
- In the right hand list box scroll down and find «sqlite3laz 0.4»
- Double-click «sqlite3laz 0.4»
- Click [Save and rebuild IDE]
- Click [Continue]
Result:
The following error dialog appears:
|lazarus.exe — System Error| (X) The program can’t start because sqlite3.dll is missing from your computer. Try reinstalling the program to fix this problem.
[OK]
Pressing OK just closes Lazarus entirely, rendering it temporarily unusable.
Expected:
The installer should be installing sqlite3.dll and sqlite3.def (http://sqlite.org/sqlite-shell-win32-x86-3071000.zip) to C:\Lazarus (or wherever the {app} variable points) to prevent this unnecessary and scary user experience.
Additional information:
Please add the installer as a category for bugs in Lazarus. In a highly-componentized open source program like this, it is one of the most important parts.
Mantis conversion info:
- Mantis ID: 21413
- Version: 0.9.30.2
- Monitored by: » seier (Christian Blackburn)
MurCode
- Форумы
- Поиск
- О проекте
Lazarus. Запуск программы невозможен, так как на компьютере отсутствует sqlite.dll
Ghost Writer
Дата: 01.02.2019 10:25:36
Установил два пакета sqlitelaz 0.4 и sqlite3laz 0.4 посмотреть что за зверьки, среда перекомпилировалась и при запуске ошибка:
lazarus.exe — Системная ошибка
—————————
Запуск программы невозможен, так как на компьютере отсутствует sqlite.dll. Попробуйте переустановить программу.
скачал sqlite.dll с https://www.sqlite.org/download.html
кидаю в папку с лазарусом, в Windows, System32, SysWOW64 — 1х ошибка.
Куда нужно положить sqlite.dll ? и какой разрядности ?
У меня windows 64 а лазарус 32.
wadman
Дата: 01.02.2019 10:32:22
Ghost Writer |
---|
так как на компьютере отсутствует sqlite.dll |
Там sqlite3.dll?
Ghost Writer
Дата: 01.02.2019 10:42:56
wadman,
точно. пакет sqlite3laz 0.4 хотел sqlite3.dll, а sqlitelaz 0.4 sqlite.dll.
Переименовал sqlite3.dll в sqlite.dll и закинул в папку с лазарусом. Ошибка точка входа в процедуру … не найден.
Это другая библиотека ?
Пока удалил sqlitelaz 0.4. Без него работает норм.
Чем вообще эти пакеты отличаются ?
wadman
Дата: 01.02.2019 11:02:38
Ghost Writer |
---|
Чем вообще эти пакеты отличаются ? |
Требуемыми версиями sqlite.
Ghost Writer
Дата: 01.02.2019 11:18:07
wadman,
тогда в топку sqlitelaz . спасибо
Док
Дата: 01.02.2019 13:48:44
Ghost Writer |
---|
тогда в топку sqlitelaz . спасибо |
ну, спроси. Спроси еще что-нибудь
Ghost Writer
Дата: 01.02.2019 14:08:11
Док,
а ты возьми и ответь не дожидаясь вопроса
wadman
Дата: 01.02.2019 14:09:52
Ghost Writer |
---|
а ты возьми и ответь не дожидаясь вопроса |
Можно! Но нужен программист.
Док
Дата: 01.02.2019 17:19:27
wadman | ||
---|---|---|
Можно! Но нужен программист. |
без ножа режете, гады!
MaratIsk
Дата: 02.02.2019 10:57:02
вот такие советчики и не дают расти человеку
SQLite — это встраиваемая библиотека, позволяющая нам управлять базой данных в нашем приложении без сервера, типа MySQL, Oracle Database и тд. Работать с такой базой данных одновременно может несколько процессов или потоков, за исключением записи. Для записи в такую базу требуется чтобы в данный момент к ней не осуществлялось других запросов, иначе попытка записи оканчивается неудачей.
Кстати говоря, многие известные приложения используют Sqlite:
- Mozilla Firefox (начиная с версии 3.0)
- Mozilla Thunderbird
- Фреймворк Qt
- Skype
- 1С:Предприятие
- Google Chrome
- Opera
Благодаря этим приложениям, SQLite считается самой распространённой базой данных в мире.
Итак давайте попробуем создать некое приложение в котором будет использоваться база данных. Возьмем за пример «Базу сотрудников» где будет указана информация о сотрудниках некой компании, например ОАО «Devlaz.ru»
Для начала нам понадобится скачать саму библиотеку: http://www.sqlite.org/download.html
Если вы программируете под Ubuntu, Linux и других Debian-like дистрибутивы, то также требуется установить libsqlite-dev/libsqlite3-dev, не только sqlite/sqlite3.
Скачав DLL библиотеку sqlite3.dll (под windows) ее требуется закинуть в папку с Lazarus (По умолчанию это C:\Lazarus) и в папку с проектом.
После чего требуется установить пакет sqlite3laz который по умолчанию поставляется с Lazarus и пересобрать наш IDE.
С помощью sqlite3.exe скаченного с офф. сайта создаем базу данных:
Откроем CMD, перейдем в рабочий каталог sqlite3.exe, например диск С(в данной папке должен быть наш sqlite3.exe)
В командной строке пишем: sqlite3.exe devlaz.db
где devlaz.db имя вашей базы данных.
Должно появится окно приветствия:
SQLite version 3.12.2 2016-04-18 17:30:31
Enter «.help» for usage hints.
Создаем внутри таблицу с именем например devlaz, в которой будет 3 поля: Порядковый номер, ФИО и Телефон: create table devlaz(id integer primary key, fio string, tel string);
Данные в таблицу мы будем добавлять из программы поэтому завершим работу с sqlite3.exe вводом команды: .exit
В той же папке с программой sqlite3.exe должен появится наш файл db, закидываем его в папку с проектом.
Теперь перейдем к созданию приложения. Готовое приложение вы сможете скачать в конце статьи.
Для начала добавьте на форму компоненты TSQLite3DataSet с вкладки Data Access, TSQLite3Connection, TSQLQuery и TSQLTransaction с вкладки SQLdb. А для отображения данных нашей базы я добавил на форму DBGrid и TDataSource.
Теперь для того чтобы наша база загружалась с запуском программы, на FormCreate добавим следующий код:
procedure TForm1.FormCreate(Sender: TObject); begin {Параметры компонентов работы с базой Можно выставить в опциях у каждого компонента.} //******************************* SQLite3Dataset.FileName:='devlaz.db'; SQLite3Dataset.TableName:='devlaz'; DataSource.DataSet:=SQLite3Dataset; SQLite3Connection.DatabaseName:='devlaz.db'; SQLite3Connection.Transaction:=SQLTransaction; SQLTransaction.DataBase:=SQLite3Connection; SQLQuery.DataBase:=SQLite3Connection; SQLQuery.Transaction:=SQLTransaction; //******************************* try SQLite3Dataset.Open; SQLite3Connection.Connected:=True; except On E:Exception do ShowMessage('Ошибка открытия базы: '+ E.Message); end; end;
Создадим на форме 2-ве кнопки, для добавления новой записи и удаления. А также 3-и Edit’a для наших данных ID, ФИО и Тел.
Для создания новой записи впишем след. код:
procedure TForm1.ButtonAddClick(Sender: TObject); begin SQLite3Dataset.Close; with SQLQuery do begin SQL.Clear; SQL.Add('INSERT INTO devlaz(fio, tel) VALUES(:FIO,:TEL)'); ParamByName('FIO').Text:=EditFIO.Text; ParamByName('TEL').Text:=EditTEL.Text; ExecSQL; SQLTransaction.Commit; Close; end; SQLite3Dataset.Open; end;
Поле id добавится автоматически, согласно след. порядковому номеру, поэтому его мы не указываем в запросе.
Для удаления записи будем использовать ID записи:
procedure TForm1.ButtonDelClick(Sender: TObject); begin SQLite3Dataset.Close; with SQLQuery do begin SQL.Clear; SQL.Add('DELETE FROM devlaz where id=:ID'); ParamByName('ID').Text:=EditID.Text; ExecSQL; SQLTransaction.Commit; Close; end; SQLite3Dataset.Open; end;
Вы можете откорректировать ваш SQL запрос на свое усмотрение, например удаление по ФИО или номеру телефона.
Ну и напоследок представим ситуацию что нам нужно найти определенную запись по какому-то критерию, допустим это будем ID, после чего вывести фамилию по этой записи как сообщение. Для этого добавим еще одну кнопку и назначим ей след. код:
procedure TForm1.ButtonFindClick(Sender: TObject); begin with SQLQuery do begin SQL.Clear; SQL.Add('SELECT * FROM devlaz where id = :id'); ParamByName('id').Text:=EditID.Text; Open; end; ShowMessage(SQLQuery.FieldByName('fio').AsString); SQLQuery.Close; end;
Вот мы и познали азы работы с SQLite. Скачать готовый проект