The reason that I was trying to delete the old game was that I just ran into the same "can't find research projects that should be there" problem that someone else reported a while back.
I'm about 7 years into a conventional start game, and I realized I couldn't see projects like the next research or construction level anywhere (neither current, nor queued, nor available). Finally, I started cancelling researchers' projects 1-by-1, and discovered that the missing projects reappeared as projects were deleted.
[long pause while poking around in DB]
Ok - I'm pretty sure I know what's going on. I've got a researcher "Eve Richards" who's working on 12cm lasers. When I cancel the project, Fuel Production 24,000 magically reappears. Here's the interesting fact: Eve Richards' project ID (which is the key for the ResearchProject table) is #669. The TechSystemID (key in the TechSystem table) for Fuel Prod 24,000 is #669. Hmmmm seems like a coincidence :-) It looks like the query that displays the available research projects is somehow confusing the project ID with the TechSystemID.
Another well spotted! Here is the SQL for the available research list:
sSQL = "select * from TechSystem t, TechType tt where t.RuinOnly = False and t.TechSystemID NOT IN"
sSQL = sSQL & " (select TechID from RaceTech where RaceID = " & cboRace.ItemData(cboRace.ListIndex) & ")"
sSQL = sSQL & " and (Prerequisite1 = 0 or Prerequisite1 IN "
sSQL = sSQL & " (select TechID from RaceTech where RaceID = " & cboRace.ItemData(cboRace.ListIndex) & "))"
sSQL = sSQL & " and (Prerequisite2 = 0 or Prerequisite2 IN "
sSQL = sSQL & " (select TechID from RaceTech where RaceID = " & cboRace.ItemData(cboRace.ListIndex) & "))"
sSQL = sSQL & " and TechSystemID NOT IN "
sSQL = sSQL & " (select ProjectID from ResearchProject where RaceID = " & cboRace.ItemData(cboRace.ListIndex) & ")"
sSQL = sSQL & " and TechSystemID NOT IN "
sSQL = sSQL & " (select TechSystemID from ResearchQueue where PopulationID = " & ActivePopID & ")"
sSQL = sSQL & " and TechSystemID NOT IN "
sSQL = sSQL & " (select TechID from ResearchProject where PopulationID = " & ActivePopID & ")"
sSQL = sSQL & " and tt.TechTypeID = t.TechTypeID and tt.FieldID = " & cboCategory.ItemData(cboCategory.ListIndex)
sSQL = sSQL & " and (RaceID = 0 or RaceID = " & cboRace.ItemData(cboRace.ListIndex) & ") order by Name"
As you can see, the "select ProjectID from ResearchProject" should be "select TechID from ResearchProject" and the "select TechID from ResearchProject where PopulationID = " & ActivePopID & ")" line is not actually needed as it is now a subset of the corrected line. Also a preceding "ActiveRaceID = cboRace.ItemData(cboRace.ListIndex)" and a quick replace might be more readable
Steve