You should always indent the lines correctly.
If I do that for your code I get:
procedure TForm1.Calendar1DayChanged(Sender: TObject);
begin
reset(goalsfile);
Read(goalsfile, info); // this should go inside the while loop so all records are read
while not EOF(goalsfile) do
begin
if calendar1.date = info.date then
begin
memo1.Lines.add(info.Name);
memo1.Lines.add(IntToStr(info.goal));
memo1.Lines.add(info.date);
end;
closefile(goalsfile); // this is now done inside the read-loop
end;
end;
First... you need to put the Read(goalsfile, info); just inside the while loop because you want all the records to read.
Then, look at your closefile(). You see it is inside the "read"-loop. That means if the loop comes back for the second read you've already closed the file (resulting in a 103 error). Move the closefile() to under the while loop (after the end of the while) and it should work. You now see why correct indenting is important.
O, and you forgot the memo1.clear at the top of that procedure.