Problem mit Ordner erstellen und Daten kopieren

Anfängerfragen zum Programmieren mit PureBasic.
Caretaker
Beiträge: 9
Registriert: 14.09.2007 13:22

Problem mit Ordner erstellen und Daten kopieren

Beitrag 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
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Problem mit Ordner erstellen und Daten kopieren

Beitrag 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
a²+b²=mc²
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag 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 ?
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag 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
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Caretaker
Beiträge: 9
Registriert: 14.09.2007 13:22

Beitrag 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
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag 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.
Antworten