* * * *

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 18, 2024, 03:41:41 am

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

184 Visitatori, 0 Utenti

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

casey

  • Newbie
  • *
  • Post: 43
  • Karma: +0/-0
Re:informazioni per creare database
« Risposta #30 il: Novembre 11, 2021, 12:54:56 am »
Fai attenzione a quando navighi nei record, potresti avere brutte sorprese.

Quando fai delle modifiche (EDIT, INSERT, DELETE) o fai un SELECT, il puntatore al record (chiamato anche cursore) potrebbe non puntare al record che tu ritieni .... ossia quelle operazioni potrebbero modificare il record selezionato.

Inoltre anche altre attività sulla Query (come il refresh) modificano la posizione del cursore.

In genere, per fare una EDIT ad esempio si cerca di fare prima una SELECT che limiti il risultato a un solo rerocrd o a un numero limitato di record (ad esempio tutti quelli che si chiamano PIPPO e sono di Topolinia) poi andando a selezionarlo con il FIRST, NEXT, PREC o LAST.

Ciao

ok,
un errore del genere farebbe casino nel database,


un altra cosa ti volevo chiedere,
quando facevo i programmi negli anni 90,
spesso i clienti volevano dei filtri per data che andava dal periodo x al periodo y,
ad esempio, un centro revisioni che vuole interrogare l'archivio per vedere a quali clienti scade la revisione della macchina
dal 01/10/2021 al 31/10/2021

come andrebbe modificata la riga select order by?
  Form1.ZQuery1.SQL.Text := 'Select * from Utenti order by ID';

per creare un database devo per forza usare programmi esterni come SqliteStudio? o posso usare direttamente il pascal?


 

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:informazioni per creare database
« Risposta #31 il: Novembre 11, 2021, 01:20:16 am »
Puoi filtrare qualsiasi cosa in qualsiasi modo, basta che il database abbia da qualche parte il dato.

In questo caso non ci sono campi "data" e quindi questa operazione non la puoi fare.

Ci sono ancora un "sacco" di modificatori in SQL come WHERE, LIKE e diversi altri. Inoltre puoi usare le espressioni logiche.

Dai una occhiata a qualche tutorial, vedrai che ti sarà più chiara la cosa.

Per creare Tabelle, modificarle o altro lo puoi fare in Pascal, con i comandi "CREATE TABLE" e "ALTER TABLE".

Però, occorre fare attenzione perchè non tutti i database accettano questi costruttori.

In particolare, ricordo che la ALTER TABLE non funziona in SQLite (o almeno non funzionava qualche versione fà). Per farla io usavo un trucco creando una tabella nuova temporanea con i nuovi campi, trasferendo tutti i record dalla vecchia alla nuova, e se andava tutto a buon fine cancellavo la vecchia tabella e rinominavo la nuova.

Se usi invece SQLiteStudio (o altri tool) questi ti rendono trasparente queste funzioni.

Poi, altra cosa con i tool esterni puoi vedere tutte le possibili opzioni e costruire legami logici (ad esempio le foreign keys e le index keys) vedendo cosa stai facendo.

In ogni caso si può fare tutto da runtime in PASCAL.
Ciao
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

casey

  • Newbie
  • *
  • Post: 43
  • Karma: +0/-0
Re:informazioni per creare database
« Risposta #32 il: Novembre 11, 2021, 11:01:03 pm »
where, like, non li conosco proprio,
ancora ho tanta strada da fare,

ho provato a scaricare l manuale di lazarus completo che si trova nella pagina principale di questo forum, ma non funziona il link,
dove lo posso trovare?

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:informazioni per creare database
« Risposta #33 il: Novembre 11, 2021, 11:56:14 pm »
Il nuovo link è:
https://www.blaisepascalmagazine.eu/

Il manuale è disponibile in due pubblicazioni diverse con costo di € 65 o € 40 in offerta alla data odierna.

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

casey

  • Newbie
  • *
  • Post: 43
  • Karma: +0/-0
Re:informazioni per creare database
« Risposta #34 il: Novembre 12, 2021, 02:03:46 pm »
Il nuovo link è:
https://www.blaisepascalmagazine.eu/

Il manuale è disponibile in due pubblicazioni diverse con costo di € 65 o € 40 in offerta alla data odierna.

Ciao.

pensavo fosse gratuito,
in questo caso visto che è in inglese non credo ne valga la pena,
non ci capirei molto.

ho comprato quello del c# tempo fa, pagato una 40ina di euro e in italiano,
ma poi non ho mai avuto tempo di leggerlo.


Non mi ricordo se l'ho letto in qualche post o visto in qualche esempio,
il .commit serve per salvare il database? lo devo usare?
ho visto che nell'ispettore degli oggetti c'è abilitato un auto commit,
è sempre la stessa cosa? mi convinene lasciarlo attivo?

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:informazioni per creare database
« Risposta #35 il: Novembre 12, 2021, 02:31:36 pm »
La commit è la funzione legata alla transazione.

Quando si usano le transazioni, il database apre una transazione per ogni operazione / gruppo di operazioni effettuate. E solo al termine positivo di TUTTE le operazioni viene effettuato appunto il commit, ossia la chiusura della transazione con la registrazione effettiva delle operazioni.

Se le operazioni non vanno a buon fine (anche solo una) il database effettua un rollback, ossia ritorna allo stato precedente all'inizio transazione.

In genere le transazioni vengono usate e attivate dal programma applicativo e chiuse sempre dal programma applicativo. Il rollback invece è a discrezione del database (nel senso che qualche database c'è l'ha implicito altri no).

L'autocommit fà si che il componente esegua in automatico una transazione per ogni operazione, registrando le modifiche solo se la transazione và a buon fine.

Ciao
« Ultima modifica: Novembre 12, 2021, 02:35:02 pm da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

casey

  • Newbie
  • *
  • Post: 43
  • Karma: +0/-0
Re:informazioni per creare database
« Risposta #36 il: Novembre 15, 2021, 01:39:14 am »
sto sviluppando il mio primo archivio usando sqlite come da te suggerito,

è un archivio di clienti di un negozio,

per l'inserimento dei clienti tutto ok,
ho creato il form con i tedit e alla fine va a salvare nel database,
funziona perfettamente.

ora sto creando il form per la ricerca dei clienti,

nel form con un tedit chiede il nome del cliente da cercare,
e poi premendo sul tasto cerca,
dovrei andare a farlo cercare nel database,

che diavolo ci devo mettere qui:
  DataModule1.ZQuery1.SQL.Text := 'Select * from clienti order by nomecliente = '+TEnome.text;

è corretto?

provando a fare una ricerca mi viene fuori il messaggio "Il progetto ha sollevato un errore di classe EZSQLException

come devo settare DataModule1.ZQuery1sql.text in modo che cerchi nel database i record contenenti nomecliente(sql) uguale al tedit TENome?

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:informazioni per creare database
« Risposta #37 il: Novembre 15, 2021, 01:46:09 am »
  DataModule1.ZQuery1.SQL.Text := 'Select * from clienti order by nomecliente = '+TEnome.text;

Quella corretta dovrebbe essere:
Codice: [Seleziona]
  DataModule1.ZQuery1.SQL.Text := 'Select * from clienti order by nomecliente = '+'"'+TEnome.text+'";

EDIT: NO ERRATA - LA NOTTE PORTA CONSIGLIO, MA ANCHE RINCOGLION...... :o

Il testo deve essere tra virgolette.

Ciao
« Ultima modifica: Novembre 15, 2021, 07:30:01 am da DragoRosso »
:) 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 #38 il: Novembre 15, 2021, 01:49:46 am »
Altra cosa, l'uguale nella SELECT corrisponde ad un confronto case sensitive .... se vuoi cercare un cognome case insensitive sostituisci l'uguale con LIKE (si proprio la parola LIKE).

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

casey

  • Newbie
  • *
  • Post: 43
  • Karma: +0/-0
Re:informazioni per creare database
« Risposta #39 il: Novembre 15, 2021, 01:54:39 am »
il codice sopra mi da errore durante la compilazione

non ho capito a che servono quelle virgolette, visto che non devono essere nella sql.text

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:informazioni per creare database
« Risposta #40 il: Novembre 15, 2021, 07:28:24 am »
Ero io rinco  :o:

il codice è:

Codice: [Seleziona]
DataModule1.ZQuery1.SQL.Text := 'Select * from clienti where nomecliente = '+'"'+TEnome.text+'"'+' order by nomecliente';
EDIT:------------------------------------------------------------------------------------------------------------^ mancava un apice ....

se è quello che intendevi.
La ricerca per "uguaglianza" del campo deve essere composta da WHERE  e = o LIKE.
Order by è un argomento facoltativo che definisce un ordinamento diverso dallao standard.

Virgolette o apici dovrebbe essere indifferente in Lazarus pr l'SQL.

EDIT: Se non usi le virgolette il valore di TEnome.Text viene preso come nome di un campo (che non esiste evidentemente), non per il valore da ricercare.

Altra cosa: non usare i nomi dei componenti con inizialmente la T maiuscola (TEnome): normalmente vengono usati per definire i tipi (classi, record, etc ...) come TEdit o TLabel. Chiamalo ENome eventualmente. Tieni anche presente che ciò che inizia per "E" si "desidererebbe" fosse un Eccezione (Exception), ma quest'ultima è già meno sentita come esigenza.

Ciao
« Ultima modifica: Novembre 15, 2021, 03:29:34 pm da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

casey

  • Newbie
  • *
  • Post: 43
  • Karma: +0/-0
Re:informazioni per creare database
« Risposta #41 il: Novembre 15, 2021, 01:44:54 pm »
grazie,
tra poco mi rimetto a lavoro e provo,

quindi, sostituendo il simbolo = con like
la ricerca diventa case insensitive,

e la differenza tra like e where qual'è?

in questo modo con .prev e .next si sposta tra i soli record che corrispondono alla ricerca, giusto?
come succedeva con il vecchio dbase.

Se ho una variabile integer totaleclienti ,
e gli voglio assegnare il valore del totale dei clienti presenti nell'archivio,
devo scrivere totaleclienti := zquery1. (cosa?)


ti ringrazio per l'aiuto che mi stai dando,
non mi è stato semplicissimo saltare dalla programmazione del vecchio turbo pascal 6 in dos, alla programmazione oggetti su windows,
dopo che fai un pò di pratica ti rendi conto che non è difficile, ma bisogna cmq lavorarci per comprendere.
Anche nell'altro thread dove ho chiesto come sistemare gli oggetti sul form quando questo viene allargato o reso a tutto schermo,
non mi sembra tanto facile da applicare,
se non come dici tu aumentando la scala,
ma io speravo ci fossero delle proprietà che facevano l'autoaggiustamento in automatico,
con il vecchio dos quest'aspetto era più facile,
cominciavo con un clrscr per pulire la pagina,
e poi sapendo che la schermata era sempre di 80x25,
mi sistemavo il tutto tramite il comando gotoxy,
con windows mica tutti abbiamo la stessa risoluzione,
io per esempio uso 1366x768
ma vedo che tanti addirittura settano 1920,
e poi per leggere ciò che c'è scritto sullo schermo ci vuole il microscopio.
Cmq su quest'aspetto ci lavorerò dopo aver compreso bene come usare sqlite.

Un altra cosa un pò off topic che non ho capito ieri mentre facevo il programma,

nel form1 ho messo un tedit per chiedere la password di accesso,
se sbagliata chiudeva il peogramma,
e e corretta mi apriva il form2 per lavorare.
aprendo il form2 con .showmodal impediva l'uso del form1, ma questo restava visibile sullo schermo, ed io lo volevo chiudere,
ma mettendo form1.close nell'onshow del form2,
mi diceva che non trovava il form1,
perchè? dove sbaglio?
perchè nel form2 non potevo lanciare codice riferito al form1?

alla fine ho tamponato il problema
mettendo il comando form1.hide nel form1 stesso prima di caricare il form2,
se ci mettevo .close, si chiudeva il form e ovviamente poi non caricava neanche il form2,
cmq così non era più visibile, ma è stato solo un metodo arrangiato.



« Ultima modifica: Novembre 15, 2021, 01:53:31 pm da casey »

casey

  • Newbie
  • *
  • Post: 43
  • Karma: +0/-0
Re:informazioni per creare database
« Risposta #42 il: Novembre 15, 2021, 02:29:29 pm »
provato

da sempre errore durante la compilazione

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1266
  • Karma: +43/-0
  • Prima ascoltare, poi decidere
Re:informazioni per creare database
« Risposta #43 il: Novembre 15, 2021, 02:45:40 pm »
Se ho una variabile integer totaleclienti ,
e gli voglio assegnare il valore del totale dei clienti presenti nell'archivio,
devo scrivere totaleclienti := zquery1. (cosa?)

Esegui una query:

Codice: [Seleziona]
Select * from tabella 

dove tabella è il nome della tua tabella.

Poi leggi la proprietà della query RecordCount (ZQuery1.RecordCount) che ti ritorna il numero di record ritornati.
:) 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 #44 il: Novembre 15, 2021, 02:54:17 pm »
quindi, sostituendo il simbolo = con like
la ricerca diventa case insensitive,

e la differenza tra like e where qual'è?

"Where" ci deve essere, puoi usare '=' o 'LIKE' se vuoi avere una ricerca case sensitive o no.

Giusto per incasinarti un pò, se usi LIKE il tuo testo di ricerca può contenere il carattere '%' e la ricerca lo usa come Jolly (un pò come il carattere * per il dos).

"%onno" con il LIKE ti torna "nonno" "tonno" "totonno" "risonno", ma non "sonnolenza" ad esempio.

in questo modo con .prev e .next si sposta tra i soli record che corrispondono alla ricerca, giusto?
come succedeva con il vecchio dbase.

Quello che ritorna un Query è come fosse una tabella limitata ai riusltati della query. Quindi i comandi di "navigazione" lavorano su questa nuova tabella.
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

 

Recenti

How To

Utenti
  • Utenti in totale: 785
  • Latest: gmax
Stats
  • Post in totale: 18769
  • Topic in totale: 2232
  • Online Today: 219
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 184
Total: 184

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.