 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
CommnaderD
Anmeldungsdatum: 29.12.2009 Beiträge: 4
|
Verfasst am: 30.12.2009, 12:10 Titel: Kleine Datenbank, großes problem |
|
|
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 |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 30.12.2009, 13:04 Titel: |
|
|
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 |
|
 |
CommnaderD
Anmeldungsdatum: 29.12.2009 Beiträge: 4
|
Verfasst am: 01.01.2010, 12:57 Titel: |
|
|
Danke, das Forum ist echt nett.
Ich habe Probleme beim 1. OPEN . Da sagt er, er habe einen "unzulässigen Dateiname".  _________________ Was du nicht willst, was man dir tuh, das füg auch keinem Computer zu! |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 01.01.2010, 14:42 Titel: |
|
|
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 |
|
 |
CommnaderD
Anmeldungsdatum: 29.12.2009 Beiträge: 4
|
Verfasst am: 04.01.2010, 09:56 Titel: |
|
|
oh... meine Datein snd meistens länger (Es sind Namen) z.B. Max Mustermann  _________________ Was du nicht willst, was man dir tuh, das füg auch keinem Computer zu! |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 04.01.2010, 22:02 Titel: |
|
|
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 |
|
 |
CommnaderD
Anmeldungsdatum: 29.12.2009 Beiträge: 4
|
Verfasst am: 06.01.2010, 22:04 Titel: |
|
|
werde ich versuchen danke  _________________ Was du nicht willst, was man dir tuh, das füg auch keinem Computer zu! |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 06.01.2010, 22:05 Titel: |
|
|
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.  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
|
|
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.
|
|