Newsgroup: it.comp.lang.visual-basic
Titolo: [NEWBIE] PROGRAMMA HEEEEEELP!!

Ciao a tutti!! Spiego subito il mio problema:
Sto creando un programma sotto MS-DOS (il PC su cui girerà è un vecchio 386)
e che serve a gestire un database di utenti. Bene, direte voi... e allora?
Il problema è questo: devo CREARE un database e LEGGERE dal database...
questo database può essere creato così:
INPUT "",Nome$
INPUT "",Cogome$
Ecc.
E poi scritti così nel file "DATABASE.DAT"
OPEN "DATABASE.DAT" FOR APPEND AS#1
PRINT #1, Nome$
PRINT #1, Cognome$
PRINT #1, "[END]"
Praticamente il programma deve cercare con nome o cognome i dati, e stampare
tutti i dati di quell'utente... il database sarà, quindi, tipo questo:
Davide
Rossi
[END]
Pasquale
Verdi
[END]
e così via... come posso fare? HEEEELP!
-Davide
ringm...@inwind.it

 wrote in message
news:CbdK7.130328$sq5.6...@news.infostrada.it...

Visual Basic non funziona sotto DOS. Devi usare QuickBasic (se lo trovi
ancora in giro).
I commandi Open filename as ...., Line Input, etc.. sono gli stessi.
Sal

 e così via... come posso fare? HEEEELP!
Mi sfugge l'utilita' del "[END]" comunque...
Ci sono tanti modi diversi per farlo, non mi e' chiaro cosa non riesci a
fare.
Comunque ti mostro uno dei possibili esempi.
'costanti per lunghezza massima di nome e cognome
const MaxDimNome = 30
const MaxDimCognome = 60
'Contatore numero record dell'archivio
TotRecord as long
'dichiarazione di un tipo per gestire il record con i dati per ogni utente
type tp_MyRecord
    Nome as string * MaxDimNome
    Cognome as string * MaxDimCognome
end type
'vettore contenente tutti i record
VetDatabase() as tp_MyRecord
'Sub per registrare archivio
private sub SalvaArchivio(NomeArchivio as string)
dim NFile as integer, i as long
NFile = freefile()
open NomeArchivio for binary as NFile
put #1,1, TotRecord
for i = 0 to TotRecord -1
    put #1,, VetDatabase(i)
next i
close #nfile
end sub
'sub per caricare archivio
private sub CaricaArchivio(NomeArchivio as String)
dim NFile as integer, i as Long
NFile = FreeFile()
open NomeArchivio for binary as NFile
get #NFile,1, TotRecord
redim VetDatbase(TotRecord)
for i = 0 to TotRecord-1
    get #Nfile,, VetDatabase(i)
next i
close #nfile
end sub
'per fare ricerche nel database userai loop simili al seguente
for i = 0 to TotRecord-1
    if (Trim(VetDatabase(i).Nome) = "Pinco" and _
        Trim(VetDatabase(i).Cognome) = "pallino" ) then ....
next i
Tieni conto che questo esempio e' basato sull'idea di usare vettori con
indicizzazione che parte da zero
Ossia
option base 0
E non ho inserito alcun controllo per eventuali errori ne' dichiarazioni per
l'area di validita' di tipi e variabili (public, private ecc.)
Ultima cosa.
La funzione Trim() serve per eliminare gli spazi non significativi in una
stringa.
Se usi un record con stringhe di dimensione fissa come nell'esempio, devi
ricordarti prima di confrontarle di usare trim() perche' ogni stringa una
volta messa nel record verra' aumentata con spazi a destra fino a
raggiungere la dimensione prefissata della stringa.
ciao
Paolo B.

 questo database può essere creato così:
Probabilmente hai sbagliato newsgroup. Cmq se per la ricerca non sono richieste grosse
prestazioni (se il file dati rimanesse piccolo dell'ordine di pochi megabyte), ti
consiglio di strutturare cosi' il tuo database: utilizzi una sola riga per ogni record e
dividi i singoli campi con un simbolo speciale (uno a caso: il punto e virgola per
esempio). In poche parole non hai altro che un file di testo su cui poi effettuare le
ricerche.

 ha scritto nel messaggio
news:gdfK7.2639$zO1.1...@news2.tin.it...


 dove ha trovato fino a [END].
Utilità INUTILE (che bell'ossimoro) quella di [END]: se avessi i record riga per riga
non avresti bisogno del marcatore, avresti meno cicli di lettura (un solo ciclo per un
solo record, anziche' n cicli tanti quanti sono i campi), e quindi meno chiamate alle
funzioni di accesso al disco che come si sa hanno il loro bell'overhead di tempo per la
loro chiamata (e sai benissimo quanto siano importanti ricerche veloci su un DB).

 ha scritto nel messaggio
news:LmpK7.3675$zO1.1...@news2.tin.it...


QuickBasic da esaminare?
  Non so quanti ce ne siano, prova con un motore di ricerca.
  Ciao :-)
  Massimo
  Nell'indirizzo, inserire una "h" tra la "t" e la "u"
  In the address, insert an "h" between the "t" and the "u"


Scusa, la domanda non era abbastanza chiara per me ;-))
Comunque, non vedo problemi di perfomance col QuickBasic. Inoltre concordo
con Jabba che ogni record deve stare su una linea. Devi solo scegliere il
separatore. Il punto e virgola non sarebbe male, visto che é raro
utilizzarlo in un db anagrafico. NON usare la chiocciola ! Per evidenti
ragioni. %, ^, |, potrebbero essere usati.
Un file di questo tipo sarebbe facilmente letto da Excel per esempio.
Visto che QuickBasic non ha la funzione di split, te la devi fare a manina.
Però potresti creare i campi con una lunghezza definita, così utilizzi MID$
con valori di constanti indicanti la lunghezza di ogni campo; in questo caso
non avresti bisogno di separatore e potresti ustilizzare QUALSIASI simbolo
all'interno del data del campo. Naturalmente prenderebbe più spazio, non
essendo ottimizzato.
Ciao
Sal