Code archives/Miscellaneous/Database functions
This code has been declared by its author to be Public Domain code.
Download source code
| From Blitz et cetera article File used: http://blitzetcetera.org/images/7/73/DBF-DataBase.zip |
;Database (DBF) reading/modifying/writing functions by Matt Merkulov Const maxdbf=100, dbq=2 Dim dbfile(dbq),fleng(dbq),stpos(dbq),rowq(dbq),colq(dbq),dbbank(dbq),dbbankc(dbq) Dim dbc(dbq,maxdbf,1) Function opendb(db,file$) f=OpenFile(file$) dbfile(db)=f SeekFile f,8 stpos(db)=ReadShort(f) fleng(db)=ReadShort(f) rowq(db)=(FileSize(file$)-stpos(db))/fleng(db) dbbank(db)=CreateBank(fleng(db)) dbbankc(db)=CreateBank(fleng(db)) For n=0 To fleng(db)-1 PokeByte dbbankc(db),n,32 Next dbc(db,0,0)=1 cq=0 Repeat fp=32*(cq+1) SeekFile f,fp If ReadByte(f)=13 Then Exit SeekFile f,fp+16 dbc(db,cq,1)=ReadShort(f) If colq(db)>0 Then dbc(db,cq,0)=dbc(db,cq-1,0)+dbc(db,cq-1,1) cq=cq+1 Forever colq(db)=cq End Function Function closedb(db) f=dbfile(db) SeekFile f,4 WriteShort f,rowq(db) CloseFile f FreeBank dbbank(db) FreeBank dbbankc(db) End Function Function readrow(db,row) SeekFile dbfile(db),stpos(db)+fleng(db)*row ReadBytes dbbank(db),dbfile(db),0,fleng(db) End Function Function writerow(db,row) SeekFile dbfile(db),stpos(db)+fleng(db)*row WriteBytes dbbank(db),dbfile(db),0,fleng(db) End Function Function readdbf$(db,col) For n=0 To dbc(db,col,1)-1 m$=m$+Chr$(PeekByte(dbbank(db),dbc(db,col,0)+n)) Next Return m$ End Function Function writedbf(db,col,m$) l=Len(m$) For n=0 To dbc(db,col,1)-1 If n<l Then v=Asc(Mid$(m$,n+1,1)) Else v=32 PokeByte dbbank(db),n+dbc(db,col,0),v Next End Function Function trimdbf$(db,col) Return Trim$(readdbf$(db,col)) End Function Function createdb(db,file$) dbfile(db)=OpenFile(file$) WriteInt dbfile(db),3+1 Shl 8+1 Shl 16 For n=1 To 7 WriteInt dbfile(db),0 Next stpos(db)=32 fleng(db)=1 rowq(db)=0 End Function Function addfield(db,name$,l) f=dbfile(db) For n=1 To 11 WriteByte f,Asc(Mid$(name$,n,1)) Next WriteByte f,66 WriteInt f,fleng(db) fld=(stpos(db) Shr 5)-1 dbc(db,fld,0)=fleng(db) WriteShort f,l dbc(db,fld,1)=l For n=1 To 7 WriteShort f,0 Next fleng(db)=fleng(db)+l stpos(db)=stpos(db)+32 End Function Function closeheader() f=dbfile(db) WriteByte f,13 SeekFile f,8 stpos(db)=stpos(db)+1 WriteShort f,stpos(db) WriteShort f,fleng(db) End Function Function addrow(db) SeekFile dbfile(db),stpos(db)+fleng(db)*rowq(db) WriteBytes dbbank(db),dbfile(db),0,fleng(db) rowq(db)=rowq(db)+1 End Function Function clearbnk(db) CopyBank dbbankc(db),0,dbbank(db),0,fleng(db) End Function |