I have created a database of graphics using Datapower 2. It contains data which pupils can search to find appropriate pictures. These are not stored in the database (over 3000 pictures) but referenced via a directory folder field which when clicked on opens the appropriate directory. The reference is CDNET::$.pictures.....etc.
I want to transfer the database and contents to another drive / filing system but have found that the file reference is specific to that drive and system. Is there a way of modifying all references so I can get it to look at a new drive? I will need to change the reference to an alternative filing system - is this possible or do all the references need to be changed by hand?
Yes, it certainly is possible to do this using a script.
There are two main functions you need:
FileName() // returns the name of a linked file FileLink() // creates a link to a file from a name
The following script replaces all occurrences of a given string within file links in a given field of a given table with another string:
In order for this to work, you first need to copy and paste the following script into the global scripts of your database. To do this, edit the layout and choose Edit Scripts from the File menu.
Sub ReplaceLinks ( tname as text, fname as text, old as text, new as text ) Dim r as recordset, f as field, link as text r = CurrentDB.QueryDef(tname).OpenRecordset f = r.Field(fname) Dim ok as boolean ok = r.MoveFirst While ok link = FileName(f.GetValue) if link <> null then link = replace(link,old,new) f.SetValue(FileLink(link)) r.Update endif ok = r.MoveNext EndWhile EndSub
Having done this, you can create a background frame somewhere on your main layout (using the frame tool in the toolbox, drag out a rectangle to create the frame, then click the text tool and click in the frame to enter a label (eg. "Convert links")).
Then select your background frame button and press Ctrl-T, then enter the following script:
On ClickLeft ReplaceLinks("Table1","MyFileField","CDNET::$.pictures","NEWDISC::$.Pictures")
You'll need to alter the table and field names as appropriate, of course.
If you wanted to transfer a database like this onto a PC, you'd also need to perform a similar type of conversion, as the PC is not going to understand absolute file paths designed for an Acorn (relative paths are OK, however).
As an example, if your pictures moved from an absolute location on a separate drive to a directory next to the database, you could use:
On ClickLeft ReplaceLinks("Table1","MyFileField","CDNET::$.pictures","Pictures")
In this case the file links would remain in Acorn format, which is OK as long as they're relative to the database.
This would then work in mixed platform client/server mode as well, since any Acorns using the file would append the file links to an Acorn absolute path, whereas any PCs would append the relative path name to a PC absolute path.
Back to DataPower 2 Documentation Page
Back to DataPower 2 Home Page