Saving/Loading Table Data to/from file



Using Delphi 7 + ADO + MS Access


I am trying to write a Music Database where I can save my information into
streamed data files.

Master Table = Artists
Detail Table = Albums
Detail Table = Songs



ARTISTS
_________
Id
Artist
Genre


ALBUMS
_________
Id
ArtistId
Album
Year
Label


SONGS
_________
Id
AlbumId
Song
Disk
Track


Below are the two procedure for saving to files & loading from file

My problem is that the only way i can get it to work, is to NOT
DisableControls at the beginning and EnableControls at the end of each
procedure. If I DisableControls/EnableControls, these procedures do not work
(indexing gets screwed up).

Can anyone suggest away I can acoomplish this so I can disable the controls.
It looks like crap when Loading from file or Saving to file.

Thanks !

Shane

procedure TfrmMain.actLoadExecute(Sender: TObject);
var
FileStr: TFileStream;
Bmp: TBitmap;
I, J, K: Integer;
Artists, Albums, Songs: Integer;
ArtistId, AlbumId: Integer;
Artist, Album, Song: String;
begin
if dlgOpen.Execute then
begin
FileStr:= TFileStream.Create(dlgOpen.FileName, fmOpenRead);
Artists:= ReadStreamInt(FileStr);
for I:= 1 to Artists do
begin
Artist:= ReadStreamStr(FileStr);
if not frmData.tblArtists.Locate('Artist', Artist, [loCaseInsensitive])
then
frmData.tblArtists.Insert
else
frmData.tblArtists.Edit;
frmData.tblArtists.FieldByName('Artist').asString:= Artist;
frmData.tblArtists.FieldByName('Genre').asString:=
ReadStreamStr(FileStr);
frmData.tblArtists.Post;
Albums:= ReadStreamInt(FileStr);
for J:= 1 to Albums do
begin
ArtistId:= frmData.tblArtists.FieldByName('Id').asInteger;
Album:= ReadStreamStr(FileStr);
if not frmData.tblAlbums.Locate('ArtistId;Album', varArrayOf([ArtistId,
Album]), [loCaseInsensitive]) then
frmData.tblAlbums.Insert
else
frmData.tblAlbums.Edit;
frmData.tblAlbums.FieldByName('ArtistId').asInteger:= ArtistId;
frmData.tblAlbums.FieldByName('Album').asString:= Album;
frmData.tblAlbums.FieldByName('Year').asInteger:=
ReadStreamInt(FileStr);
frmData.tblAlbums.FieldByName('Label').asString:=
ReadStreamStr(FileStr);
frmData.tblAlbums.FieldByName('Note').asString:= ReadStreamStr(FileStr);
Bmp:= TBitmap.Create;
Bmp.Assign(ReadStreamBmp(FileStr));
TBlobField(frmData.tblAlbums.FieldByName('Image')).Assign(Bmp);
Bmp.Free;
frmData.tblAlbums.Post;
Songs:= ReadStreamInt(FileStr);
for K:= 1 to Songs do
begin
AlbumId:= frmData.tblAlbums.FieldByName('Id').asInteger;
Song:= ReadStreamStr(FileStr);
if not frmData.tblSongs.Locate('AlbumId;Song', varArrayOf([AlbumId,
Song]), [loCaseInsensitive]) then
frmData.tblSongs.Insert
else
frmData.tblSongs.Edit;
frmData.tblSongs.FieldByName('AlbumId').asInteger:= AlbumId;
frmData.tblSongs.FieldByName('Song').asString:= Song;
frmData.tblSongs.FieldByName('Disk').asInteger:=
ReadStreamInt(FileStr);
frmData.tblSongs.FieldByName('Track').asInteger:=
ReadStreamInt(FileStr);
frmData.tblSongs.FieldByName('Note').asString:=
ReadStreamStr(FileStr);
frmData.tblSongs.FieldByName('Lyrics').asString:=
ReadStreamStr(FileStr);
frmData.tblSongs.Post;
end; //for K:= 1 to Songs do
end; //for J:= 1 to Albums do
end; //for I:= 1 to Artists do
FileStr.Free;
end;
end;

procedure TfrmMain.actSaveExecute(Sender: TObject);
var
FileStr: TFileStream;
Bmp: TBitmap;
begin
if dlgSave.Execute then
begin
FileStr:= TFileStream.Create(dlgSave.FileName, fmCreate);
frmData.tblArtists.First;
WriteStreamInt(FileStr, frmData.tblArtists.RecordCount);
while not frmData.tblArtists.EOF do
begin
WriteStreamStr(FileStr,
frmData.tblArtists.FieldByName('Artist').asString);
WriteStreamStr(FileStr,
frmData.tblArtists.FieldByName('Genre').asString);
frmData.tblAlbums.First;
WriteStreamInt(FileStr, frmData.tblAlbums.RecordCount);
while not frmData.tblAlbums.EOF do
begin
WriteStreamStr(FileStr,
frmData.tblAlbums.FieldByName('Album').asString);
WriteStreamInt(FileStr,
frmData.tblAlbums.FieldByName('Year').asInteger);
WriteStreamStr(FileStr,
frmData.tblAlbums.FieldByName('Label').asString);
WriteStreamStr(FileStr, frmData.tblAlbums.FieldByName('Note').asString);
Bmp:= TBitmap.Create;
Bmp.Assign(TBlobField(frmData.tblAlbums.FieldByName('Image')));
WriteStreamBmp(FileStr, Bmp);
Bmp.Free;
frmData.tblSongs.First;
WriteStreamInt(FileStr, frmData.tblSongs.RecordCount);
while not frmData.tblSongs.EOF do
begin
WriteStreamStr(FileStr, frmData.tblSongs.FieldByName('Song').asString);
WriteStreamInt(FileStr,
frmData.tblSongs.FieldByName('Disk').asInteger);
WriteStreamInt(FileStr,
frmData.tblSongs.FieldByName('Track').asInteger);
WriteStreamStr(FileStr, frmData.tblSongs.FieldByName('Note').asString);
WriteStreamStr(FileStr,
frmData.tblSongs.FieldByName('Lyrics').asString);
frmData.tblSongs.Next;
end; //while not frmData.tblSongs.EOF do
frmData.tblAlbums.Next;
end; //while not frmData.tblAlbums.EOF do
frmData.tblArtists.Next;
end; // while not frmData.tblArtists.EOF do
FileStr.Free;
end;
end;

end.


.



Relevant Pages

  • Re: Simple DBMS in VB
    ... I am very familiar with binary file access in VB. ... songs of a particular genre, Number of songs by a particular artist, ... Number of albums, number of albums by a particular artist, Number of ... Display a list of artists then the list of albums for each artist ...
    (microsoft.public.vb.general.discussion)
  • Saving/Loading Table data to/from file
    ... Master Table = Artists ... Detail Table = Albums ... Detail Table = Songs ... Bmp: TBitmap; ...
    (borland.public.delphi.database.ado)
  • Re: Access or Excel??
    ... I'd create a new sheet called Songs and arrange the data on it ... "Artist - Album" matching to ensure that albums with the same name by ... different artists match the correct song list. ... Let's say you have a sheet called Albums. ...
    (microsoft.public.excel.misc)
  • Re: OT: Secret Music
    ... some songs, albums, artists... ... with your records collection? ...
    (alt.smokers.pipes)
  • Re: OT: Secret Music
    ... some songs, albums, artists... ... with your records collection? ...
    (alt.smokers.pipes)

Loading