простая база данных
|
|
electrik | Дата: Пятница, 29.08.2014, 14:47 | Сообщение # 1 |
Полковник
Группа: Друзья
Сообщений: 180
Статус: Offline
| привет. какую выбрать базу данных для создания каталога книг? 1. база не будет работать с сетью, тоесть локальная. сетевые навороты не нужны. 2. в базе будет храниться стандартный набор полей, название книги, автор, жанр, может описание к книге, относительный путь к файлу книги. 3. всё это будет сортироваться в зависимости как выберет юзер, по названию, по жанру, по автору. на данный момент, не хотелось бы заниматься другими задачами, изучением запарных sql и т.д, охото направить внимание именно на каталогизатор. что посоветуете, простое ну и не очень медленное. ну например: считать данные, записать данные, считать поле, записать поле, поиск в базе и т.д.
Сообщение отредактировал electrik - Пятница, 29.08.2014, 14:49 |
|
| |
haav | Дата: Пятница, 29.08.2014, 17:38 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Статус: Offline
| Cheetah database: http://free-basic.ru/download.html#cheetah.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
electrik | Дата: Пятница, 29.08.2014, 22:41 | Сообщение # 3 |
Полковник
Группа: Друзья
Сообщений: 180
Статус: Offline
| да, её я уже скачал. спасибо. глядел, в общем все понятно. но думал мало ли есть специальные базы данных для таких случаев. будем тогда заморачиваться с cheetah.
|
|
| |
salexeiy | Дата: Суббота, 25.11.2017, 20:15 | Сообщение # 4 |
Лейтенант
Группа: Пользователи
Сообщений: 72
Статус: Offline
| Тоже заинтересовался простой базой данных. Скачал по ссылке библиотеку, при компиляции примеров выдаёт: cannot find -lcheetah4
Всё, вопрос снят. Догадался методом тыка dll кинуть в папку lib. А есть какая-нибудь документация по этой библиотеке?
Сообщение отредактировал salexeiy - Суббота, 25.11.2017, 20:27 |
|
| |
haav | Дата: Суббота, 25.11.2017, 21:19 | Сообщение # 5 |
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Статус: Offline
| Цитата salexeiy ( ) Догадался методом тыка dll кинуть в папку lib
dll-ки правильнее класть рядом с компилируемым файлом, потому что dll библиотеки все равно придется распространять вместе с программой.
Цитата salexeiy ( ) А есть какая-нибудь документация по этой библиотеке?
Автор начал было писать справку в chm, но уже 5 лет прошло, а воз и ныне там. В принципе по примерам можно понять при желании.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
salexeiy | Дата: Пятница, 08.12.2017, 14:57 | Сообщение # 6 |
Лейтенант
Группа: Пользователи
Сообщений: 72
Статус: Offline
| Цитата haav ( ) В принципе по примерам можно понять при желании. Да более менее разобрался. Благо автор хорошо примеры прокомментировал. Остались кое какие вопросы:
- можно ли узнать количество записей в БД?
- можно ли вывести в виде списка записи по маске? К примеру, у нас есть слово из шести букв, в котором известна только вторая буква, ну допустим, "О". Нужно вывести все слова из шести букв со второй буквой "О", к примеру, молоко, бобрик, корсет, ну и т.д.
Добавлено (08.12.2017, 14:57) --------------------------------------------- Оказалось, что cheetadatabase не дружит с Win9. Может я не прав, но при компиляции без Win9 выскакивает ошибка, что надо компилировать с опцией "fb lite" или "qb". Компилю, всё нормально. Если же подключить ещё и Win9, то уже ругается, что надо компилить только с опцией "fb". Т.е. одно другому мешает.
Отсюда вопрос. Есть ещё какая-нибудь библиотека для работы с простыми базами данных, но чтобы не тянули с собой лишние файлы (к примеру всякие там dll-ки)? К примеру, ODBC, которая наподобие Microsoft Access, использует подключалки со словами SQL. Это значит, чтобы программа заработала (скомпиленная), ей нужны будут какие то дополнительные библиотеки?
Сам не понял, что спросил
Сообщение отредактировал salexeiy - Суббота, 25.11.2017, 21:44 |
|
| |
WQ | Дата: Пятница, 08.12.2017, 15:54 | Сообщение # 7 |
Полковник
Группа: Проверенные
Сообщений: 215
Статус: Offline
| salexeiy Мне кажется, вы усложняете там, где можно обойтись простым текстовым файлом Если по этой теме http://freebasic.ucoz.com/forum/11-409-1 то несколько сот записей - здесь даже простой перебор по массиву практически не займет времени
|
|
| |
salexeiy | Дата: Пятница, 08.12.2017, 17:43 | Сообщение # 8 |
Лейтенант
Группа: Пользователи
Сообщений: 72
Статус: Offline
| Ну, текстом так текстом. Хотя мне было просто интересно с БД поработать именно со своей программой.
|
|
| |
haav | Дата: Пятница, 08.12.2017, 19:09 | Сообщение # 9 |
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Статус: Offline
| Цитата salexeiy ( ) Оказалось, что cheetadatabase не дружит с Win9. Может я не прав, но при компиляции без Win9 выскакивает ошибка, что надо компилировать с опцией "fb lite" или "qb". Компилю, всё нормально. Если же подключить ещё и Win9, то уже ругается, что надо компилить только с опцией "fb". Т.е. одно другому мешает.
Что-то ты неправильно делаешь! И cheetadatabase и Window9 компилируются с опцией "FB" без всяких проблем и вместе и врознь.
Цитата salexeiy ( ) Отсюда вопрос. Есть ещё какая-нибудь библиотека для работы с простыми базами данных, но чтобы не тянули с собой лишние файлы (к примеру всякие там dll-ки)? К примеру, ODBC, которая наподобие Microsoft Access, использует подключалки со словами SQL. Это значит, чтобы программа заработала (скомпиленная), ей нужны будут какие то дополнительные библиотеки?
Насколько я помню , для ODBC все библиотеки предустановлены в Windows. Собственно вот пример, у меня работает на win7 32-bit (на 64-bit не пробовал):
Код #Include "windows.bi" #Include Once "win\sql.bi"
#Include Once "win\sqlext.bi" #Include Once "win\odbcinst.bi" #Inclib "ODBCCP32"
Dim Shared As SQLHANDLE Ptr hEnv,hConn,hStmt
Function ODBC_CONNECT(sPath As String) As BOOL Dim As SQLRETURN h Dim As ZString*1024 ConnectString = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & sPath,Conn Dim As Integer iStrLen
h = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, @hEnv) If h = SQL_SUCCESS Or h = SQL_SUCCESS_WITH_INFO Then h = SQLSetEnvAttr(hEnv,SQL_ATTR_ODBC_VERSION, Cast(Any Ptr,SQL_OV_ODBC3),0) If h =SQL_SUCCESS Or h =SQL_SUCCESS_WITH_INFO Then h = SQLAllocHandle(SQL_HANDLE_DBC, hEnv, @hConn) If h = SQL_SUCCESS Or h = SQL_SUCCESS_WITH_INFO Then SQLDriverConnect(hConn, 0, @ConnectString, SizeOf(ConnectString), @Conn, SizeOf(Conn),Cast(Any Ptr,@iStrLen), SQL_DRIVER_COMPLETE) If h=SQL_SUCCESS Or h=SQL_SUCCESS_WITH_INFO Then Return TRUE Else SQLFreeHandle(SQL_HANDLE_DBC, hConn) SQLFreeHandle(SQL_HANDLE_ENV, hEnv) MessageBox(0, "Connection attempt failed", "ODBC Test", MB_OK+MB_ICONERROR) EndIf Else SQLFreeHandle(SQL_HANDLE_ENV, hEnv) MessageBox(0, "Connection handle allocation failed", "ODBC Test", MB_OK+MB_ICONERROR) EndIf Else SQLFreeHandle(SQL_HANDLE_ENV, hEnv) MessageBox(0, "Cannot set desired ODBC version", "ODBC Test", MB_OK+MB_ICONERROR) EndIf Else MessageBox(0, "Environment handle allocation failed", "ODBC Test", MB_OK+MB_ICONERROR) EndIf End Function
Sub ODBC_DISCONNECT() SQLDisconnect(hConn) SQLFreeHandle(SQL_HANDLE_DBC, hConn) SQLFreeHandle(SQL_HANDLE_ENV, hEnv) End Sub
Sub CREATE_DATABASE() Dim As ZString*200 szCreateTable= "CREATE TABLE Person (FirstName varchar,LastName varchar,Phone varchar)" Dim As SQLRETURN h If SQLConfigDataSource(NULL,ODBC_ADD_DSN,"Microsoft Access Driver (*.mdb)","CREATE_DB=test.mdb General") Then ODBC_CONNECT(ExePath & "\test.mdb") SQLAllocHandle(SQL_HANDLE_STMT,hConn,@hStmt) If h = SQL_SUCCESS Or h = SQL_SUCCESS_WITH_INFO Then SQLExecDirect(hStmt,@szCreateTable,Len(szCreateTable)) SQLSetStmtAttr(hStmt,SQL_ATTR_CONCURRENCY,Cast(SQLPOINTER,SQL_CONCUR_ROWVER),0) SQLSetStmtAttr(hStmt,SQL_ATTR_CURSOR_TYPE,Cast(SQLPOINTER,SQL_CURSOR_KEYSET_DRIVEN),0) Dim As ZString*100 szInsert = "INSERT INTO Person (FirstName,LastName,Phone) VALUES('Jose','Black','73-29-39')" SQLExecDirect(hStmt,@szInsert,Len(szInsert)) szInsert = "INSERT INTO Person (FirstName,LastName,Phone) VALUES('Luis','Nurth','54-63-73')" SQLExecDirect(hStmt,@szInsert,Len(szInsert)) szInsert = "INSERT INTO Person (FirstName,LastName,Phone) VALUES('Monika','Loppes','11-69-22')" SQLExecDirect(hStmt,@szInsert,Len(szInsert)) EndIf SQLFreeHandle(SQL_HANDLE_STMT,hStmt) ODBC_DISCONNECT() EndIf
End Sub
Sub FillData() Dim As SQLRETURN h Dim As Integer sGetLenght Dim As ZString*26 TheName,TheSurname,TelNo
SQLBindCol(hStmt,1,SQL_C_CHAR, @TheName, SizeOf(TheName),@sGetLenght) SQLBindCol(hStmt,2,SQL_C_CHAR, @TheSurname, SizeOf(TheSurname),@sGetLenght) SQLBindCol(hStmt,3,SQL_C_CHAR, @TelNo, SizeOf(TelNo),@sGetLenght)
While TRUE TheName = "" TheSurname = "" TelNo = "" h = SQLFetch(hStmt) If h=SQL_SUCCESS Or h=SQL_SUCCESS_WITH_INFO Then ? TheName,TheSurname,TelNo Else Exit While EndIf Wend End Sub
Function RunQuery () As Integer
Dim As SQLRETURN h Dim As ZString*50 SQLStatement = "select * from Person"
h = SQLAllocHandle(SQL_HANDLE_STMT, hConn, @hStmt) If h=SQL_SUCCESS Or h= SQL_SUCCESS_WITH_INFO Then h = SQLExecDirect(hStmt, @SQLStatement, SizeOf(SQLStatement)) If h=SQL_SUCCESS Or h= SQL_SUCCESS_WITH_INFO Then FillData() Else MessageBox(0,"Execution of SQL statement failed", "ODBC Test", MB_OK+MB_ICONERROR) EndIf SQLCloseCursor(hStmt) SQLFreeHandle(SQL_HANDLE_STMT, hStmt) Else MessageBox(0,"Statement handle allocation failed","ODBC Test", MB_OK+MB_ICONERROR) EndIf Return 0 End Function
Sub QueryProc(sName As String) Dim As SQLRETURN h Dim As Integer iStrLen Dim As ZString*1024 Conn h = SQLAllocHandle(SQL_HANDLE_STMT, hConn, @hStmt) If h=SQL_SUCCESS Or h= SQL_SUCCESS_WITH_INFO Then Conn = "select * from Person where FirstName=?" SQLBindParameter(hStmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR,25,0, StrPtr(sName),25,@iStrLen) SQLPrepare(hStmt, @Conn, SizeOf( Conn)) iStrLen = Len(sName) SQLExecute(hStmt) FillData() SQLCloseCursor(hStmt) Else MessageBox(0,"Statement handle allocation failed","ODBC Test" , MB_OK+MB_ICONERROR) EndIf SQLFreeHandle(SQL_HANDLE_STMT, hStmt) End Sub
'-----------------------------------------TEST--------------------------------------------------- CREATE_DATABASE()
If ODBC_CONNECT(ExePath & "\test.mdb")<>0 Then RunQuery () Dim As String sName Do ? Input "Input Name: ", sName ? If Len(sName) Then QueryProc(sName) EndIf Loop Until sName = "" EndIf ODBC_DISCONNECT()
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
salexeiy | Дата: Пятница, 08.12.2017, 23:05 | Сообщение # 10 |
Лейтенант
Группа: Пользователи
Сообщений: 72
Статус: Offline
| За наводку на ODBC спасибо! Посложнее будет, чем в чите. Если не пойму - да ну его тогда, сделаю обычным текстовым файлом.
По поводу ошибок - всё ниже, что происходило. Win7 x64, FB 1.05 х32 (да и на 1.06 то же самое).
Берём чистый файл и просто подключаем библиотеки window9 и cheeta4_freebasic.
Вывод без опций компилятора:
Код d:\programm\freebasic\compilier\inc\Cheetah4_FreeBasic.bi(113) warning 39(0): Redefinition of intrinsic d:\programm\freebasic\compilier\inc\Cheetah4_FreeBasic.bi(114) warning 39(0): Redefinition of intrinsic d:\programm\freebasic\compilier\inc\Cheetah4_FreeBasic.bi(292) error 148: Suffixes are only valid in -lang fb or deprecated or fblite in 'sFieldValue = Space$( dbf.nLen )' d:\programm\freebasic\compilier\inc\Cheetah4_FreeBasic.bi(294) warning 1(1): Passing scalar as pointer, at parameter 2 of MEMCPY() d:\programm\freebasic\compilier\inc\Cheetah4_FreeBasic.bi(707) error 148: Suffixes are only valid in -lang fb or deprecated or fblite in 'sKeyValue = Space$( dbf.nLen )' d:\programm\freebasic\compilier\inc\Cheetah4_FreeBasic.bi(709) warning 1(1): Passing scalar as pointer, at parameter 2 of MEMCPY() Включаем опцию fb. То же самое.
Включаем опцию fblite: Код Compile File: G:/test.bas......
"d:/programm/freebasic/compilier/fbc.exe" "G:/test.bas" -s console
d:\programm\freebasic\compilier\inc\win\GdiplusTypes.bi(58) error 146: Only valid in -lang fb, found 'declare' declare constructor () ^ d:\programm\freebasic\compilier\inc\win\GdiplusTypes.bi(59) error 146: Only valid in -lang fb, found 'declare' declare constructor (byref sz as SizeF) ^ d:\programm\freebasic\compilier\inc\win\GdiplusTypes.bi(60) error 146: Only valid in -lang fb, found 'declare' declare constructor (byval width as REAL, byval height as REAL) ^ d:\programm\freebasic\compilier\inc\win\GdiplusTypes.bi(61) error 146: Only valid in -lang fb, found 'declare' declare operator += (byref sz as SizeF) ^ d:\programm\freebasic\compilier\inc\win\GdiplusTypes.bi(62) error 146: Only valid in -lang fb, found 'declare' declare operator -= (byref sz as SizeF) ^ d:\programm\freebasic\compilier\inc\win\GdiplusTypes.bi(63) error 146: Only valid in -lang fb, found 'declare' declare function Equals (byref sz as SizeF) as BOOL ^ d:\programm\freebasic\compilier\inc\win\GdiplusTypes.bi(64) error 146: Only valid in -lang fb, found 'declare' declare function Empty () as BOOL ^ d:\programm\freebasic\compilier\inc\win\GdiplusTypes.bi(73) error 146: Only valid in -lang fb, found 'constructor' private constructor SizeF () ^ d:\programm\freebasic\compilier\inc\win\GdiplusTypes.bi(78) error 146: Only valid in -lang fb, found 'constructor' private constructor SizeF (byref sz as SizeF) ^ d:\programm\freebasic\compilier\inc\win\GdiplusTypes.bi(83) error 146: Only valid in -lang fb, found 'constructor' private constructor SizeF (byval w as REAL, byval h as REAL) ^ d:\programm\freebasic\compilier\inc\win\GdiplusTypes.bi(83) error 133: Too many errors, exiting
|
|
| |
WQ | Дата: Суббота, 09.12.2017, 00:57 | Сообщение # 11 |
Полковник
Группа: Проверенные
Сообщений: 215
Статус: Offline
| salexeiy
Space$ в строках нужно поменять на просто Space
Сообщение отредактировал WQ - Суббота, 09.12.2017, 00:58 |
|
| |
haav | Дата: Суббота, 09.12.2017, 09:20 | Сообщение # 12 |
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Статус: Offline
| Цитата WQ ( ) Space$ в строках нужно поменять на просто Space
да не надо нифига, lang "FB" нормально переваривает Space$
Цитата salexeiy ( ) По поводу ошибок - всё ниже, что происходило. Win7 x64, FB 1.05 х32 (да и на 1.06 то же самое).
Берём чистый файл и просто подключаем библиотеки window9 и cheeta4_freebasic.
Специально запустил win10 64-bit с компилятором 32-bit, все нормально компилируется. Предупреждения есть, а ошибок никаких нет. Попробуй скомпилировать в FBEDIT , может посейдон чего косячит? Или что-то ты намудрил в своей сборке компилятора.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
salexeiy | Дата: Суббота, 09.12.2017, 10:18 | Сообщение # 13 |
Лейтенант
Группа: Пользователи
Сообщений: 72
Статус: Offline
| FbEdit те же самые ошибки выдаёт. Если про сборку с посейдоном - ничего там не замудрено: как была папка с компилятором, так внутри неё всё и осталось 1:1, только поменял расположение папок к редакторам, отладчику, справке и примерам, чтобы было удобнее. Ну и посейдон добавил. Всё.
Убрал суффиксы из читы, всё заработало, правда с предупреждениями. Спасибо за подсказку!!!
Сообщение отредактировал salexeiy - Суббота, 09.12.2017, 10:23 |
|
| |
haav | Дата: Суббота, 09.12.2017, 11:09 | Сообщение # 14 |
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Статус: Offline
| Цитата salexeiy ( ) Убрал суффиксы из читы, всё заработало, правда с предупреждениями.
Серьезно? Я использую FB с версии 0.22 , запускал кучу разных исходников с суффиксами и никогда не было проблем с диаллектом Lang "FB". Мы похоже в разных параллельных вселенных находимся...
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
|