PDA

Vollständige Version anzeigen : Datenträgername A97


Ohnesorg
04.10.2001, 10:01
Hi,

ja, ja... Ohnesorg meldet sich nach langer Zeit einmal wieder im Access-Forum zurück...

Mein derzeitiges Projekt ist ein virtuelles Fotoalbum.
Viele bunte Fotos benötigen eine große Menge an Speicherplatz. Also müssen die Bildchen auf Wechseldatenträger gespeichert werden.

Es soll so aussehen, dass der User eine CD-Rom mit Grafikdateien einlegt und im Access-Formular eine Schaltfläche anklickt. Nun sollen die Grafiken ausgelesen werden. Dazu gehören auch einige Informationen zur CD, da diese festlegen, welche Grafiken auf der CD beinhaltet sind.

Andersherum soll der User z.B. eine Kategorie auswählen und Access sagt ihm "Bitte CD XYZ-12345 einlegen" ist die CD eingelegt, soll Access nach dem drücken einer Schaltfläche feststellen, ob die richtige CD eingelegt ist.

Ich möchte aber in keinem Fall eine Access-Datei auf der CDR ablegen müssen. Diese Infos sollen lediglich über die Datenträgerbezeichnung gezogen werden.

Danke Euch, für die Hilfe und Grüße... Kleister-Meister Ohnesorg

Goki
04.10.2001, 10:48
Hallo Ohnesorg,

also hab gerade lange gesucht ... in Bezug auf Kategorie/Datenträger kann ich dir nur das eine empfehlen ...

Erstelle eine Tabelle in welcher die Katgorien in einer Spalte enthalten sind und in einer zweiten Spalte dann der Datenträgerename enthalten ist.

KName <-- Name der Kategorie - als Primärschlüssel gesetzt
DName <-- Name des Datenträgers ...

Im Formular hast dann die KomboBox mit den Kategorien die du auswählen kannst ...

Das ist ja noch das einfache ... was du jetzt machen willst das abchecken ob Datenträgername mit der eingelegten CD übereinstimmt. Zu lösen wäre dies über eine API ...

Im Objektkatalog von VBA habe ich ein Modul namens 'FileSystem' gefunden mit welchem du Laufwerke, Pfade, Ordner, Dateiben manipulieren, kopieren und löschen kannst.

Leider habe ich aber nichts gefunden, was den Datenträgername angeht ... vielleicht weiß noch jemand was ...

Ansonsten dieser Tip ... wenn auch nicht das Ideale was du dir vorstellst ... du brennst auf die CD einfach eine Textdatei oder eine Datei ohne Namenserweiterung die als Dateinamen an sich den Namen des Datenträgers hat ... kompliziert ... wa ...

--> DT1CD1(.txt)

Mit folgender Function kannst dann die CD checken lassen ob es die richtige ist ...


Public Function checkCD()

Dim Drive as String, Datei as String, sDatei as String, a as String

Drive = " [Buchstabe des CDRoms, DVDs etc. gefolgt vom ':'] "

Datei = "" & Forms![Name des Formulars]![Name des Feldes].Column(1) & ".txt" <- In der zweiten Spalte der KomboBox steht dann der Name des Datenträgers und die .txt-Endung ob du die ranmachst oder nicht ist dir überlassen ...

' Wechselt auf das Laufwerk
ChDrive(Drive)
' Sucht die Datei mit dem Namen und übergibt die Variable an sDatei
sDatei = Dir(Datei)

If sDatei = "" Then
a = "Die eingelegte CD enthält nicht" & chr(13)
a = a & "die gewünschte Kategorie!" & chr(13) & Chr(13)
a = a & "Bitte legen Sie die CD mit der" & chr(13)
a = a & "folgenden Datenträgerbeschriftung ein:" & chr(13) & chr(13)
a = a & "--> " & Forms![Name des Formulars]![Name des Feldes].Column(1) & " <--"

MsgBox a, vbCritical, "Datenträgerprüfung"
Exit Function
End If

End Function


Getestet hab ich die Function zwar nicht - aber müßte normal funktionieren ... den weiteren Aufbau ... Formular öffnen und dateien auflisten ... etc. kannst dir Selbst stricken ...

slg
Goki

[Dieser Beitrag wurde von Goki am 04.10.2001 editiert.]

Ohnesorg
04.10.2001, 11:00
Hi Goki,

Danke Dir erstmal.
Die Sache von wegen der Tabellenstruktur und dem Ablauf der Verfahrensweise ist ja bereits fertig.
Das Problem ist lediglich folgendes:
Ich benötige die Datenträgerbezeichnung um den User dazu zu bringen die richtige CD einzulegen und bei einer falschen CD zu meckern. Solange ich diese nicht auslesen kann... Brauche ich für die Datenbank kein Handout zu erstellen.

Danke Dir aber dennoch... :)

Res1999
04.10.2001, 14:11
Probiers mal aus, habe ich irgendwo aufgeschnabt:

Private Function fGetSerialNum(ByVal sCurDrive$) As String
' seriennummer auslesen
fGetSerialNum$ = ""
Dim sDrive$, sVolume$, sFileSystem$, lSerialNum&, lFileSystem&
Dim lRet&

sDrive = sCurDrive$ & "\"
sVolume = String$(255, Chr$(0))
sFileSystem = String$(255, Chr$(0))

' Informationen holen
lRet& = apiGetVolumeInformation(sDrive, sVolume, Len(sVolume), lSerialNum, 0, lFileSystem&, sFileSystem, Len(sFileSystem))
If lRet <> 0 Then: fGetSerialNum = Format(lSerialNum, "000000000")

End Function

Christian

Ohnesorg
04.10.2001, 14:45
Danke, Christian
:D

Werde ich das doch ganz klar mal ausprobieren... Wenn das funzt, steht dem Terror gegen User nichts mehr im Weg...
á la msgbox "Sag mal, lieber User, Du solltest doch CD xyz einlegen... hast Du dumm archiviert oder kannst Du nicht lesen?", vbokonly+vbcritical, "Tz tz tz... Lesen kannste auch nicht!"
:D
Ich werde es gleich mal austesten... ;)

Ohnesorg
04.10.2001, 14:50
ooooch....
Hab ich da doch was übersehen...
Da steckt ein API - Aufruf drin....

apiGetVolumeInformation(...)

Jetzt benötige ich nur noch die Declare für die API... *verzweifelt guck*

Ohnesorg
04.10.2001, 15:11
yippiiiiiiiieh!
Heureka, das ist es!

Ich habe etwas gefunden, was auch funzen sollte! Muss es allerdings testen!
Wen es interessiert... das Ganze ist unter Visualbasic-archiv.de (http://www.visualbasic-archiv.de) zu finden...
Dort sind noch API - Erklärungen zu finden. Echt Klasse!!

Der Artikel - und die direkte Verlinkung wird Günther gar nicht gefallen - ist recht aufschlußreich und hier zu finden. (http://www.visualbasic-archiv.de/vbapi/GetVolumeInformation.php3)

Nur für jene, die es interessiert... :D