FreeBasic
Главная
Вход
Регистрация
Пятница, 29.03.2024, 00:57Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Freebasic » Вопросы по языку FreeBasic » простая база данных (обсуждение не сложных баз данных)
простая база данных
electrikДата: Пятница, 29.08.2014, 14:47 | Сообщение # 1
Полковник
Группа: Друзья
Сообщений: 180
Репутация: 3
Статус: Offline
привет. какую выбрать базу данных для создания каталога книг?
1. база не будет работать с сетью, тоесть локальная. сетевые навороты не нужны.
2. в базе будет храниться стандартный набор полей, название книги, автор, жанр, может описание к книге, относительный путь к файлу книги.
3. всё это будет сортироваться в зависимости как выберет юзер, по названию, по жанру, по автору.
на данный момент, не хотелось бы заниматься другими задачами, изучением запарных sql и т.д, охото направить внимание именно на каталогизатор. что посоветуете, простое ну и не очень медленное. ну например: считать данные, записать данные, считать поле, записать поле, поиск в базе и т.д.


Сообщение отредактировал electrik - Пятница, 29.08.2014, 14:49
 
haavДата: Пятница, 29.08.2014, 17:38 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Cheetah database: http://free-basic.ru/download.html#cheetah.

Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
electrikДата: Пятница, 29.08.2014, 22:41 | Сообщение # 3
Полковник
Группа: Друзья
Сообщений: 180
Репутация: 3
Статус: Offline
да, её я уже скачал. спасибо. глядел, в общем все понятно. но думал мало ли есть специальные базы данных для таких случаев. будем тогда заморачиваться с cheetah.
 
salexeiyДата: Суббота, 25.11.2017, 20:15 | Сообщение # 4
Лейтенант
Группа: Пользователи
Сообщений: 72
Репутация: 2
Статус: Offline
Тоже заинтересовался простой базой данных. Скачал по ссылке библиотеку, при компиляции примеров выдаёт: cannot find -lcheetah4

Всё, вопрос снят. Догадался методом тыка dll кинуть в папку lib. А есть какая-нибудь документация по этой библиотеке?


Сообщение отредактировал salexeiy - Суббота, 25.11.2017, 20:27
 
haavДата: Суббота, 25.11.2017, 21:19 | Сообщение # 5
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Цитата salexeiy ()
Догадался методом тыка dll кинуть в папку lib


dll-ки правильнее класть рядом с компилируемым файлом, потому что dll библиотеки все равно придется распространять вместе с программой.

Цитата salexeiy ()
А есть какая-нибудь документация по этой библиотеке?


Автор начал было писать справку в chm, но уже 5 лет прошло, а воз и ныне там. В принципе по примерам можно понять при желании.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
salexeiyДата: Пятница, 08.12.2017, 14:57 | Сообщение # 6
Лейтенант
Группа: Пользователи
Сообщений: 72
Репутация: 2
Статус: Offline
Цитата haav ()
В принципе по примерам можно понять при желании.
Да более менее разобрался. Благо автор хорошо примеры прокомментировал. Остались кое какие вопросы:
  • можно ли узнать количество записей в БД?
  • можно ли вывести в виде списка записи по маске? К примеру, у нас есть слово из шести букв, в котором известна только вторая буква, ну допустим, "О". Нужно вывести все слова из шести букв со второй буквой "О", к примеру, молоко, бобрик, корсет, ну и т.д.

Добавлено (08.12.2017, 14:57)
---------------------------------------------
Оказалось, что cheetadatabase не дружит с Win9. Может я не прав, но при компиляции без Win9 выскакивает ошибка, что надо компилировать с опцией "fb lite" или "qb". Компилю, всё нормально. Если же подключить ещё и Win9, то уже ругается, что надо компилить только с опцией "fb". Т.е. одно другому мешает.

Отсюда вопрос. Есть ещё какая-нибудь библиотека для работы с простыми базами данных, но чтобы не тянули с собой лишние файлы (к примеру всякие там dll-ки)? К примеру, ODBC, которая наподобие Microsoft Access, использует подключалки со словами SQL. Это значит, чтобы программа заработала (скомпиленная), ей нужны будут какие то дополнительные библиотеки?

Сам не понял, что спросил smile

Сообщение отредактировал salexeiy - Суббота, 25.11.2017, 21:44
 
WQДата: Пятница, 08.12.2017, 15:54 | Сообщение # 7
Полковник
Группа: Проверенные
Сообщений: 215
Репутация: 7
Статус: Offline
salexeiy
Мне кажется, вы усложняете там, где можно обойтись простым текстовым файлом
Если по этой теме http://freebasic.ucoz.com/forum/11-409-1
то несколько сот записей - здесь даже простой перебор по массиву практически не займет времени
 
salexeiyДата: Пятница, 08.12.2017, 17:43 | Сообщение # 8
Лейтенант
Группа: Пользователи
Сообщений: 72
Репутация: 2
Статус: Offline
Ну, текстом так текстом. Хотя мне было просто интересно с БД поработать именно со своей программой.
 
haavДата: Пятница, 08.12.2017, 19:09 | Сообщение # 9
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: 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
Репутация: 2
Статус: 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
Репутация: 7
Статус: Offline
salexeiy

Space$ в строках нужно поменять на просто Space


Сообщение отредактировал WQ - Суббота, 09.12.2017, 00:58
 
haavДата: Суббота, 09.12.2017, 09:20 | Сообщение # 12
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: 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
Репутация: 2
Статус: Offline
FbEdit те же самые ошибки выдаёт. Если про сборку с посейдоном smile - ничего там не замудрено: как была папка с компилятором, так внутри неё всё и осталось 1:1, только поменял расположение папок к редакторам, отладчику, справке и примерам, чтобы было удобнее. Ну и посейдон добавил. Всё.

Убрал суффиксы из читы, всё заработало, правда с предупреждениями. Спасибо за подсказку!!!


Сообщение отредактировал salexeiy - Суббота, 09.12.2017, 10:23
 
haavДата: Суббота, 09.12.2017, 11:09 | Сообщение # 14
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Цитата salexeiy ()
Убрал суффиксы из читы, всё заработало, правда с предупреждениями.


Серьезно? Я использую FB с версии 0.22 , запускал кучу разных исходников с суффиксами и никогда не было проблем с диаллектом Lang "FB". Мы похоже в разных параллельных вселенных находимся...


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
Форум » Freebasic » Вопросы по языку FreeBasic » простая база данных (обсуждение не сложных баз данных)
  • Страница 1 из 1
  • 1
Поиск: