Saving/Loading Table data to/from file
- From: "ielite" <ielite@xxxxxxxxx>
- Date: Thu, 21 Apr 2005 16:22:11 -0400
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 procedures 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.
.
- Prev by Date: Can I make a file excel/lotus with ADO?
- Next by Date: Re: Requery TADODataSet after Delete
- Previous by thread: Can I make a file excel/lotus with ADO?
- Next by thread: master/detail using access db.
- Index(es):
Relevant Pages
|