Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Kleine Datenbank, großes problem

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
CommnaderD



Anmeldungsdatum: 29.12.2009
Beiträge: 4

BeitragVerfasst am: 30.12.2009, 12:10    Titel: Kleine Datenbank, großes problem Antworten mit Zitat

Hallo,
ich habe mir eine kleine Datenbank programmiert, die Namen, Geburtsdaten, Eigenschaften, und Adressen von Leuten anzeigt. Nur ürgendwie will das Programm nicht so richtig laufen ...
Ich habe Qbaic 1.1 und er sagt immer, das es beim OPEN Befehl einen Fehler gibt. Kann mir jmd. helfen ?


Code:

CLS
PRINT
FOR i% = 1 TO 3
  y$ = ""
  PRINT " Gib das Passwort ein  ("; i%; "/ 3 )  : ";
  DO:
    LOCATE , , 1  'Cursor anzeigen
    x$ = INKEY$: IF x$ = CHR$(13) THEN EXIT DO  'Exit with Enter Key
    IF x$ <> "" THEN y$ = y$ + x$: PRINT "*";
  LOOP
  IF y$ = "abc" THEN
    CLS
    GOTO centrum
    SLEEP
    SYSTEM        'Ende wenn Passwort abc richtig eingegeben
  ELSE
    PRINT "   !!! Das Passwort ist falsch !!!"
    PRINT
    PRINT
  END IF
NEXT i%
WHILE 1: WEND 'Ewige Dauerschleife, wennn 3x falsche Eingabe ==> Rechner
END           'muss neu gestartet werden !!!

centrum:
CLS
PRINT "***************** Database ******************"
PRINT
dataname$ = ".dat"
picturename$ = ".jpg"
INPUT "Name : "; filename$
b$ = filename$ + dataname$
OPEN b$ FOR INPUT AS #1
INPUT #1, a$, b$, c$
PRINT "Name : ", filename$
PRINT "---------------------------------------------"
PRINT "Geburtstag    : ", a$
PRINT "Adresse       : ", b$
PRINT "Eigenschaften : ", c$
PRINT "---------------------------------------------"
INPUT " Bild zeigen (J/N) "; bild$
IF bild$ = "J" THEN GOTO bild
CLOSE
END
bild:
bildd$ = filename$ + picturename$
CLS
filename$ = bildd$
OPEN filename$ FOR BINARY AS #1

header$ = SPACE$(14)
sizing$ = SPACE$(4)
GET #1, 1, header$
GET #1, 15, sizing$
bmpinfosize = CVI(sizing$)

IF bmpinfosize = 12 THEN
   infoheader$ = SPACE$(12)
   GET #1, 15, infoheader$
   nbits = CVI(MID$(infoheader$, 15, 4))
 
   IF nbits = 1 THEN
      palet$ = SPACE$(6)
      GET #1, bmpinfosize + 15, palet$
   ELSEIF nbits = 4 THEN
      palet$ = SPACE$(48)
      GET #1, bmpinfosize + 15, palet$
   ELSEIF nbits = 8 THEN
      palet$ = SPACE$(768)
      GET #1, bmpinfosize + 15, palet$
   END IF
ELSEIF bmpinfosize = 40 THEN
   infoheader$ = SPACE$(40)
   GET #1, 15, infoheader$
   nbits = CVI(MID$(infoheader$, 15, 4))
   IF nbits = 1 THEN
      palet$ = SPACE$(8)
      GET #1, bmpinfosize + 15, palet$
   ELSEIF nbits = 4 THEN
      palet$ = SPACE$(64)
      GET #1, bmpinfosize + 15, palet$
   ELSEIF nbits = 8 THEN
      palet$ = SPACE$(1024)
      GET #1, bmpinfosize + 15, palet$
   END IF
END IF
   

ft$ = MID$(header$, 1, 2)
'PRINT "Type of file (Should be BM): "; ft$

filesize = CVL(MID$(header$, 3, 4))
'PRINT "Size of file: "; filesize

r1 = CVI(MID$(header$, 7, 2))
'PRINT "Reserved 1: "; r1

r2 = CVI(MID$(header$, 9, 2))
'PRINT "Reserved 2: "; r2

offset = CVL(MID$(header$, 11, 4))
'PRINT "Number of bytes offset from beginning: "; offset

'PRINT

headersize = CVL(MID$(infoheader$, 1, 4))
'PRINT "Size of header: "; headersize

picwidth = CVL(MID$(infoheader$, 5, 4))
'PRINT "Width: "; picwidth
'
picheight = CVL(MID$(infoheader$, 9, 4))
'PRINT "Height: "; picheight

nplanes = CVI(MID$(infoheader$, 13, 4))
'PRINT "Planes: "; nplanes

'PRINT "Bits per plane: "; nbits

'PRINT

IF headersize = 40 THEN
'   PRINT "Compression: ";
   comptype = CVL(MID$(infoheader$, 17, 4))
   IF comptype = 0 THEN PRINT "None"
   IF comptype = 1 THEN PRINT "Run Length - 8 Bits"
   IF comptype = 2 THEN PRINT "Run Length - 4 Bits"
 
   imagesize = CVL(MID$(infoheader$, 21, 4))
'   PRINT "Image Size (bytes): "; imagesize
 
   xsize = CVL(MID$(infoheader$, 25, 4))
'   PRINT "X size (pixels per metre): "; xsize
 
   ysize = CVL(MID$(infoheader$, 29, 4))
'   PRINT "Y size (pixels per metre): "; ysize
 
   colorsused = CVL(MID$(infoheader$, 33, 4))
'   PRINT "Number of colours used: "; colorsused
 
   neededcolours = CVL(MID$(infoheader$, 37, 4))
'   PRINT "Number of important colours: "; neededcolours
END IF
'PRINT
'PRINT "Press Any key to continue."
'WHILE INKEY$ = ""
'WEND

IF nbits = 1 THEN
   SCREEN 11
ELSEIF nbits = 4 THEN
   SCREEN 12
ELSEIF nbits = 8 OR nbits = 24 THEN
   SCREEN 13
END IF
IF bmpinfosize = 40 THEN ngroups = 4
IF bmpinfosize = 12 THEN ngroups = 3

IF nbits = 24 THEN
   IF ngroups = 3 THEN
      FOR c = 0 TO 63
         d = c * 4
         palet$ = palet$ + CHR$(d) + CHR$(d) + CHR$(d)
         palet$ = palet$ + CHR$(d) + CHR$(d) + CHR$(d + 1)
         palet$ = palet$ + CHR$(d) + CHR$(d + 1) + CHR$(d)
         palet$ = palet$ + CHR$(d + 1) + CHR$(d) + CHR$(d)
      NEXT c
   ELSEIF ngroups = 4 THEN
      FOR c = 0 TO 63
         d = c * 4
         palet$ = palet$ + CHR$(d) + CHR$(d) + CHR$(d) + CHR$(0)
         palet$ = palet$ + CHR$(d) + CHR$(d) + CHR$(d + 1) + CHR$(0)
         palet$ = palet$ + CHR$(d) + CHR$(d + 1) + CHR$(d) + CHR$(0)
         palet$ = palet$ + CHR$(d + 1) + CHR$(d) + CHR$(d) + CHR$(0)
      NEXT c
   END IF
END IF

FOR x = 1 TO LEN(palet$) STEP ngroups
   zb# = INT((ASC(MID$(palet$, x, 1))) / 4)
   zg# = INT((ASC(MID$(palet$, x + 1, 1))) / 4)
   zr# = INT((ASC(MID$(palet$, x + 2, 1))) / 4)
   zc# = zb# * 65536# + zg# * 256# + zr#
   cres = ASC(MID$(palet$, x + 3, 1))
   PALETTE ((x - 1) / ngroups), zc#
NEXT x

IF nbits = 24 THEN
   y = picheight - 1
   x = 0
   dat$ = "   "
   WHILE y >= 0
      WHILE x < picwidth
         GET 1, , dat$
         p1 = INT((ASC(MID$(dat$, 1, 1)) + ASC(MID$(dat$, 1, 1)) + ASC(MID$(dat$, 1, 1))) / 3)
         PSET (x, y), p1
         x = x + 1
      WEND
      y = y - 1
      x = 0
   WEND
ELSEIF nbits = 8 THEN
   y = picheight - 1
   x = 0
   dat$ = " "
   WHILE y >= 0
      WHILE x < picwidth
         GET 1, , dat$
         PSET (x, y), ASC(dat$)
         x = x + 1
      WEND
      y = y - 1
      x = 0
   WEND
ELSEIF nbits = 4 THEN
   y = picheight - 1
   x = 0
   dat$ = " "
   WHILE y >= 0
      WHILE x < picwidth
        GET 1, , dat$
        LOCATE 1, 1
        p1 = ASC(dat$) AND 15
        p2 = ASC(dat$) AND 240 / 16
        PSET (x, y), p1
        PSET (x + 1, y), p2
        x = x + 2
      WEND
      y = y - 1
      x = 0
   WEND
ELSEIF nbits = 1 THEN
   y = picheight - 1
   x = 0
   dat$ = " "
   WHILE y >= 0
      WHILE x < picwidth
        GET 1, , dat$
        p1 = ASC(dat$)
        FOR p = 0 TO 7
           PSET (x + (7 - p), y), (p1 AND 2 ^ p) / 2 ^ p
        NEXT p
        x = x + 8
      WEND
      y = y - 1
      x = 0
   WEND
END IF

CLOSE

Die Datei hatte ich natürlich für einen Testlauf angelegt "Max Mustermann.txt" das standen dann so ürgendwelche Daten wie "2.9.1988, Deutschland , ..." drin.
_________________
Was du nicht willst, was man dir tuh, das füg auch keinem Computer zu!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 30.12.2009, 13:04    Titel: Antworten mit Zitat

Hallo und Willkommen im QB-Forum!


Bei welchem OPEN kommt was für eine Fehlermeldung? Beim Öffnen der Bilddatei springst du nämlich vor dem CLOSE zum nächsten OPEN.

Code:
IF bild$ = "J" THEN GOTO bild
CLOSE
END
bild:
bildd$ = filename$ + picturename$
CLS
filename$ = bildd$
OPEN filename$ FOR BINARY AS #1


Da müsste dann also irgendwas von "Datei bereits geöffnet" oder so kommen.

Du kannst GOTO natürlich benutzen, auch wenn es nicht sehr schön ist. Was du aber nicht machen darfst ist folgendes. Weiter oben in deinem Programm springst du mit GOTO aus der IF...THEN Bedingung hinaus, die auf diese Weise nicht mit END IF abgeschlossen wird.

Code:
  DO:
    LOCATE , , 1  'Cursor anzeigen
    x$ = INKEY$: IF x$ = CHR$(13) THEN EXIT DO  'Exit with Enter Key
    IF x$ <> "" THEN y$ = y$ + x$: PRINT "*";
  LOOP
  IF y$ = "abc" THEN
    CLS
    GOTO centrum
    SLEEP
    SYSTEM        'Ende wenn Passwort abc richtig eingegeben
  ELSE
    PRINT "   !!! Das Passwort ist falsch !!!"
    PRINT
    PRINT
  END IF


Das ist ganz schlecht.


Gruß
Skilltroni
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
CommnaderD



Anmeldungsdatum: 29.12.2009
Beiträge: 4

BeitragVerfasst am: 01.01.2010, 12:57    Titel: Antworten mit Zitat

Danke, das Forum ist echt nett.

Ich habe Probleme beim 1. OPEN . Da sagt er, er habe einen "unzulässigen Dateiname". Ich brauch nen Kaffee...
_________________
Was du nicht willst, was man dir tuh, das füg auch keinem Computer zu!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 01.01.2010, 14:42    Titel: Antworten mit Zitat

Entspricht der Dateiname dem 8.3-Format? (maximal drei Buchstaben in der Endung, maximal 8 Buchstaben davor, keine Sonderzeichen wie z. B. Umlaute)
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
CommnaderD



Anmeldungsdatum: 29.12.2009
Beiträge: 4

BeitragVerfasst am: 04.01.2010, 09:56    Titel: Antworten mit Zitat

oh... meine Datein snd meistens länger (Es sind Namen) z.B. Max Mustermann mit dem Kopf durch die Mauer wollen
_________________
Was du nicht willst, was man dir tuh, das füg auch keinem Computer zu!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 04.01.2010, 22:02    Titel: Antworten mit Zitat

Wenn Du lange Dateinamen in QB unterstützen möchtest, musst Du auf spezielle APIs zurückgreifen. Beispielcode von früher von mir:

http://beilagen.dreael.ch/QB/AKTPFAD2.BAS

=> es gibt auch spezielle Umwandlungsfunktionen, um aus C:\Dokumente und Einstellungen\Hans Muster\Eigene Dateien die Kurzform C:\DOKUME~1\HANSMU~1\EIGENE~1 ermitteln können und umgekehrt.

Wichtig: Selber etwas mit Stringfunktionen der Art
Code:
UCASE$(LEFT$(langesLabel$, 6)) + "~1"

sollte unterlassen werden, weil Du ja nicht weisst, ob es "~1" oder "~2" bei mehreren gleich beginnenden Namen heisst. Ausserdem macht Samba ein komplett anderes Name Mangling.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
CommnaderD



Anmeldungsdatum: 29.12.2009
Beiträge: 4

BeitragVerfasst am: 06.01.2010, 22:04    Titel: Antworten mit Zitat

werde ich versuchen danke lächeln
_________________
Was du nicht willst, was man dir tuh, das füg auch keinem Computer zu!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 06.01.2010, 22:05    Titel: Antworten mit Zitat

Das macht soo keinen Sinn mehr heute. Nicht, wenn es einen ganz argen Grund gibt, eine veraltete DOS-Sprache zu benutzen. Nimm FreeBASIC, das hat die selbe Syntax und kann ohne Weiteres auf lange Dateinamen zugreifen. zwinkern
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz