In der Code-Bibliothek der Delphi-Praxis findest du zwei Funktionen von sakura, mit denen du herausbekommen kannst, wieviele Laufwerke welchen Typs es im PC gibt.
Als kleine Hilfe meinerseits schlage ich folgende Typ-Funktion vor:
		                     
             Quelltext
                        Quelltext                    
           	 										| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 
 |   function IsHD(DriveByte: Byte): boolean;begin
 case GetDriveType(pchar(CHR(DriveByte + BYTE('A')) + ':\')) of
 // Festplatten
 DRIVE_FIXED,
 // gemappte Netzlaufwerke
 DRIVE_REMOTE,
 // CD-ROM-Laufwerke
 DRIVE_CDROM:
 Result := true;
 else
 Result := false;
 end;
 end;
 | 
		
	  
Auch wenn man davon ausgehen könnte, dass sie nur Festplatten zurückmeldet, habe ich zusätzlich auch CD-ROM-Laufwerke und Netzlaufwerke berücksichtigt, für den Fall, dass deine Datenbank z.B. auf einer CD ist.
In Kombination mit der Funktion "DriveExists" von sakura kannst du dann herausfinden, welche Laufwerke es gibt:
		                     
             Quelltext
                        Quelltext                    
           	 										| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 
 | vari : integer;
 begin
 // da üblicherweise die Buchstaben A & B für Disketten
 // reserviert sind, kann die Schleife bei C beginnen
 // 2 + 65 (ASCII-Code für A) = 67 (ASCII-Code für C)
 for i := 2 to 25 do
 // Laufwerk muss existieren und dem
 // gewünschten Typ entsprechen
 if(DriveExists(i)) and (IsHD(i)) then
 // es muss möglich sein, auf das Laufwerk
 // zu wechseln
 if(SetCurrentDir(CHR(i + BYTE('A')) + ':\')) then
 begin
 // hier geht dann die Suche los!
 end;
 end;
 | 
		
	  
Zur Suche selbst schlage ich vor, dass du dich mit den Funktionen 
FindFirst, 
FindNext und 
FindClose auseinandersetzt. Du brauchst eine sog. rekursive Funktion, die sich quasi vom Root-Ordner nach unten durchwühlt.
Ich habe davon inzwischen mehrere Varianten gesehen. Welche nun die effizienteste ist, weiß ich nicht. Meine Testfunktion ist recht fix. Oder es liegt am 1GHz-Athlon. Wer weiß das heutzutage denn schon? 
 
Natürlich solltest du die Suche abbrechen, sobald du die Datei gefunden hast. Ich habe das mit einer Bool-Variablen gemacht, die dann mit Hilfe von 
break automatisch die 
while-Schleife meiner Suchfunktion und die 
for-Schleife (s. Codebeispiel) verlässt. Das spart auch ein bisschen Zeit.