| Subject |
Re: Copy an image field from one table to another |
| From |
roy price <royprice@royprice.name> |
| Date |
Thu, 22 Apr 2021 20:07:17 -0400 |
| Newsgroups |
dbase.getting-started |
roy price Wrote:
> Mervyn Bick Wrote:
>
> > On 2021/04/16 11:18, roy price wrote:
> > > Hello Again,
> > > I was gaily adding additional photos to my file photos03, when I came across the message "Database engine fail" (not sure of the exact wording).
> > > I presume that means a corrupted file
> > > So I've gone back and copied a backup file, and wrote a small program to compare both files and add (the additional) records from the problem file to the backup file.
> > > As in select 1, fields to memory, select 2, and copy memory items to appended records. Then I realised that I do not know how to copy the binary field that way .
> > > Any suggestions?
> > > Regards
> > > Roy Price
> > >
>
> Thanks Mervyn,
> I managed to get a non-corrupted version reconstructed with your help, starting with a backup from a while ago, the subsequent backups also had the same problem. The file mostly worked, hiding the problem, it was only when I tried to copy it to another name that the failure occurred.
> Regards
> Roy Price
> >
> > If the photos03 table is corrupted it may not be possible to use it. On
> > the other hand, if you've been able to open the table by double-clicking
> > on it in the Navigator then all may not be lost.
> >
> > One can't simply use replace a->fieldname with b->fieldname for a binary
> > (non text) field. The only way to get an image from one table to
> > another if one is not copying the entire table is to export the image to
> > a file and then load that file into the new file.
> >
> > An added complication is if you have used an autoinc field as the id for
> > the images. One can't save a value to an autoinc field. One has to
> > append a blank record which will allow dBASE to assign a value to the
> > field.
> >
> > Firstly, before you try anything you must only be working with copies of
> > the old backup table and photo03.
> >
> > The following little program should do the job. Copy and paste it into
> > a new program file. Before you use it you must make sure that the
> > correct table names are used and that the correct number for the image
> > field is used. Change anything that is incorrect.
> >
> > ******** Start of program ********
> > cSource = 'photo03' //the damaged table which would not accept entries.
> > cTarget = 'backup01' //the old backup table which doesn't include
> > //the latest images
> >
> > //Edit the lines above to show the correct table names.
> >
> > //set up the damaged file which has images not previously saved
> > //to a backup
> > q = new query()
> > q.sql = 'select * from ' + cSource
> > q.active = true
> > //set up target file i.e the old backup which does not have all the images
> > q1 = new query()
> > q1.sql = 'select * from ' + cTarget
> > q1.active = true
> > //go to the bottom of the target table and save ID value for the
> > //last record. This will be used to find the corresponding record
> > //in photo03.
> > q1.rowset.last()
> > nId = q1.rowset.fields['id'].value
> > //Find that record in the source table
> > q.rowset.applyLocate( "id = " + nId )
> > //Goto the next record i.e the first record not already in the target
> > // table
> > q.rowset.next()
> > do while not q.rowset.endofset
> > q1.rowset.beginAppend() //add a blank record
> > //we can't place a value in an auto inc field so skip 1st field
> > for n = 2 to q.rowset.fields.size
> > if n = 2 //the image field
> > // Make sure you have the correct field here.
> > if file('temp_image') //Note: No dot
> > erase temp_image
> > endif
> > q.rowset.fields[n].copyToFile('temp_image.')
> > //Note: Dot at end of name
> > q1.rowset.fields[n].replaceFromFile('temp_image.')
> > else
> > q1.rowset.fields[n].value = q.rowset.fields[n].value
> > endif
> > next
> > q1.rowset.save() // save the new record
> > //go to the next record in the source table
> > q.rowset.next()
> > enddo
> > q.active = false
> > q1.active = false
> > ******* End of program **********
> >
> > Mervyn.
> >
> > Hello Mervyn,/ Akshat
Although I had a fully working version of my "Three Image Files" form, thanks to your help,
i decided to take your advice and abandon that process, and instead use a field with the path and filename, to link to the images in a directory.
It took a couple of days, but now it is working fine, (and easier to maintain)
Thanks a lot, Roy Price
> >
> >
> >
> >
> >
> >
>
|
|