sqlite3.dll in den C++Builder 6 einbinden
-
Hallo ich würde gerne die sqlite3.dll
in den C++Builder 6 einbinden und damit
eine Lokale *.db3 Datenbank ansprechen.
Wie muß ich da vorgehen?#include "sqlite.h"
#include "CppSQLite.h"ist klar.
Aber wie binde ich die SQLITE.DLL und die SQLITE.LIB ein?
Habe vom Internet die Dateien
CppSQLite.cpp
CppSQLite.h
SQLITE.DEF
SQLITE.DLL
SQLITE.EXP
sqlite.h
SQLITE.LIBVielen Dank
-
Schade das keiner einen Rat hat.
Hab es jetzt mit der sqlite.c gelöst
Jetzt noch eine Frage wegen der Performance
Wenn ich eine Tabelle aus einer Datenbank auslese.
Soll ich alle Datensätze in ein 2Dimensionales Array schreiben.
Änderungen im Array speichern und wenn ich das Programm
beende alles in die Tabelle zurückschreiben?Oder bei jeder Veränderung der Tabelle gleich mit einem
Insert oder Update in der Datenbank darauf reagieren?Oder noch eine andere Lösung?
Wie handhabt ihr das?
Was ist schneller?
Vielen Dank
-
Ich hät jetzt selbe Frage zur DLL. Nutze selbst BCB5. Gibts ne Möglichkeit das Projekt ohne DLL zu compilieren und weiterzugeben?
Falls nicht, wie binde ich die DLL in mein Projekt ein? Wäre echt lieb wenn da wer weiterhelfen könnte.Edit: Auf http://www.aducom.com/sqlite/download.htm hat mans scheinbar hinbekommen. Für Delphi und eine ältere Version. Sollte also machbar sein, nur wie?!
-
Wieso dll? Die C-API für sqlite3 gibt es komplett im Sourcecode. Da musst du nur eine statische lib erzeugen und dann dazulinken. Dann brauchst du keine dll.
Wenn du mit der dll arbeitest, wäre es vernünftig eine Installation für dein Programm zu basteln (z.Bsp. mit InnoSetup) welche die dll mitkopiert.
-
Braunstein schrieb:
Da musst du nur eine statische lib erzeugen und dann dazulinken.
Das klingt grossartig! Kennst zufällig eine Seite die erklärt wie man statische libs erzeugt und in BCB5 einbindet? Habe jetzt ne Weile per google gesucht, aber nur allgemeine Texte gefunden, die leider nichts erklären. Danke!
-
Erzeuge ein neues Projekt (Typ statische Bibliothek), füge die sqlite3.c hinzu, kompiliere das Ganze und fertig.
-
Das Compilieren mit sqlite-source-3_5_6.zip klappte garnicht, da waren richtig viele Fehler und fehlende Dateien (#include "tcl.h" Datei nicht vorhanden, existiert auch nicht in der Source). Ich habs über sqlite-amalgamation-3_5_6.zip erstellt. Ich glaube aber nicht das dies wirklich erfolgreich war. Die DLL ist magere 45KB statt über 450KB klein und die lib Datei scherzhafte 84 Byte. Oder soll das so sein?
Man muss allerdings sehr viele Warnungen deaktivieren, damit er das auch compiliert. Mich wundert auch das soviel GOTO verwendet wurd, ich dachte das garnicht mehr erlaubt in C++. Aber da es in VCL Hilfe drinsteht, wohl doch.
Ich bin dabei so vorgegangen, wie hier für CBuilder beschrieben: http://www.sqlite.org/cvstrac/wiki?p=HowToCompile (mittig)
So einfach isses wohl doch nicht. Wäre über bissle Unterstützung wirklich erfreut, vor allem was ich mit der dann gewonnenen LIB anstellen muss.
-
Ich habe sqlite-source-3_5_6.zip nun auch compiliert bekommen, indem ich ein #ifndef NO_TCL ganz oben ind tclsqlite.c reingesetzt habe. Dann ging er durch und hat auch hier eine 45KB kleine DLL und 84Byte grosse LIB erstellt. Also muss das wohl so sein. Verstehe dann aber nicht warum die DLL die man sich seperat laden kann 421KB gross ist.
Ich habe die DLL und LIB in mein Projekt kopiert und die LIB in das Projekt hinzugefügt. Die Fehlermeldung:
[Linker Fehler] Unresolved external '_sqlite3_open' referenced from \SQLITE\SQLITE3 TEST\UNIT1.OBJ
bleibt aber weiterhin, also mach ich immernoch etwas grundlegendes Flasch. Aber was?
-
Hast du schon die sqlite3.h in dein Projekt included?
-
Steht ganz oben, sonst würde er auch melden das er die Funktionen nicht kennt.
-
Hier hatte mal VergissEs eine Wrapper Klasse reingestellt. Der Umgang damit ist eigentlich Narrensicher.
http://www.c-plusplus.net/forum/viewtopic-var-t-is-185732-and-highlight-is-sqlite.html
-
Ändert ja nix daran, das ich SQLite ohne DLL einbinden möchte.
Die Header ist included, die LIB ist drin und Compiler meldet keinerlei Fehler, erst am Schluss die Referenzen.
-
UUpps.
Da gehörte das auch noch mit zu:
-
@~SQLite
Du hast doch schon wieder ein dll Projekt erzeugt. Du solltest eine (statische) Bibliothek erzeugen.
-
DAAAAAAAAAAANKKKKKKKEEEEEEEEEEE!!
Der entscheidende Faktor war wohl
Jetzt müssen wir noch die Seitengröße mit 64 festlegen das geht unter den Projektoptionen
Was auch immer das bedeutet. Bei mir stand der Wert "0x010", sowie Haken bei Dynamische RTL bei BCB5 deaktiveren.
Nun ist die LIB auch 1.53MB gross und funktioniert.
Die fehlende Funktion habe ich mal hier hinzugefügt, falls es bessere (passendere) Wege gibt, kann man ja diese mal benennen
bool sqlite_db::FileIsReadOnly(std::string FileName) { int Attrs = FileGetAttr(FileName.c_str()); if (Attrs & faReadOnly) { return true; } return false; }
-
Ich glaub mich tritt ein Elch. Ich habe keine Ahnung wieso das gestern geklappt hat (wenn es das wirklich hat)
- Ich lade sqlite-source-3_5_6.zip
- Entpacke es in einen sqlite3 Ordner
- Öffne BCB5 und starte neue Bibliothek
- Speicher Projekt als sqlite3.bpr
- Füge alle C Dateien bis auf tclsqlite.c ins Projekt hinzu
- Setze Seitengröße auf 0x0040 (64)
- Deaktivere dynamische RTL verwenden
- Compiliere...Resultat sind Fehler ohne Ende.
Ich habe das jetzt 5 mal komplett von 0 probiert.[C++ Fehler] sqliteInt.h(1883): E2141 Fehler in der Deklarationssyntax
[C++ Warnung] loadext.c(31): W8017 Redefinition von 'sqlite3_column_database_name' ist nicht identisch.
[C++ Warnung] loadext.c(32): W8017 Redefinition von 'sqlite3_column_database_name16' ist nicht identisch.
[C++ Warnung] loadext.c(33): W8017 Redefinition von 'sqlite3_column_table_name' ist nicht identisch.
[C++ Warnung] loadext.c(34): W8017 Redefinition von 'sqlite3_column_table_name16' ist nicht identisch.
[C++ Warnung] loadext.c(35): W8017 Redefinition von 'sqlite3_column_origin_name' ist nicht identisch.
[C++ Warnung] loadext.c(36): W8017 Redefinition von 'sqlite3_column_origin_name16' ist nicht identisch.
[C++ Warnung] loadext.c(37): W8017 Redefinition von 'sqlite3_table_column_metadata' ist nicht identisch.
[C++ Fehler] loadext.c(123): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich
[C++ Fehler] loadext.c(124): E2238 Bezeichner 'sqlite3_api' mehrfach deklariert
[C++ Fehler] sqliteInt.h(1883): E2344 'sqlite3_api' bereits deklariert
[C++ Fehler] loadext.c(124): E2356 Redeklaration von 'sqlite3_api' mit anderem Typ
[C++ Fehler] sqliteInt.h(1883): E2344 'sqlite3_api' bereits deklariert
[C++ Fehler] loadext.c(124): E2141 Fehler in der Deklarationssyntax
[C++ Fehler] loadext.c(295): E2190 Unerwartetes }
[C++ Fehler] loadext.c(295): E2190 Unerwartetes }
[C++ Fehler] loadext.c(329): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich
[C++ Fehler] loadext.c(343): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich
[C++ Fehler] loadext.c(356): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich
[C++ Fehler] loadext.c(365): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich
[C++ Fehler] loadext.c(367): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich
[C++ Fehler] loadext.c(381): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich
[C++ Fehler] loadext.c(394): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich
[C++ Fehler] loadext.c(396): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich
[C++ Fehler] loadext.c(410): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich
[C++ Fehler] loadext.c(418): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich
[C++ Fehler] loadext.c(424): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich
[C++ Fehler] loadext.c(448): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich
[C++ Fehler] loadext.c(449): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich
[C++ Fehler] loadext.c(456): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich
[C++ Fehler] loadext.c(465): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich
[C++ Fehler] loadext.c(474): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich
[C++ Fehler] loadext.c(474): E2228 Zu viele Fehlermeldungen oder WarnungenKann mir bitte irgendwer einen Tipp geben was ich falsch mache?!
Compilerwarnungen 8004,8008 und 8012 habe ich schon auskommentiert.
-
Hallo,
Warum nimmst du eigentlich nicht die sqlite-amalgamation-3_5_6.zip? Da hast du nur eine c-Datei.
-
Ich mach den exakten selben Weg und erhalte zu viele Warnungen. Deaktivere ein paar über Compiler Einstellung bis er mir letztendlich eine LIB rausspuckt die 846KB gross ist. Diese funktioniert auch tadellos in meinem Testprojekt soweit.
Problem hierbei ist jedoch, das ich gern die Kryptmöglichkeiten von wxsqlite3 zukünftig nutzen möchte und dieser eine veränderte pager.c ersetzt. Also muss ich schon die komplette Source compilieren können. Ich verstehe garnicht wieso das gestern ging und mir eine 1.53MB LIB ausspuckte. Ich werd noch irre im Kopp.
Kann vielleicht jemand http://www.sqlite.org/sqlite-source-3_5_6.zip laden und versuchen ne LIB daraus zu erstellen? Wäre echt ne Hilfe und dauert keine Minute
Fehlen eventuell Compiler Einstellungen?
-
Ich habs gerade mal gemacht. Es compiliert bei mir relativ problemlos durch (viele Warnungen). Die lib ist ca. 1.5MB groß.
-
Wie muss man das jetzt verstehen? Du hast die sqlite-source-3_5_6.zip (nicht sqlite-amalgamation-3_5_6.zip) erfolgreich zur LIB compiliert? Wie gross issn die geworden?
Unter BCB5? Wenn jetzt keine geheimen Compiler Einstellungen gemacht hast, müsste das ja bedeuten das der BCB5 nen Bug hat. Anders kann ichs mir nicht erklären.