PDA

Visualizza la versione completa : [DELPHI] Cancellare un campo di un archivio


coslayer
24-12-2007, 11:51
salve a tutti,
sto realizzando un'applicazione in Delphi e mi servono 2 informazioni:
1- ho bisogno di 3 variabili globali a tutte le form del progetto, come faccio a renderle tali?
2- ho creato una procedura deve effettuare la cancellazione di un campo record di un
archivio. ho effettuato soltanto la compattazione degli elementi spostandoli di 1
posizione verso il campo da eliminare. così elimino il campo non desiderato ma mi
rimane l'ultimo campo che è la copia del penultimo. quale è il comando per eliminarlo?

spero di essere stato chiaro.. aspetto consigli ciao e grazie

coslayer
24-12-2007, 14:03
per le variabili globali mi sono documentato, mi sapreste indicare il modo per cancellare un record dall'archivio?

123delphi321
24-12-2007, 16:19
ciao

che database usi?

a che serve "spostare di 1 posizione verso il campo da eliminare"?

coslayer
24-12-2007, 16:25
ciao ti spiego subito
a scuola abbiamo fatto gli archivi e nn siamo ancora arrivati ai database.
il fatto di spostare di una posizione tutti i record verso il campo da eliminare sovrascivendoli mi serve per effettuare il compattamento dell'insieme dei dati. se cancellassi solamente il record mi rimarrebbe uno spazio vuoto( almeno per array e liste uso questo metodo)
nn so se per gli archivi sia necessario ma credo di si(nn sono molto pratico perchè li ho appena studiati).
per favore mi puoi riportare il comando(se esiste :madai!?: )per cancellare un record dall'archivio?
ti ringrazio ancora per il tuo aiuto.

123delphi321
24-12-2007, 16:53
Originariamente inviato da coslayer
ciao ti spiego subito
a scuola abbiamo fatto gli archivi e nn siamo ancora arrivati ai database.
il fatto di spostare di una posizione tutti i record verso il campo da eliminare sovrascivendoli mi serve per effettuare il compattamento dell'insieme dei dati. se cancellassi solamente il record mi rimarrebbe uno spazio vuoto( almeno per array e liste uso questo metodo)
nn so se per gli archivi sia necessario ma credo di si(nn sono molto pratico perchè li ho appena studiati).
per favore mi puoi riportare il comando(se esiste :madai!?: )per cancellare un record dall'archivio?
ti ringrazio ancora per il tuo aiuto.

per l'eventuale compattamento degli archivi ci potrebbero essere degli appositi comandi; ad esempio anni addietro utilizzavo il linguaggio clipper, e per compattare gli archivi eseguivo il comando 'PACK'.
non vorrei sbagliare, ma i database SQL (o almeno per Firebird/Interbase) questo comando non esiste, in quanto e' il database che gestisce il tutto. per eliminare un record da una tabella di un database SQL devi eseguire un comando tipo questo:
'DELETE FROM TABELLA WHERE COLONNA=VALORE'

http://www.morpheusweb.it/html/manuali/sql/sql_delete.asp

ciao

coslayer
24-12-2007, 16:59
ciao grazie dell'aiuto,
il problema però è che io nn ho un database in sql ma soltanto un archivio, un file.dat dove effettuo il lavoro. nn ho problemi per il compattamento perchè ho già realizzato una procedura, mi serve sapere però come poter eliminare un record dell'archivio.
effettuando il compattamento con la mia logica mi ritrovo all'ultimo record la copia del penultimo. per questo motivo ho bisogno di cancellarlo.
credo esista un comando apposito ma nn riesco a trovarlo...
grazie cmq per il tuo interesse

123delphi321
24-12-2007, 17:56
ma questo DAT che archivio e'?
con cosa lo apri?
e' un file ascii?

coslayer
24-12-2007, 21:45
adesso mi chiedi troppo :(
so soltanto che è un archivio e che lo stiamo studiando a scuola.
ha estensione .dat e lo gestisco con comandi tipo rewrite(NomeLogicoFile) per crearlo la prima volta, reset(NLF) per l'apertura e così via....
lo gestisco attraverso un record buffer dello stesso tipo dell'archivio.
nn so se ti ho chiarito il dubbio o se ho peggiorato le cose...
fammi sapere ciao e grazie ancora

coslayer
25-12-2007, 13:22
questa è la dichiarazione del mio archivio
spero con questa possa capire

type Tr_clienti=record
nome:string[30];
cognome:string[50];
end;

...

var clienti:file of Tr_clienti;

ciao

alka
31-12-2007, 18:34
Se non ricordo male, temo che l'unico modo di rimuovere un record sia quello di memorizzare, a partire dalla posizione del record da cancellare, tutti i record successivi all'interno del file.

In sostanza, si sovrascrive il record da cancellare con il successivo nel file, si riportano i record restanti e si chiude l'archivio.

Loading