[REBOL] Re: Object Database
From: koolauscott:ya:hoo at: 13-Apr-2001 0:14
*****BEGINNER'S QUESTIONS*****
Dr. Turk,
I hope you don't mind my replying as I'm not much
more than a beginner myself. I remember the
difficulties I had when I was first starting out with
Rebol. I still don't understand 90% of the stuff
people talk about on this mailing list but I've
learned enough Rebol to enjoy it.
I think it is best to read through the core guide
and then the Rebol for Dummies first before trying
Rebol - The Official Guide. I started out with The
Official Guide and knocked my head against it for 3
months, and while I'm sure it improved my character, I
wouldn't recommend it for a beginner.
There is a typo in the script you're using; try
the one attached. It is an amazing script; I've been
playing with it the past couple of days. I've just
started to learn View and have been working on an
interface for this script. The only databases I've
done in Rebol have been small flat-files and they look
really bloated compared to this.
I've tried to answer the questions you raised as best
I could, I hope it helps.
To see the data you have entered use ==>
probe database
You can't print an object; use probe.
The database block contains the database when it is
loaded into Rebol. The %data file is just used to
store the database to disk.
All the database functions work with database block.
load-data loads the disk copy of the database from
disk and into the block called database.
save-data writes the database block to the %data file,
when you are done making modifications to the
database.
Thus find-data and remove-data can be called after you
create a record with insert-data. Those functions only
work with the database block and have nothing to do
with the %data file.
Hash
I've added a line that turns the database block from a
block! type to a hash!
Change an Email Address
First look-up the record to change with find-data and
assign it to a variable ==>
x: find-data [bill--example--com]
then probe x to see the object ==>
probe x
To change bill's email address use ==>
x/email: [bill--newemail--net]
When you call save-data and then load-data you can use
find-data with the new email address.
#################################################
Email Contact Database
REBOL [Title: "Email Contact Database"]
db-file: %data
record: context [name: email: phone: web: none]
database: []
load-data: has [data] [
data: load/all db-file
clear database
foreach item data [
item: make record item
repend database [item/email item]
database: to-hash database
]
]
save-data: has [data] [
data: copy []
foreach [key obj] database [
append/only data third obj
]
save db-file data
]
find-data: func [email] [select database email]
remove-data: func [email] [remove/part find database
email 2]
insert-data: func [email' name' phone' web'] [
repend database [
email'
make record [
email: email'
name: name'
phone: phone'
web: web'
]
]
]
##################################################
--- "Dr. Louis A. Turk" <[louisaturk--eudoramail--com]>
wrote: