Seite 1 von 1

Problem mit Ordner erstellen und Daten kopieren

Verfasst: 30.10.2007 00:25
von Caretaker
Guten Abend Leute!!!

Ich hab ein riesen Problem!!
Ich hab mit nem Klassenkameraden für ein Projekt ein Programm geschrieben, das ein RFID-Lesegerät ausliest, so weit so gut.
Bis jetzt funktionieren alle Sachen, die ich programmiert habe, nur dieser Bestandteil hier nicht !!

Code: Alles auswählen

     Verzeichnis$="C:\Programme\MySQL\MySQL Server 6.0\data\rfid"  

        Ergebnis=  ExamineDirectory(0, Verzeichnis$,"*.*")

        Repeat

            If NextDirectoryEntry()=0           
    
            Result = MessageRequester("Error...     Datenbank fehlt !", "Die Datenbank muss zunächst implementiert werden",1)        
            If Result=2        
              End        
            EndIf
               
;-------------------------------------------------------------------------------------------------------------------------------------------------------------

;---------------Datenbank wird erstellt / in das Zielverzeichnis kopiert----------------------;

            ProgrammPfad.s = "" ;Space(255)
            GetCurrentDirectory_("", @ProgrammPfad)
            ;MessageRequester("",""+ ProgrammPfad)
            
            CreateDirectory("C:\Programme\Z_ODBC_ist_vorhanden")
            Delay(100)
            CreateDirectory("C:\Programme\MySQL\MySQL Server 6.0\data\rfid")
            Delay(100)
            CopyFile(ProgrammPfad+"\db.opt", "C:\Programme\MySQL\MySQL Server 6.0\data\rfid\db.opt")
            Delay(100)
            CopyFile(ProgrammPfad+"\protokoll.txt", "C:\Programme\MySQL\MySQL Server 6.0\data\rfid\protokoll.txt")
            
;------------------------------------------------------------------------------------------------------------------------------------------------------------- 
                         
            Delay(1000)
            
            InitDatabase()
            OpenDatabase(0,"myodbc","","")

            DatabaseQuery("create table Protokoll (DS int auto_increment, ID char(10), Benutzer char(8), Std int, Min int, Tag int, Monat int, Jahr int, Zugriff char(4), primary key (DS));")
            
            DatabaseQuery("LoAD DATA Concurrent infile 'protokoll.txt' into Table protokoll  Fields terminated by '  ;' Lines terminated by '\n' (DS,ID,Benutzer,Std,Min,Tag,Monat,Jahr,Zugriff);")
                        
            
            MessageRequester("Datenbank implementieren...", "Datenbank wurde implementiert !")
            
            variable=1
            
            Else
    
        MessageRequester("Verify...", "Benötigte Datenbank ist vorhanden")      
        Goto Hiergehtsweiter2
        
    EndIf

  Until Ergebnis = 0
  
;--------------------------------------------------------------------------------------------------------------------------------------------------------
  
If variable=1

Goto Hiergehtsweiter2 

EndIf
Ich möchte, wenn der Ordner "rfid" nicht besteht (also die Datenbank auch nicht vohanden ist), diesen Ordner ("rfid") erstellen.
Außerdem sollen zwei Dateien dorthin kopiert werden. Zudem soll noch ein anderer Ordner erstellt werden.
Dann soll eine Tabelle angelegt werden und diese mit Daten gefüllt werden! Jetzt ist das Problem er gibt mir immer eine Fehlermeldung aus!!

Diese hier :http://rapidshare.com/files/66119156/Fehler.jpg.html


könnt ihr mir sagen wo der Fehler ist ??

Ich Blick im Moment nicht mehr durch !!

Ich danke Euch im Vorraus für Eure Antworten!

Gruß Caretaker

Re: Problem mit Ordner erstellen und Daten kopieren

Verfasst: 30.10.2007 00:39
von Kiffi
keine Ahnung, ob es daran liegt, aber mir fällt folgendes auf:

Code: Alles auswählen

ProgrammPfad.s = "" ;Space(255)
GetCurrentDirectory_("", @ProgrammPfad)
;MessageRequester("",""+ ProgrammPfad)
GetCurrentDirectory_() liefert den Pfad in der Variablen ProgrammPfad
zurück. Hierfür muss natürlich auch Platz reserviert werden. Also
kommentiere Space(255) wieder ein und probiere das noch einmal
aus.

Besser wäre es natürlich, wenn Du direkt die PB-Funktion
GetCurrentDirectory() verwenden würdest:

Code: Alles auswählen

ProgrammPfad.s = GetCurrentDirectory()
;-)

Des weiteren würde ich generell die Rückgabewerte einzelner Funktionen
auswerten:

Code: Alles auswählen

If InitDatabase()
  If OpenDatabase(...)
    If DatabaseQuery(...)
Grüße ... Kiffi

Verfasst: 30.10.2007 00:51
von HeX0R
Einen Ordner kannst du übrigens besser via FileSize() auf Existenz überprüfen (Ergebnis = -2).
Willst du dennoch ExamineDirectory() verwenden, darfst du das FinishDirectory() nicht vergessen.

Und GOTOs haben eigentlich heutzutage nix mehr in Codes verloren, das is aber natürlich Geschmackssache.

Ausserdem sind die Fehlermeldungen des Debuggers sehr viel aussagekräftiger. Also vielleicht mal im Debug-Modus starten ?

Verfasst: 30.10.2007 10:09
von Tafkadasom2k5
Hm, der Übersichtlichkeit wegen würde ich die Variablen nicht "Variable1" oder so nennen, sondern irgendwie passender.

Dann erstellst du oben die Variable "Verzeichnis". Ich würde Sie als Konstante deklarieren, und dann auch im Code nutzen. Was mich interessieren würde: Wofür ist das Delay überall eingebaut?

> GetCurrentDirectory_("", @ProgrammPfad)
Warum nutzt du hier API? Ich würde einfach das PB-Equivalent dazu nutzen ;) Falls du aber auf die WinAPI zurückgreifen willst, musst du den Speicher vorher reservieren. Das heißt, dass " = Space(255)" ist schon ganz richtig so. Also wieder entkommentieren.

Was mich irritiert:
> CopyFile(ProgrammPfad+"\db.opt", "C:\Programme\MySQL\MySQL Server 6.0\data\rfid\db.opt")
Kopiere von
C:\Programme\MySQL\MySQL Server 6.0\data\rfid\db.opt
nach
C:\Programme\MySQL\MySQL Server 6.0\data\rfid\db.opt

:? Und das Gleiche auch nochmal mit dem Protokoll.

Soweit von mir ;)
Gr33tz
Tafkadasom2k5

Verfasst: 30.10.2007 19:24
von Caretaker
Hallo Leute!!

Erstmal vielen Dank für Eure Antworten! Die haben mir sehr geholfen !

@ Kiffi:

das mit der sofortigen deklarierung

Code: Alles auswählen

ProgrammPfad.s = GetCurrentDirectory()
hat super geklappt, das wars wohl auch!


@ HeXOR:

-bezgl. FinishDirectory: kann es sein, dass es diesen Befehl erst ab PB4.0 gibt ?? Ich hab PB3.93 und ich bekomm immer die Fehlermeldung : "FinishDirectory() is not a function, an array or a linked list"

-bezgl. GoTo: Da ich und mein Kumpel erst seit 3 Wochen mit PB programmieren, erschien es mir am einfachsten damit zu arbeiten!


@ Tafkadasom2k5:

Zu deinen Irritationen ^^!

Mit "GetCurrentDirectory ()" ermittle ich den Pfad meines Programms, nicht den Pfad von Mysql! somit kopiere ich von dem Pfad meines Programms 2 Dateien in den Ordner von MySQL.

Ich hoffe damit hast du es verstanden :P


@ all:

Also, nochmals vielen Dank für Eure schnelle Hilfe!!!!

MFG Caretaker

Verfasst: 30.10.2007 20:42
von HeX0R
Caretaker hat geschrieben: @ HeXOR:
-bezgl. FinishDirectory: kann es sein, dass es diesen Befehl erst ab PB4.0 gibt ?? Ich hab PB3.93 und ich bekomm immer die Fehlermeldung : "FinishDirectory() is not a function, an array or a linked list"
Ja du hast recht, das wurde erst mit PB4.0 eingeführt.
Wenn du eh erst am Anfang deiner PB-Programmiererei bist, solltest du vielleicht besser gleich auf 4.0 updaten bevor du dich später nochmal an ein paar Umstellungen gewöhnen musst.

Wundert mich allerdings wo du 3.93 aufgetrieben hast ?
Du meinst nicht eher 3.94 ?
Caretaker hat geschrieben: Mit "GetCurrentDirectory ()" ermittle ich den Pfad meines Programms, nicht den Pfad von Mysql! somit kopiere ich von dem Pfad meines Programms 2 Dateien in den Ordner von MySQL.

Ich hoffe damit hast du es verstanden :P
Ich glaube du hast es nicht verstanden, weil du mit GetCurrentDirectory nicht den Pfad deines Programmes erhalten wirst... vor allem nicht, wenn du via ExamineDirectory vorher den Pfad auch noch verstellst.