* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

Trascinare un file nel programma
DB concetti fondamentali e ZeosLib
Recuperare codice HTML da pagina web
Mandare mail con Lazarus
Stabilire il sistema operativo
Esempio lista in pascal
File INI
Codice di attivazione
Realizzare programmi multilingua
Lavorare con le directory
Utilizzare Unità esterne
TTreeView
TTreeview e Menu
Generare controlli RUN-TIME
LazReport, PDF ed immagini
Intercettare tasti premuti
Ampliare Lazarus
Lazarus e la crittografia
System Tray con Lazarus
UIB: Unified Interbase
Il file: questo sconosciuto
Conferma di chiusura di un applicazione
Liste e puntatori
Overload di funzioni
Funzioni a parametri variabili
Proprietà
Conversione numerica
TImage su Form e Panel
Indy gestiore server FTP lato Client
PopUpMenu sotto Pulsante (TSpeedButton)
Direttiva $macro
Toolbar
Evidenziare voci TreeView
Visualizzare un file Html esterno
StatusBar - aggirare l'errore variabile duplicata
Da DataSource a Excel
Le permutazioni
Brute force
Indy 10 - Invio email con allegati
La gestione degli errori in Lazarus
Pascal Script
Linux + Zeos + Firebird
Dataset virtuale
Overload di operatori
Lavorare con file in formato JSON con Lazarus
Zeos ... dietro le quinte (prima parte)
Disporre le finestre in un blocco unico (come Delphi)
Aspetto retrò (Cmd Line)
Lazarus 1.0
Come interfacciare periferica twain
Ubuntu - aggiornare free pascal e lazarus
fpcup: installazioni parallele di lazarus e fpc
Free Pascal e Lazarus sul Raspberry Pi
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Creare un server multithread
guida all'installazione di fpc trunk da subversion in linux gentoo
Indice
DB concetti fondamentali e connessioni standard
Advanced Record Syntax
DB concetti fondamentali e DBGrid
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
Advanced Record Syntax: un esempio pratico
Superclasse form base per programmi gestionali (e non)
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Installare lazarus su mac osx sierra
immagine docker per lavorare con lazarus e free pascal
TDD o Test-Driven Development
Benvenuto! Effettua l'accesso oppure registrati.
Aprile 19, 2024, 05:48:59 pm

Inserisci il nome utente, la password e la durata della sessione.

382 Visitatori, 1 Utente
 

Autore Topic: informazioni per creare database  (Letto 10918 volte)

casey

  • Newbie
  • *
  • Post: 43
  • Karma: +0/-0
informazioni per creare database
« il: Novembre 08, 2021, 11:32:09 pm »
ciao a tutti,
questo è il mio primo post,

programmavo a livello avanzato in turbo pascal 6 nella metà degli anni 90,
creavo archivi usando i comandi assign, reset, rewrite, close,
all'epoca era cosi.
Poi ho smesso di programmare perchè ho trovato un altro lavoro, e non mi sono più aggiornato.

Visti i tempi duri, vorrei ricominciare a farlo, e così guardando dei corsi su youtube ho capito come funziona la programmazione a oggetti e quanto sia bello Lazarus Pascal,
tutto è stato facile, creare i form, i programmare in pascal come facevo una volta,
il problema che ho sono gli archivi,
siccome le uniche guide che si trovano su youtube sono in lingua straniera, non ci capisco nulla,
e quindi non riesco a capire,
per questo mi rivolgo a voi,

qual'è il miglior modo per creare un database senza dover installare programmi esterni?
ossia, vorrei creare l'applicazione .exe,
e farla funzionare su tutti i pc con windows senza dover installare altro,
qual'è il metodo migliore?

potete crearmi un programmino esempio con form in modo da guardarmelo e capire come funziona il tutto?
ormai mi rendo conto che usare assign, reset ecc sia preistorico.

il programmino che vorrei vedere è composto da due form,
il primo dove con i textbox il cliente potrebbe inserire una rubrica fatta da nome, numero di cellulare, e città di residenza,
mentre nel secondo form, tramite il nome vorrei cercare nel database la scheda del cliente.

Potete aiutarmi?

grazie

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:informazioni per creare database
« Risposta #1 il: Novembre 09, 2021, 12:36:57 am »
E' tardi e ti rispondo parzialmente.

Ciò che dovresti usare è un database, ormai l'uso dei database è abbastanza comune e semplificato. E' quasi più semplice usare un database che un file di testo formattato tipo csv.

Ti consiglio di studiare SQLite, che è un database usabile in tutte le piattaforme. Non necessita di risorse e vi accedi tramite una semplice DLL.

Per accedere al database, ti consiglio Zeosdb, con cui potrai anche accedere ad altri motori come MSSQL, MySql, ....

Per installarli, usa lo strumento Pacchetto, verifca che SQLDBLaz sia installato (è locale non online) e invece zeosdb dal "ONLINE PAKAGE MANAGER"

Per creare un database SQLite puoi usare uno strumento esterno (almeno, io mi trovo meglio con una interfaccia esterna per la creazione). Io uso questo: https://sqlitestudio.pl

Una volta installato, puoi semplicemente copiare la cartella di installazione per spostarlo su altri pc di sviluppo (ad esempio un portatile), non serve installarlo.

Nella directory dove creaerai il tuo eseguibile servirà una dll, precisamente https://www.sqlite.org/2021/sqlite-dll-win64-x64-3360000.zip o https://www.sqlite.org/2021/sqlite-dll-win32-x86-3360000.zip a seconda se il tuo eseguibile è un 32 o un 64 bit.

Intanto queste info, poi il resto.

Ciao
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

casey

  • Newbie
  • *
  • Post: 43
  • Karma: +0/-0
Re:informazioni per creare database
« Risposta #2 il: Novembre 09, 2021, 11:27:27 am »
ti ringrazio molto per la risposta,

penso che questo sqlite sia proprio quello che stavo cercando,
basta una semplice dll per utilizzarlo con le mie applicazioni.

non capisco una cosa, questa:
Per installarli, usa lo strumento Pacchetto, verifca che SQLDBLaz sia installato (è locale non online) e invece zeosdb dal "ONLINE PAKAGE MANAGER"

io ho installato Lazarus scaricandolo dal sito, facendo il normale setup.
SQLDBLaz come verifico se è installato?
e l'online package manager per scaricare zeosdb, dove lo trovo?

potresti crearmi velocemente un esempio come chiesto nel primo post,
in modo che io vedendo gli esempi possa capire come funziona?
insomma, come immagazzinare record tramite form creato da me con textbox,
e come cercarli e richiamarli.

Grazie ancora

ps. che linguaggio mi consiglieresti da imparare oltre a Lazarus/FPC?
tra Java, Javascript, C#/asp.net, PHP, Python
quale conviene imparare al giorno d'oggi?
io vorrei realizzare sia applicazioni per windows come database,
e eventualmente anche applicazioni che girano su browser,
con eventuali APP Android per facilitarne l'uso tramite smartphone/tablet


bonmario

  • Hero Member
  • *****
  • Post: 1300
  • Karma: +10/-1
Re:informazioni per creare database
« Risposta #3 il: Novembre 09, 2021, 11:39:33 am »
Se vuoi, puoi collegarti al DB SQLite senza scaricare nessun componente esterno.

Puoi prendere spunto da questo progetto "C:\lazarus\fpc\3.2.0\source\packages\fcl-db\examples\sqlite3loadlib.lpr" vedere come connetterti al DB e lavorare senza usare oggetti "visuali" (che è quello che di solitio preferisco fare io)

Se invece vai in "C:\lazarus\examples\database\sqldbtutorial3", trovi un progetto un po più complesso

Se non ricordo male, in tutti e 2 i casi, basta copiare la dll corretta nella directory dove crei l'eseguibile.

Ciao, Mario

casey

  • Newbie
  • *
  • Post: 43
  • Karma: +0/-0
Re:informazioni per creare database
« Risposta #4 il: Novembre 09, 2021, 01:34:08 pm »
Ciao Mario, grazie,
non sapevo ci fossero esempi inclusi con l'installazione di Lazarus,
più tardi proverò a dargli un occhiata,
sperando di capirci qualcosa,

sarebbe interessante imparare sia ad usare sia il metodo visuale che non.

Ma sqlite3 è sempre l'sqlite di cui abbiamo parlato sopra, giusto?

sqldb un altro tipo di sql più avanzato?

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:informazioni per creare database
« Risposta #5 il: Novembre 09, 2021, 01:42:19 pm »
SQLDBLaz come verifico se è installato?
e l'online package manager per scaricare zeosdb, dove lo trovo?

Sotto il menu PACCHETTO nella barra dei menu in alto sull'IDE.

potresti crearmi velocemente un esempio come chiesto nel primo post,
in modo che io vedendo gli esempi possa capire come funziona?
insomma, come immagazzinare record tramite form creato da me con textbox,
e come cercarli e richiamarli.

Si, il prima possibile ti posto un esempio semplice visuale.
Nel frattempo puoi dare una occhiata a ciò che ti diceva @bonmario e anche all'indice del forum, dove troverai indicazioni sui DB.

Ma sqlite3 è sempre l'sqlite di cui abbiamo parlato sopra, giusto?
sqldb un altro tipo di sql più avanzato?

SQLite è sempre SQLite. Si usa sempre la versione 3.
Sqldb è solo un'altro modo di riferirsi ad un database generico aderente allo standard SQL (tipo SQLite, MSSQL, MySQL, etc ...).

Ciao
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

casey

  • Newbie
  • *
  • Post: 43
  • Karma: +0/-0
Re:informazioni per creare database
« Risposta #6 il: Novembre 09, 2021, 01:48:36 pm »
SQLDBLaz come verifico se è installato?
e l'online package manager per scaricare zeosdb, dove lo trovo?

Sotto il menu PACCHETTO nella barra dei menu in alto sull'IDE.

potresti crearmi velocemente un esempio come chiesto nel primo post,
in modo che io vedendo gli esempi possa capire come funziona?
insomma, come immagazzinare record tramite form creato da me con textbox,
e come cercarli e richiamarli.

Si, il prima possibile ti posto un esempio semplice visuale.
Nel frattempo puoi dare una occhiata a ciò che ti diceva @bonmario e anche all'indice del forum, dove troverai indicazioni sui DB.

Ma sqlite3 è sempre l'sqlite di cui abbiamo parlato sopra, giusto?
sqldb un altro tipo di sql più avanzato?

SQLite è sempre SQLite. Si usa sempre la versione 3.
Sqldb è solo un'altro modo di riferirsi ad un database generico aderente allo standard SQL (tipo SQLite, MSSQL, MySQL, etc ...).

Ciao

perfetto,
attendo il tuo esempio allora, così me lo studio

tra poco rientro a casa e provo ciò che mi avete suggerito,

ma quindi alla fine tra sqlite, sqldb, mysql, mssql, che cosa cambia?

per quanto riguarda i linguaggi di programmazione oltre a studiarmi bene Lazarus/Fpc che mi piace molto,
quale consigli di imparare?


DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:informazioni per creare database
« Risposta #7 il: Novembre 09, 2021, 01:56:53 pm »
ps. che linguaggio mi consiglieresti da imparare oltre a Lazarus/FPC?
tra Java, Javascript, C#/asp.net, PHP, Python
quale conviene imparare al giorno d'oggi?
io vorrei realizzare sia applicazioni per windows come database,
e eventualmente anche applicazioni che girano su browser,
con eventuali APP Android per facilitarne l'uso tramite smartphone/tablet

Non saprei darti un aiuto su ciò. Dipende tantissimo su cosa vuoi / preferisci lavorare. Python è sicuramente il linguaggio emergente è molto versatile. C# si rivolge al mondo Windows principalmente, Java & Co. invece molto al mondo web. Tutti trattano i database, per quello che riguarda Android anche Lazarus può creare app per Android.

Inoltre Lazarus può creare app x Linux e Mac e ovviamente x Windows, oltre a svariati altri sistemi. Ci sono poi delle estensioni di Lazarus (Pas2Js) che ti consentono di creare un server web "grafico" da visualizzare con un normalissimo browser alla stregua di una normalissima applicazione Windows.

Secondo me se ti inserisci bene con il Pascal, vedrai che ne avrai abbastanza .... anzi non sarà mai abbastanza ....  ;D

Ciao
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:informazioni per creare database
« Risposta #8 il: Novembre 09, 2021, 02:03:17 pm »
ma quindi alla fine tra sqlite, sqldb, mysql, mssql, che cosa cambia?

Hanno ognuno una propria gestione e una propria logica nell'archiviare i dati. L'unica cosa che hanno in comune è che tutti espongo una funzionalità (interfaccia) simile, compatibile con lo standard SQL.
Tutti questi linguaggi si interfacciano tramite delle "dll" ... più o meno  :P

Cambia ciò che stà dietro .... SQLite ha qualche KB di dll, MySql ha qualche decina di MB di dll, MSSql ha qualche centinaio di MB ..... per farla grezza ehhh.

Ciao
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

casey

  • Newbie
  • *
  • Post: 43
  • Karma: +0/-0
Re:informazioni per creare database
« Risposta #9 il: Novembre 09, 2021, 02:11:54 pm »
ma quindi alla fine tra sqlite, sqldb, mysql, mssql, che cosa cambia?

Hanno ognuno una propria gestione e una propria logica nell'archiviare i dati. L'unica cosa che hanno in comune è che tutti espongo una funzionalità (interfaccia) simile, compatibile con lo standard SQL.
Tutti questi linguaggi si interfacciano tramite delle "dll" ... più o meno  :P

Cambia ciò che stà dietro .... SQLite ha qualche KB di dll, MySql ha qualche decina di MB di dll, MSSql ha qualche centinaio di MB ..... per farla grezza ehhh.

Ciao

meglio sqlite allora,
non mi piace avere dll più grandi dell'applicazione stessa,
tanto la funzione è sempre quella.
Non sapevo con con lazarus si potessero fare anche App android, e non conoscevo pas2js,
meglio così, mi concentro su Pascal allora, senza sbattere la testa con altri linguaggi.
All'epoca in cui programmavo, il turbo pascal era molto potente, di gran lunga superiore al Turbo Basic e al QuickBasic 4.5,
e non era difficile da imparare come il Turbo C,
è sempre stato un linguaggio che appaga,
anche ora nonostante non lo conosca bene non avendo seguendo l'evoluzione nel corso degli anni,
vedo che è un linguaggio completo.
 

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:informazioni per creare database
« Risposta #10 il: Novembre 09, 2021, 02:40:45 pm »
Si, meglio SQLite, anche perchè le altre hanno necessità di una installazione ....

Qui un programmino visuale grezzo di prova ... riadattato da un esempio di @xinyiman
Di esempi nel forum ce ne sono a bizzeffe, prova a cercarli.

Non tutti sono perfettamente funzionanti, qualcuno ha bisogno di qualche accorgimento, ma è un buon esercizio.

Ciao
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

casey

  • Newbie
  • *
  • Post: 43
  • Karma: +0/-0
Re:informazioni per creare database
« Risposta #11 il: Novembre 09, 2021, 04:40:05 pm »
Si, meglio SQLite, anche perchè le altre hanno necessità di una installazione ....

Qui un programmino visuale grezzo di prova ... riadattato da un esempio di @xinyiman
Di esempi nel forum ce ne sono a bizzeffe, prova a cercarli.

Non tutti sono perfettamente funzionanti, qualcuno ha bisogno di qualche accorgimento, ma è un buon esercizio.

Ciao

ho guardato tutti gli esempi che mi avete postato,
ma purtroppo così non ci capisco molto,
un esempio completo basilare c'è?
ossia il form completo con le istruzioni necessarie per l'operazione

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:informazioni per creare database
« Risposta #12 il: Novembre 09, 2021, 05:36:57 pm »
Postarti l'esempio non è sufficiente.

Prima dovresti capire come funziona un database, almeno nella sua concezione standard disponibile negli ambienti di sviluppo:

1) Componente di connessione = Consente di connettere un database all'applicazione. I Campi possono essere riempiti a Design Time o a Run Time, ovviamente la connessione (CONNECTED o ACTIVE) deve essere in "false" durante le modifiche, poi bisogna rimmetterla a TRUE.

2) DataSource = Componente che consente una interfaccia per la modifica / inserimento / cancellazione delle righe del database. Non è sempre necessario e viene normalmente inserito per connettere componenti VISUALI -> DATABASE.

3) Query = Componente che consente di effettuare le operazioni (query) sul database. Le operazioni sono SELECT, DELETE, INSERT, .... La sintassi è quella dello standard SQL, con qualche piccola variante per i singoli motori.

4) Table = Componente che consente di abbinare una tabella del database in maniera diretta. All'interno si possono eseguire tutte le operazioni tipo QUERY, muoversi tra i record selezionati (FIRST, NEXT, PRIOR, LAST).

Poi ci sono lo operazioni di POST, che scrivono effettivamente i dati "su disco". I datatbase supportono le "transaction" ossia una serie di operazioni sequenziali che per essere effettive devono terminare con una COMMIT.
Ad esempio se devi fare 10 inserimenti o modiche legate tra loro, se una và male non fai il COMMIT (o in alternativa su qualche motore fai un ROLLBACK) e ciò che hai fatto non viene registrato.

Sembra complesso, ma è più difficile a dirsi che a farsi.

Parti dall'esempio che ti ho postato e cerca di capire come funzionano i vari componenti.

Tutorial in Italiano per Lazarus e ZEOS non sò se ci sono, forse c'è qualcosa in DELPHI che è il cugino ricco di Lazarus: la sintassi è praticamente identica e per i database è molto simile (in ZEOS i componenti si chiamano TZqualcosa, ad esempio TZConnection, mentre l'equivalente in Delphi si chiama TSQLConnection ....)

Ciao
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

casey

  • Newbie
  • *
  • Post: 43
  • Karma: +0/-0
Re:informazioni per creare database
« Risposta #13 il: Novembre 09, 2021, 09:08:49 pm »
Postarti l'esempio non è sufficiente.

Prima dovresti capire come funziona un database, almeno nella sua concezione standard disponibile negli ambienti di sviluppo:

1) Componente di connessione = Consente di connettere un database all'applicazione. I Campi possono essere riempiti a Design Time o a Run Time, ovviamente la connessione (CONNECTED o ACTIVE) deve essere in "false" durante le modifiche, poi bisogna rimmetterla a TRUE.

2) DataSource = Componente che consente una interfaccia per la modifica / inserimento / cancellazione delle righe del database. Non è sempre necessario e viene normalmente inserito per connettere componenti VISUALI -> DATABASE.

3) Query = Componente che consente di effettuare le operazioni (query) sul database. Le operazioni sono SELECT, DELETE, INSERT, .... La sintassi è quella dello standard SQL, con qualche piccola variante per i singoli motori.

4) Table = Componente che consente di abbinare una tabella del database in maniera diretta. All'interno si possono eseguire tutte le operazioni tipo QUERY, muoversi tra i record selezionati (FIRST, NEXT, PRIOR, LAST).

Poi ci sono lo operazioni di POST, che scrivono effettivamente i dati "su disco". I datatbase supportono le "transaction" ossia una serie di operazioni sequenziali che per essere effettive devono terminare con una COMMIT.
Ad esempio se devi fare 10 inserimenti o modiche legate tra loro, se una và male non fai il COMMIT (o in alternativa su qualche motore fai un ROLLBACK) e ciò che hai fatto non viene registrato.

Sembra complesso, ma è più difficile a dirsi che a farsi.

Parti dall'esempio che ti ho postato e cerca di capire come funzionano i vari componenti.

Tutorial in Italiano per Lazarus e ZEOS non sò se ci sono, forse c'è qualcosa in DELPHI che è il cugino ricco di Lazarus: la sintassi è praticamente identica e per i database è molto simile (in ZEOS i componenti si chiamano TZqualcosa, ad esempio TZConnection, mentre l'equivalente in Delphi si chiama TSQLConnection ....)

Ciao

stasera mi metto con calma, e cerco di capirci qualcosa in più,
purtroppo sono rimasto troppo arretrato..
e pensare che 25 anni fa ero un gran programmatore, uno dei migliori qui in zona,
e ora sono scarso,
spero di riprendere ad alti livelli, ma non so se ci riuscirò, all'epoca del dos e di windows 95 era tutto diverso,
un programmatore si creava l'archivio a modo suo, aprivi un file, e ci schiaffavi tutto dentro secondo le regole che facevi tu,
oppure tramite il dbase III plus utilizzavi il database dbf e ti veniva più facile fare archivi,
dbase che per altro non serviva a niente, al contrario del pascal che era un linguaggio completo.
Ora con questi SQL, come dici tu bisogna capire prima di tutto il funzionamento,
mentre per la programmazione ad oggetti, utilizzando i form, devo dire che tutto si fa più velocemente rispetto ad una volta,
e capire come funzionava il tutto è stato piuttosto facile.
Purtroppo in questo mondo chi si ferma è perduto.

Ti ringrazio ancora per l'aiuto

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:informazioni per creare database
« Risposta #14 il: Novembre 09, 2021, 10:02:32 pm »
Non devi preoccuparti, pian piano ci si riprende.
Non è poi cambiato granchè il mondo della programmazione. Sempre codice si scrive, certo magari con qualche assistenza in più ma sempre codice è.

Apprendi bene i concetti OOP, sono fondamentali per fare dei buoni programmi e sopratutto per usare gli strumenti al meglio: tutti i componenti, anche quelli esterni vengono pensati e realizzati in quell'ottica.

I database non sono diversi da quelli che usavamo noi: se ti ricordi l'ISAM, ma anche lo stesso dbase, avevano dei concetti molto simili (tabelle, colonne, righe, indici).

Se vuoi un consiglio, vedi di impratichirti un pò con i concetti e "gioca" con quello che c'è. Prova a cercare delle pubblicazioni su Internet anche solo articoli che ti parlino di uno specifico argomento.

Certo che non conoscere l'inglese è un handicap abbastanza importante nella programmazione. Anche su questo aspetto consiglio di lavorarci.

Ciao e buono studio.
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

 

Recenti

How To

Utenti
  • Utenti in totale: 785
  • Latest: gmax
Stats
  • Post in totale: 18772
  • Topic in totale: 2233
  • Online Today: 578
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 1
Guests: 382
Total: 383

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.