Documentation component by D.Glodt (c)2004 |
Appendix A: QDataBase |
|
QdataBase is a component to create and manipulate data base files.
The data base manipulated by this component are not standard with other data base.
the limit of fields number and records is limited at the maxi value of 24 bits word.
Field |
Type |
R/W |
Default |
|
|
|
|
|
|
FileName |
STRING |
R |
||
File name of data base with path. |
||||
RecordSize |
LONG |
R |
||
Record size in octet from data base. |
||||
RecordCount |
LONG |
R |
||
Record count from data base. |
||||
FieldCount |
LONG |
R |
||
Field count from a record. |
||||
Error |
INTEGER |
L |
||
Error data base , his number must be compare with the following constantes to identify error en if the methods return false. ErrDbCreate: Pb of file creation. ErrDbOpen: Pb open file ErrDbFile: File not exist ErrDbIndex: Index record out of bound ErrDbRecordEmpty: Record empty or record format empty. ErrDbRecordSize: Size record is not the same that data base format. |
Method |
Type |
Description |
Params |
|
|
|
|
|
|
GetFieldName |
Function(index&) as string |
return the field name by his index |
1 |
|
GetFieldIndex |
Function(name$) as long |
return the index field by his name |
1 |
|
GetFieldSize |
Function(index&) as long |
return the field size in octet by his index. |
1 |
|
IsOpen |
Function as boolean |
return the open state of a data base. |
0 |
|
Create |
Function(FileName$,RecordFormat$) as boolean |
Create a dat base file and return true if the file is create. FileName is the fiel name to create, RecordFormat is the record format from records of data base including the name and the size of each field. |
2 |
|
|
|
Format: <FieldName:FieldSize>,<FieldName:FieldSize >,...........
Example: text= »NAME:10,CITY:20 » |
|
|
Open |
Function(FileName$) as boolean |
Open a data base file and return True. FileName is the file name to open. |
1 |
|
Close |
SUB |
Close data base. |
0 |
|
AddRecord |
Function(record$) as boolean |
Add a record to the data base and return True. Record is all fields of record with the same size that of data base format. |
1 |
|
AddRecordUdt |
Function(record&) as boolean |
Add a record to the data base by udt and return True. Record is a UDT type of variant size but always the same size that data base format with string fields only. |
1 |
|
|
|
Example: Type Customer name as string*10 city as string*20 End Type
Dim myCustomer as Customer myCustomer.name= »Peter » myCustomer.city= »Paris »
dbase.AddRecordUdt( myCustomer) |
|
|
SaveRecord |
Function(index&,record$) as boolean |
Save a record by his index in data base and return True. Record is all fields of record with the same size that the data base format. |
2 |
|
SaveRecordUdt |
Function(index&,record&) as boolean |
Save a record of UDT type by his index in data base and return True. Record is a UDT type of variant size but always the same size that data base format with string fields only. |
2 |
|
GetRecord |
Function(index&,byref record$) as boolean |
Put in record parameter the record l'enregistrement identify by his index. |
2 |
|
GetRecordUdt |
Function(index&,record&) as boolean |
Put in the record parameter of UDT type the record identify by his index. The variable UDT must be the same size of data base format. |
2 |
|
DelRecord |
Function(index&) as boolean |
Remove a record from data base by his index |
1 |
|
SearchByRecord |
Function(name$) as boolean |
Return True if the string of parameter name has be found in all record of the data base.. The records index of record including the string will be returned by event OnSearch. |
1 |
|
SearchByField |
Function(name$,fieldIndex&) as boolean |
Return True if the string of parameter name has be found in the field identify by his index of all the records of data base. The records index including the string in their fields will be returned by event OnSearch. |
2 |
|
SearchByRequest |
Function(operator$,value$,bNum&,fieldIndex&) as boolean |
Returne True if there is records fitted in with a request. The request is made by a operator and a value on a field identify by his index. |
4 |
|
|
|
Operator list is the following: < , > ,<= , >= , = , <> Value parameter is the string to check or numeric value if bNum parameter is at True. The records index fitted in with the request will be returned by event OnSearch. Example: dbase.SearchByRequest( « > », »2000 »,1)
|
|
QDataBase Evenements
Event |
Type |
Occurs when... |
Params |
|
|
|
|
|
|
OnSearch |
(index&) |
On using Search methods |
1 |
|
QDataBase Examples
$typecheck on
$include "rapidq.inc" $include "Object\QDataBase.inc" declare sub show Declare Sub mnFileClick Declare Sub mnOpenClick Declare Sub mnSaveClick Declare Sub mnCloseClick Declare Sub mnCreateClick Declare Sub mnRequestClick Declare Sub mnExitClick Declare Sub BtOkClick Declare Sub ShowError Declare Sub ClearCell Declare Sub Search(index as long) Type TClient Name as string*15 Compagny as string*20 City as string*20 Postal as string*10 Country as string*20 End Type dim dbase as QDataBase dbase.OnSearch=Search const maxSeq=50 dim indexsearch as integer dim client as TClient dim OpenDial as QOpenDialog OpenDial.Filter="Db file(*.db)|*.db" OpenDial.caption="Open database" dim CreateDial as QSaveDialog CreateDial.Filter="Db file(*.db)|*.db" CreateDial.caption="Create database" CREATE Form2 AS QFORM BorderStyle=bsDialog Caption="Request" Width=316 Height=153 Center CREATE Label1 AS QLABEL Caption="Value:" Left=26 Top=16 END CREATE CREATE Label2 AS QLABEL Caption="Operator:" Left=10 Top=48 Width=46 END CREATE CREATE Label3 AS QLABEL Caption="Field:" Left=115 Top=48 Width=46 END CREATE CREATE EdValue AS QEDIT Left=63 Top=12 Width=233 END CREATE CREATE CbOp AS QCOMBOBOX Left=64 Top=45 Width=40 AddItems "=","<",">","<=",">=","<>" ItemIndex=0 END CREATE CREATE CbField AS QCOMBOBOX Left=145 Top=45 Width=80 AddItems "Name","Compagny","City","Postal","Country" ItemIndex=0 END CREATE CREATE CheckNum AS QCHECKBOX Caption="Numeric" Left=240 Top=48 Width=81 END CREATE CREATE BtOk AS QBUTTON Caption="&Ok" Kind=bkOK Left=136 Top=90 Default=true OnClick=BtOkClick END CREATE CREATE BtCancel AS QBUTTON Caption="&Cancel" Kind=bkCancel Left=224 Top=90 END CREATE END CREATE CREATE Form AS QFORM Caption="DataBase" Width=730 Height=454 Center OnShow=Show Create MainMenu As QMAINMENU Create File As QMenuItem Caption="&File" OnClick=mnFileClick Create mnOpen As QMenuItem Caption="&Open" OnClick=mnOpenClick End Create Create mnSave As QMenuItem Caption="&Save" OnClick=mnSaveClick End Create Create mnClose As QMenuItem Caption="&Close" OnClick=mnCloseClick End Create Create mnCreate As QMenuItem Caption="C&reate" OnClick=mnCreateClick End Create Create sep1 As QMenuItem Caption="-" End Create Create mnRequest As QMenuItem Caption="&Request" OnClick=mnRequestClick End Create Create sep2 As QMenuItem Caption="-" End Create Create mnExit As QMenuItem Caption="&Exit" OnClick=mnExitClick End Create End Create End Create CREATE StringGrid1 AS QSTRINGGRID Align=AlClient RowCount=maxSeq ColCount=6 Color=&HAAFFFF DefaultColWidth=100 DefaultRowHeight=20 ColWidths(0)=50 Cell(0,0)="Record" Cell(1,0)=space$(8)+"Name" Cell(2,0)=space$(8)+"Company" Cell(3,0)=space$(12)+"City" Cell(4,0)=space$(8)+"Postal code" Cell(5,0)=space$(8)+"Country" AddOptions goEditing,goColSizing END CREATE END CREATE Form.ShowModal '============================================ ' Evenement apparition fenetre '============================================ Sub Show dim i as integer for i=1 to maxSeq StringGrid1.Cell(0,i)=str$(i) next i End Sub '============================================ ' Evenement menu ouvrir '============================================ Sub mnOpenClick dim i as integer dim filename as string dim Error as integer if OpenDial.Execute() then if dbase.open(OpenDial.filename) then for i=1 to dbase.RecordCount if dbase.GetRecordUdt(i,client)=true then StringGrid1.Cell(1,i)=client.name StringGrid1.Cell(2,i)=client.Compagny StringGrid1.Cell(3,i)=client.City StringGrid1.Cell(4,i)=client.Postal StringGrid1.Cell(5,i)=client.Country else Error=True Exit For end if next i if Error=true then ShowError else ShowError end if end if End Sub '============================================ ' Effacement contenu cellule '============================================ Sub ClearCell dim i as integer dim j as integer for i=1 to StringGrid1.RowCount-1 for j=1 to StringGrid1.ColCount-1 StringGrid1.Cell(j,i)="" next j next i End Sub '============================================ ' Evenement menu fermer '============================================ Sub mnCloseClick ClearCell dbase.close End Sub '============================================ ' Evenement menu créer '============================================ Sub mnCreateClick dim format as string dim i as integer dim filename as string dim Error as integer format="NAME:15,COMPAGNY:20,CITY:20,POSTAL:10,COUNTRY:20" if CreateDial.Execute() then filename=CreateDial.filename if instr(LCASE$(FileName),".db")=0 then FileName=FileName+".db" if dbase.create(CreateDial.filename,format)=true then for i=1 to StringGrid1.RowCount-1 client.name=StringGrid1.Cell(1,i) client.Compagny=StringGrid1.Cell(2,i) client.City=StringGrid1.Cell(3,i) client.Postal=StringGrid1.Cell(4,i) client.Country=StringGrid1.Cell(5,i) if dbase.AddRecordUdt(client)=False then Error=True Exit For end if next i if Error=True then ShowError else ShowError end if end if End Sub '============================================ ' Evenement menu sauver '============================================ Sub mnSaveClick dim i as integer dim filename as string dim Error as integer if CreateDial.Execute() then filename=CreateDial.filename if instr(LCASE$(FileName),".db")=0 then FileName=FileName+".db" if dbase.IsOpen then for i=1 to StringGrid1.RowCount-1 client.name=StringGrid1.Cell(1,i) client.Compagny=StringGrid1.Cell(2,i) client.City=StringGrid1.Cell(3,i) client.Postal=StringGrid1.Cell(4,i) client.Country=StringGrid1.Cell(5,i) if dbase.SaveRecordUdt(i,client)=False then Error=True Exit For end if next i if Error=True then ShowError end if end if End Sub '============================================ ' Affichage erreur '============================================ Sub ShowError defstr text="" Select case dbase.error case ErrDbCreate text="Error file create" case ErrDbOpen text="Error file open" case ErrDbFile text="Error file not exist" case ErrDbIndex text="Error index out of bound" case ErrDbRecordEmpty text="Error record empty" case ErrDbRecordSize text="Error record size" End Select MessageBox(text,"Error",16) End Sub '============================================ ' Evenement menu fichier '============================================ Sub mnFileClick if dbase.IsOpen then mnSave.enabled=true mnRequest.enabled=true else mnSave.enabled=false mnRequest.enabled=false end if End Sub '============================================ ' Evenement menu request '============================================ Sub mnRequestClick form2.showmodal End Sub '============================================ ' Evenement bouton ok '============================================ Sub BtOkClick dim operator as string dim index as long if EdValue.text="" then exit sub ClearCell indexsearch=0 operator=CbOp.Item(CbOp.ItemIndex) index=dbase.GetFieldIndex(CbField.Item(CbField.ItemIndex)) dbase.SearchByRequest(operator,EdValue.text,CheckNum.checked,index) End Sub '============================================ ' Evenement OnSearch '============================================ Sub Search(index as long) if dbase.IsOpen()=true then if dbase.GetRecordUdt(index,client)=true then indexsearch++ StringGrid1.Cell(1,indexsearch)=client.name StringGrid1.Cell(2,indexsearch)=client.Compagny StringGrid1.Cell(3,indexsearch)=client.City StringGrid1.Cell(4,indexsearch)=client.Postal StringGrid1.Cell(5,indexsearch)=client.Country end if end if End Sub '============================================ ' Evenement menu quitter '============================================ Sub mnExitClick application.terminate End Sub