[C++] + SQL - szukam czegoś, co zadziała

0

Zamierzam napisać program w C++, który będzie obsługiwał bazę danych (wykonujące podstawowe operacje typu selecty, wstawianie i usuwanie z tabel). Szukałem jakiegoś prostego API, ale ciągle trafiam na jakieś problemy.
Trafiłem na http://www.alhem.net/sql_cpp_tutorial/index.html - fajne przykłady, pomyślałem, że może to jest to, czego szukam. Tworzenie bazy w sqlite3 - też może być (na szybkości działania mi nie zależy). Postanowiłem odpalić jakiś prosty przykład, żeby zobaczyć, czy to działa:

#include "mysql.h"
#include "libmysqlwrapped.h"

int main()
{
	Database db("localhost", "root", "", "tutorialdb");
	if (!db.Connected())
	{
		printf("Database not connected - exiting\n");
		exit(-1);
	}
       return 0;
}

Oczywiście brakowało bibliotek. Ściągnąłem MySQL, zainstalowałem i przerzuciłem biblioteki do odpowiedniego katalogu. Został jeszcze http://www.alhem.net/project/mysql/index.html - utworzyłem to ustrojstwo, też przekopiowałem. Programik z tutoriala oczywiście nie chciał się skompilować - kilkadziesiąt błędów, z których wszystkie, oprócz ostatniego, dotyczą bibliotek:
<font size="1">Compiling...
example1_mysql.cpp
e:\bd\bdtest\bdtest\mysql_com.h(243) : error C2146: syntax error : missing ';' before identifier 'fd'
e:\bd\bdtest\bdtest\mysql_com.h(243) : error C2501: 'SOCKET' : missing storage-class or type specifiers
e:\bd\bdtest\bdtest\mysql_com.h(243) : error C2501: 'fd' : missing storage-class or type specifiers
e:\bd\bdtest\bdtest\mysql_com.h(417) : error C2065: 'SOCKET' : undeclared identifier
e:\bd\bdtest\bdtest\mysql_com.h(417) : error C2146: syntax error : missing ')' before identifier 's'
e:\bd\bdtest\bdtest\mysql_com.h(418) : error C2059: syntax error : ')'
c:\program files\microsoft visual studio\vc98\include\winsock.h(35) : error C2378: 'SOCKET' : redefinition; symbol cannot be overloaded with a typedef
c:\program files\microsoft visual studio\vc98\include\winsock.h(51) : error C2146: syntax error : missing ';' before identifier 'fd_array'
c:\program files\microsoft visual studio\vc98\include\winsock.h(51) : error C2501: 'SOCKET' : missing storage-class or type specifiers
c:\program files\microsoft visual studio\vc98\include\winsock.h(51) : error C2501: 'fd_array' : missing storage-class or type specifiers
c:\program files\microsoft visual studio\vc98\include\winsock.h(58) : error C2059: syntax error : ')'
c:\program files\microsoft visual studio\vc98\include\winsock.h(707) : error C2143: syntax error : missing ';' before '__stdcall'
c:\program files\microsoft visual studio\vc98\include\winsock.h(707) : error C2501: 'SOCKET' : missing storage-class or type specifiers
c:\program files\microsoft visual studio\vc98\include\winsock.h(707) : error C2146: syntax error : missing ')' before identifier 's'
c:\program files\microsoft visual studio\vc98\include\winsock.h(707) : warning C4229: anachronism used : modifiers on data are ignored
c:\program files\microsoft visual studio\vc98\include\winsock.h(707) : error C2501: 'accept' : missing storage-class or type specifiers
c:\program files\microsoft visual studio\vc98\include\winsock.h(708) : error C2059: syntax error : ')'
c:\program files\microsoft visual studio\vc98\include\winsock.h(710) : error C2146: syntax error : missing ')' before identifier 's'
c:\program files\microsoft visual studio\vc98\include\winsock.h(710) : warning C4229: anachronism used : modifiers on data are ignored
c:\program files\microsoft visual studio\vc98\include\winsock.h(710) : error C2059: syntax error : ')'
c:\program files\microsoft visual studio\vc98\include\winsock.h(712) : error C2146: syntax error : missing ')' before identifier 's'
c:\program files\microsoft visual studio\vc98\include\winsock.h(712) : warning C4229: anachronism used : modifiers on data are ignored
c:\program files\microsoft visual studio\vc98\include\winsock.h(712) : error C2059: syntax error : ')'
c:\program files\microsoft visual studio\vc98\include\winsock.h(714) : error C2146: syntax error : missing ')' before identifier 's'
c:\program files\microsoft visual studio\vc98\include\winsock.h(714) : warning C4229: anachronism used : modifiers on data are ignored
c:\program files\microsoft visual studio\vc98\include\winsock.h(714) : error C2059: syntax error : ')'
c:\program files\microsoft visual studio\vc98\include\winsock.h(716) : error C2146: syntax error : missing ')' before identifier 's'
c:\program files\microsoft visual studio\vc98\include\winsock.h(716) : warning C4229: anachronism used : modifiers on data are ignored
c:\program files\microsoft visual studio\vc98\include\winsock.h(716) : error C2059: syntax error : ')'
c:\program files\microsoft visual studio\vc98\include\winsock.h(718) : error C2146: syntax error : missing ')' before identifier 's'
c:\program files\microsoft visual studio\vc98\include\winsock.h(718) : warning C4229: anachronism used : modifiers on data are ignored
c:\program files\microsoft visual studio\vc98\include\winsock.h(719) : error C2059: syntax error : ')'
c:\program files\microsoft visual studio\vc98\include\winsock.h(721) : error C2146: syntax error : missing ')' before identifier 's'
c:\program files\microsoft visual studio\vc98\include\winsock.h(721) : warning C4229: anachronism used : modifiers on data are ignored
c:\program files\microsoft visual studio\vc98\include\winsock.h(722) : error C2059: syntax error : ')'
c:\program files\microsoft visual studio\vc98\include\winsock.h(724) : error C2146: syntax error : missing ')' before identifier 's'
c:\program files\microsoft visual studio\vc98\include\winsock.h(724) : warning C4229: anachronism used : modifiers on data are ignored
c:\program files\microsoft visual studio\vc98\include\winsock.h(725) : error C2059: syntax error : ')'
c:\program files\microsoft visual studio\vc98\include\winsock.h(735) : error C2146: syntax error : missing ')' before identifier 's'
c:\program files\microsoft visual studio\vc98\include\winsock.h(735) : warning C4229: anachronism used : modifiers on data are ignored
c:\program files\microsoft visual studio\vc98\include\winsock.h(735) : error C2059: syntax error : ')'
c:\program files\microsoft visual studio\vc98\include\winsock.h(741) : error C2146: syntax error : missing ')' before identifier 's'
c:\program files\microsoft visual studio\vc98\include\winsock.h(741) : warning C4229: anachronism used : modifiers on data are ignored
c:\program files\microsoft visual studio\vc98\include\winsock.h(741) : error C2059: syntax error : ')'
c:\program files\microsoft visual studio\vc98\include\winsock.h(743) : error C2146: syntax error : missing ')' before identifier 's'
c:\program files\microsoft visual studio\vc98\include\winsock.h(743) : warning C4229: anachronism used : modifiers on data are ignored
c:\program files\microsoft visual studio\vc98\include\winsock.h(744) : error C2059: syntax error : ')'
c:\program files\microsoft visual studio\vc98\include\winsock.h(749) : error C2146: syntax error : missing ')' before identifier 's'
c:\program files\microsoft visual studio\vc98\include\winsock.h(749) : warning C4229: anachronism used : modifiers on data are ignored
c:\program files\microsoft visual studio\vc98\include\winsock.h(749) : error C2059: syntax error : ')'
c:\program files\microsoft visual studio\vc98\include\winsock.h(751) : error C2146: syntax error : missing ')' before identifier 's'
c:\program files\microsoft visual studio\vc98\include\winsock.h(751) : warning C4229: anachronism used : modifiers on data are ignored
c:\program files\microsoft visual studio\vc98\include\winsock.h(752) : error C2059: syntax error : ')'
c:\program files\microsoft visual studio\vc98\include\winsock.h(754) : error C2146: syntax error : missing ')' before identifier 's'
c:\program files\microsoft visual studio\vc98\include\winsock.h(754) : warning C4229: anachronism used : modifiers on data are ignored
c:\program files\microsoft visual studio\vc98\include\winsock.h(755) : error C2059: syntax error : ')'
c:\program files\microsoft visual studio\vc98\include\winsock.h(757) : error C2146: syntax error : missing ')' before identifier 's'
c:\program files\microsoft visual studio\vc98\include\winsock.h(757) : warning C4229: anachronism used : modifiers on data are ignored
c:\program files\microsoft visual studio\vc98\include\winsock.h(757) : error C2059: syntax error : ')'
c:\program files\microsoft visual studio\vc98\include\winsock.h(759) : error C2143: syntax error : missing ';' before '__stdcall'
c:\program files\microsoft visual studio\vc98\include\winsock.h(759) : error C2501: 'SOCKET' : missing storage-class or type specifiers
c:\program files\microsoft visual studio\vc98\include\winsock.h(759) : error C2086: 'SOCKET' : redefinition
c:\program files\microsoft visual studio\vc98\include\winsock.h(824) : error C2146: syntax error : missing ')' before identifier 's'
c:\program files\microsoft visual studio\vc98\include\winsock.h(824) : warning C4229: anachronism used : modifiers on data are ignored
c:\program files\microsoft visual studio\vc98\include\winsock.h(825) : error C2059: syntax error : ')'
c:\program files\microsoft visual studio\vc98\include\winsock.h(827) : error C2146: syntax error : missing ')' before identifier 's'
c:\program files\microsoft visual studio\vc98\include\winsock.h(827) : warning C4229: anachronism used : modifiers on data are ignored
c:\program files\microsoft visual studio\vc98\include\winsock.h(827) : error C2059: syntax error : ')'
c:\program files\microsoft visual studio\vc98\include\winsock.h(843) : error C2146: syntax error : missing ')' before identifier 'hSocket'
c:\program files\microsoft visual studio\vc98\include\winsock.h(843) : warning C4229: anachronism used : modifiers on data are ignored
c:\program files\microsoft visual studio\vc98\include\winsock.h(850) : error C2059: syntax error : ')'
c:\program files\microsoft visual studio\vc98\include\winsock.h(855) : error C2146: syntax error : missing ')' before identifier 'sListenSocket'
c:\program files\microsoft visual studio\vc98\include\winsock.h(855) : warning C4229: anachronism used : modifiers on data are ignored
c:\program files\microsoft visual studio\vc98\include\winsock.h(863) : error C2059: syntax error : ')'
e:\bd\bdtest\bdtest\libmysqlwrapped.h(273) : error C2143: syntax error : missing ';' before ''
e:\bd\bdtest\bdtest\libmysqlwrapped.h(273) : error C2501: 'sqlite3' : missing storage-class or type specifiers
e:\bd\bdtest\bdtest\libmysqlwrapped.h(273) : error C2501: 'db' : missing storage-class or type specifiers
e:\bd\bdtest\bdtest\libmysqlwrapped.h(419) : error C2143: syntax error : missing ';' before '
'
e:\bd\bdtest\bdtest\libmysqlwrapped.h(419) : error C2501: 'sqlite3_stmt' : missing storage-class or type specifiers
e:\bd\bdtest\bdtest\libmysqlwrapped.h(419) : error C2501: 'get_result' : missing storage-class or type specifiers
e:\bd\bdtest\bdtest\libmysqlwrapped.h(427) : error C2146: syntax error : missing ';' before identifier 'insert_id'
e:\bd\bdtest\bdtest\libmysqlwrapped.h(427) : error C2501: 'sqlite_int64' : missing storage-class or type specifiers
e:\bd\bdtest\bdtest\libmysqlwrapped.h(500) : error C2143: syntax error : missing ';' before '*'
e:\bd\bdtest\bdtest\libmysqlwrapped.h(500) : error C2501: 'sqlite3_stmt' : missing storage-class or type specifiers
e:\bd\bdtest\bdtest\libmysqlwrapped.h(500) : error C2501: 'res' : missing storage-class or type specifiers
e:\bd\bdtest\bdtest\example1_mysql.cpp(6) : error C2661: 'Database::Database' : no overloaded function takes 4 parameters
Error executing cl.exe.</span>
Jest na to jakiś sposób?

0

Chyba po drodze trochę namieszałem, bo na stronce są zarówno tutoriale pod MySQL jak i sqlite, dlatego musiałem zrobić trochę porządków. Problem jednak nadal występuje, jednak tym razem jest coś innego. Przykładowy kod:

#include "sqlite3.h"
#include "libsqlitewrapped.h"

int main()
{
	Database db("tutorial.db");
	if (!db.Connected())
	{
		printf("Database not connected - exiting\n");
		exit(-1);
	}
}

Kompiluje się ok - pod VC++6 i 2008, ale już nie chce się linkować:

Linking...
test3.obj : error LNK2019: unresolved external symbol "public: virtual __thiscall Database::~Database(void)" (??1Database@@UAE@XZ) referenced in function _main
test3.obj : error LNK2019: unresolved external symbol "public: bool __thiscall Database::Connected(void)" (?Connected@Database@@QAE_NXZ) referenced in function _main
test3.obj : error LNK2019: unresolved external symbol "public: __thiscall Database::Database(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class IError *)" (??0Database@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PAVIError@@@Z) referenced in function _main
E:\bd\test3\Debug\test3.exe : fatal error LNK1120: 3 unresolved externals
0

krotka sprawa: czy poza dorzuceniem include'ow dopiales do swojego projektu takze lib'y ? (projekt->properties->linker->additional modules)

0

Jeśli chodzi o liby, to znalazłem jedynie na http://www.masm32.com/board/index.php?PHPSESSID=1ec7aebf6132df1fcadeb84625021276&topic=1891.15 kilka paczek - w nich m.in. sqlite3.lib. Wrzuciłem tu: http://img232.imageshack.us/img232/1148/clipboard03yc7.gif Błąd dalej występuje; nie używam prekompilowanych nagłówków. Na http://www.sqlite.org/download.html nie znalazłem niczego, co byłoby libem.

0

Brakuje sqlitewrapped. Z tego co widzę na stronce jest dostępny tylko source. Albo dołącz do projektu jego cpp'ki, albo skompiluj osobno tą bibliotekę.

0
adf88 napisał(a)

Brakuje sqlitewrapped. Z tego co widzę na stronce jest dostępny tylko source. Albo dołącz do projektu jego cpp'ki, albo skompiluj osobno tą bibliotekę.

Tj. wszystkie cpp z sqlitewrapped-1.3? Szczerze mówiąc, nie bardzo wiem, gdzie - dodatkowe cpp wrzucałem tylko jako pliki nagłówkowe, bo nie miałem wcześniej potrzeby robienia tego gdzie indziej.
Jeśli chodzi o kompilację - odpaliłem sqlite3test.cpp - kompilacja ok, ale linkowanie kończy się listą błędów.

0
sprzatacz napisał(a)

Tj. wszystkie cpp z sqlitewrapped-1.3? Szczerze mówiąc, nie bardzo wiem, gdzie
menu "Project->Add File"

1 użytkowników online, w tym zalogowanych: 0, gości: 1