* * * *

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.
Novembre 21, 2024, 05:24:27 pm

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

88 Visitatori, 1 Utente
 

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

bonmario

  • Hero Member
  • *****
  • Post: 1358
  • Karma: +11/-1
Re:informazioni per creare database
« Risposta #45 il: Novembre 15, 2021, 03:02:10 pm »
quindi, sostituendo il simbolo = con like
la ricerca diventa case insensitive,

Secondo me, ti conviene cercare un mini corso SQL, tanto per avere le basi su come funzionano le select, insert, update ecc.

Ciao, Mario

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1395
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:informazioni per creare database
« Risposta #46 il: Novembre 15, 2021, 03:15:53 pm »
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.

Il metodo ShowModal è un metodo "bloccante", ossia porta in primo piano la Form oggetto dello ShowModal ed il chiamante rimane "inchiodato" in attesa della chiusura della Form. Per rimane inchiodato intendo che non possono essere eseguiti metodi, funzioni od altro che implichino nella Form chiamante la gestione della coda dei messaggi. Il Close, l'Hide, etc... sono tutti metodi che "usano" la coda dei messaggi.

Se vuoi nascondere la Form chiamante (in gergo si chiama Madre) devi usare il metodo Hide (meglio però il "visible = false") prima di chiamare lo ShowModal (come hai fatto giustamente alla fine) e ricordarti di chiamare lo Show (meglio il "visible = true") appena ritorna la Form chiamata (in gergo Figlia).

ATTENZIONE: se chiami il metodo CLOSE della Form principale (ossia la prima Form che il tuo programma crea) .... chiudi l'applicazione.

Per quello che riguarda la gestione della grafica, Windows ed in genere tutti i S.O. che hanno una superficie grafica di lavoro (praticamente tutti oramai, eccetto che tu non svolga programmi console, ossia a linea di comando) hanno logiche, funzionamenti e metodi che non hanno nulla a che fare con il mondo testuale.

Questo non è ne un bene ne un male, bisgona vedere cosa si deve fare (vedi il topic nella Community sull'eterno conflitto Windows vs Linux).

Ci sono altri modi, relativamente semplici, per posizionare i controlli grafici sulla superficie utile, ma questo prevede una progettazione. Non si può generalizzare o fare a caso.

Ad esempio: vuoi mantenere centrati i tuoi componenti ? Poni un oggetto invisibile al centro della FORM, e lega l'Anchor di tutti i componenti a quell'oggetto invisibile.

A Runtime, vedrai che i tuoi componenti saranno sempre centrati nella Form. Però non penso sia l'obiettivo che si voglia ottenere.
 
Fare girare un applicativo (senza usare un motore 3D come Direct3d) su diverse risoluzioni non è così banale.

Pensa che è anni, più di una decina, che il DPI dello schermo (e pensa a più schermi con diversi DPI  ;D ) rappresenta un problema tuttora non risolto completamente. Si, sono state messe delle pezze, ma la soluzione TOTALE non c'è ancora.

Sono convinto però che ognuno con la pratica e con la sua fantasia trovi la soluzione calzante per lui.

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

casey

  • Newbie
  • *
  • Post: 43
  • Karma: +0/-0
Re:informazioni per creare database
« Risposta #47 il: Novembre 15, 2021, 03:18:03 pm »
perfetto, ci sono riuscito,

il codice corretto è:
Codice: [Seleziona]
DataModule1.ZQuery1.SQL.Text := 'Select * from clienti where nomecliente like "%'+TEnome.text+'%"'+' order by nomecliente';


ho usato il % come carattere jolly così è più comodo nelle ricerche,
e invece di = ho usato like in modo da non dovermi preoccupare se il testo era maiuscolo o minuscolo,

il problema erano le virgolette,
free pascal accetta solo l'apice in quella riga lì,
le virgolette vanno messe all'interno dell'apice
« Ultima modifica: Novembre 15, 2021, 03:20:20 pm da casey »

casey

  • Newbie
  • *
  • Post: 43
  • Karma: +0/-0
Re:informazioni per creare database
« Risposta #48 il: Novembre 15, 2021, 03:27:07 pm »
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.

Il metodo ShowModal è un metodo "bloccante", ossia porta in primo piano la Form oggetto dello ShowModal ed il chiamante rimane "inchiodato" in attesa della chiusura della Form. Per rimane inchiodato intendo che non possono essere eseguiti metodi, funzioni od altro che implichino nella Form chiamante la gestione della coda dei messaggi. Il Close, l'Hide, etc... sono tutti metodi che "usano" la coda dei messaggi.

Se vuoi nascondere la Form chiamante (in gergo si chiama Madre) devi usare il metodo Hide (meglio però il "visible = false") prima di chiamare lo ShowModal (come hai fatto giustamente alla fine) e ricordarti di chiamare lo Show (meglio il "visible = true") appena ritorna la Form chiamata (in gergo Figlia).

ATTENZIONE: se chiami il metodo CLOSE della Form principale (ossia la prima Form che il tuo programma crea) .... chiudi l'applicazione.

Per quello che riguarda la gestione della grafica, Windows ed in genere tutti i S.O. che hanno una superficie grafica di lavoro (praticamente tutti oramai, eccetto che tu non svolga programmi console, ossia a linea di comando) hanno logiche, funzionamenti e metodi che non hanno nulla a che fare con il mondo testuale.

Questo non è ne un bene ne un male, bisgona vedere cosa si deve fare (vedi il topic nella Community sull'eterno conflitto Windows vs Linux).

Ci sono altri modi, relativamente semplici, per posizionare i controlli grafici sulla superficie utile, ma questo prevede una progettazione. Non si può generalizzare o fare a caso.

Ad esempio: vuoi mantenere centrati i tuoi componenti ? Poni un oggetto invisibile al centro della FORM, e lega l'Anchor di tutti i componenti a quell'oggetto invisibile.

A Runtime, vedrai che i tuoi componenti saranno sempre centrati nella Form. Però non penso sia l'obiettivo che si voglia ottenere.
 
Fare girare un applicativo (senza usare un motore 3D come Direct3d) su diverse risoluzioni non è così banale.

Pensa che è anni, più di una decina, che il DPI dello schermo (e pensa a più schermi con diversi DPI  ;D ) rappresenta un problema tuttora non risolto completamente. Si, sono state messe delle pezze, ma la soluzione TOTALE non c'è ancora.

Sono convinto però che ognuno con la pratica e con la sua fantasia trovi la soluzione calzante per lui.

Ciao Ciao.

quindi usando .show al posto di showmodal posso dalla form2 controllare anche la form1? che in questo caso non dovrebbe essere bloccata


un altra domandina veloce,
come faccio ad assegnare ad un bottone, che quando premuto mi porti il cursore su un tedit?

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1395
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:informazioni per creare database
« Risposta #49 il: Novembre 15, 2021, 03:32:30 pm »
A memoria dovrebbe essere Controllo.SetFocus (ossia Edit1.SetFocus) o giu di li.
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

casey

  • Newbie
  • *
  • Post: 43
  • Karma: +0/-0
Re:informazioni per creare database
« Risposta #50 il: Novembre 15, 2021, 03:36:08 pm »
A memoria dovrebbe essere Controllo.SetFocus (ossia Edit1.SetFocus) o giu di li.

si si,
era proprio qusto,
appena provato e funziona

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1395
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:informazioni per creare database
« Risposta #51 il: Novembre 15, 2021, 03:41:02 pm »
quindi usando .show al posto di showmodal posso dalla form2 controllare anche la form1? che in questo caso non dovrebbe essere bloccata

Occhio all'uso dello Show per le Form normali, se la Form madre è completamente sovrapposta alla figlia (chiamata con lo show), cliccnado sulla Form madre nascondi la figlia, e nel caso di un touch screen senza tastiera sei nelle pesti ... parlo per esperienza.

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

casey

  • Newbie
  • *
  • Post: 43
  • Karma: +0/-0
Re:informazioni per creare database
« Risposta #52 il: Novembre 15, 2021, 04:24:47 pm »
quindi usando .show al posto di showmodal posso dalla form2 controllare anche la form1? che in questo caso non dovrebbe essere bloccata

Occhio all'uso dello Show per le Form normali, se la Form madre è completamente sovrapposta alla figlia (chiamata con lo show), cliccnado sulla Form madre nascondi la figlia, e nel caso di un touch screen senza tastiera sei nelle pesti ... parlo per esperienza.

Ciao.

non so come ringraziarti,
ora il programma funziona perfettamente,
inserisce le schede dei clienti nel database,
le ricerca con il carattere jolly,
le modifica e le cancella.

Ho voluto fare questo programmino perchè solo sul campo avrei notato ciò che mi sfuggiva,
e finalmente diciamo mi sono fatto una base.

posso chiederti le ultime tre cose?

1) alla fine di un operazione, qual'è il comando per rilanciare il form attuale da zero?
ad esempio, compilo tutti i campi nel form in modo che li memorizzi nel database alla premuta del bottone Salva,
dopo aver salvato appunto, come gli dico ricarica questo form da zero?

2) una cosa che mi chiedevano spesso quando programmavo negli anni 90,
era di ricercare nel database tutti i contratti in scadenza in un determinato periodo,

io ora nel file sql ho creato un campo chiamato scadcontratto del tipo Date,
qual'è la sintassi :
DataModule1.ZQuery1.SQL.Text := 'Select * from clienti where scadcontratto .................

che gli  faccia ricercare le schede con periodo compreso tra 01/01/21 e 31/12/21 ?

3) esiste un comando per uscire dalla procedura in corso?
tipo dopo aver premuto il tasto annulla
« Ultima modifica: Novembre 15, 2021, 04:29:23 pm da casey »

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1395
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:informazioni per creare database
« Risposta #53 il: Novembre 15, 2021, 04:53:54 pm »
2) una cosa che mi chiedevano spesso quando programmavo negli anni 90,
era di ricercare nel database tutti i contratti in scadenza in un determinato periodo,

io ora nel file sql ho creato un campo chiamato scadcontratto del tipo Date,
qual'è la sintassi :
DataModule1.ZQuery1.SQL.Text := 'Select * from clienti where scadcontratto .................

che gli  faccia ricercare le schede con periodo compreso tra 01/01/21 e 31/12/21 ?

Il formato della data che si usa (almeno io) in SQLite per la comparazione è:

Codice: [Seleziona]
                                              ' Data >= ' + QuotedStr(FormatDateTime('yyyy-mm-dd''T''hh:nn:ss',datainiziale)) +
                                              ' AND Data <= ' + QuotedStr(FormatDateTime('yyyy-mm-dd''T''hh:nn:ss',datafinale))

//dove datainiziale e datafinale sono in formato TDateTime. QuotedStr è la funzione che ti consente di racchiudere un argomento testuale tra virgolette, senza rompersi con i caratteri.

//Quindi la tua query sarà:

'Select * from clienti where scadcontratto >= ' + QuotedStr(FormatDateTime('yyyy-mm-dd''T''hh:nn:ss', datainiziale)) +
                                              ' AND scadcontratto <= ' + QuotedStr(FormatDateTime('yyyy-mm-dd''T''hh:nn:ss', datafinale))


Salvo errori ed omissioni  ;D
« Ultima modifica: Novembre 15, 2021, 04:55:26 pm da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1395
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:informazioni per creare database
« Risposta #54 il: Novembre 15, 2021, 05:22:47 pm »
1) alla fine di un operazione, qual'è il comando per rilanciare il form attuale da zero?
ad esempio, compilo tutti i campi nel form in modo che li memorizzi nel database alla premuta del bottone Salva,
dopo aver salvato appunto, come gli dico ricarica questo form da zero?

3) esiste un comando per uscire dalla procedura in corso?
tipo dopo aver premuto il tasto annulla

Non c'è un comando che io conosca per ricaricare la Form da "zero" ossia come fosse alla partenza. Devi creare un metodo che riporti tutti i tuoi controlli alla condizione di default.

Non ho capito cosa intendi per "uscire dalla procedura in corso". Il tuo programma gestisce le proprie fasi di elaborazione e quando premi un tasto (ad esempio Annulla) dovrà eseguire qualcosa tipo chiudere un DialogBox, non scrivere dati, non aggiornare variabili, etc ....

Se ti riferisci invece al ritorno del dato di una finestra modale (quella visualizzata con lo ShowModal), quando la finestra si chiude deve assegnare un valore alla propria proprietà ModalResult. Questo valore è il risultato che la funzione ShowModal ritornerà al chiamante.
Normalmente si usa 'mrOK' per dare l'OK alle operazioni e 'mrCancel' (che è il default assegnato al tasto Annulla di una DialogBox) per dire che qualcosa è andato storto e l'operazione è stata annullata.

Codice: [Seleziona]
if Form2.ShowModal = mrOK then
  begin
     ------ TUTTO OK
  end
else
  begin
     ------ TUTTO KO
  end;

EDIT: quando premi un tasto in una finestra modale, la sua proprietà ModalResult viene assegnata in automatico alla Form. Quindi la la ModalResult dell'ulitmo tasto che premi prima dell'uscita sarà quella assegnata allo ShowModal (a meno che nell'evento di chiusura tu non vada a sovrascriverla).
 
Ciao
« Ultima modifica: Novembre 15, 2021, 05:34:18 pm da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

casey

  • Newbie
  • *
  • Post: 43
  • Karma: +0/-0
Re:informazioni per creare database
« Risposta #55 il: Novembre 26, 2021, 04:58:31 pm »
ma con delphi 10 si può usare anche sqlite?
è già integrato?
o bisogna installare qualcosa come zeoslib?

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1395
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:informazioni per creare database
« Risposta #56 il: Novembre 26, 2021, 05:11:42 pm »
Con Delphi è già integrato (FireDAC), ma di fatto è uguale a ZEOS.

Non cambia praticamente nulla.
L'installazione di ZEOS è comunque una operazione semplice, quindi non la vedo come una grossa problematica.

Ciao
« Ultima modifica: Novembre 26, 2021, 05:14:56 pm da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

casey

  • Newbie
  • *
  • Post: 43
  • Karma: +0/-0
Re:informazioni per creare database
« Risposta #57 il: Novembre 26, 2021, 05:27:04 pm »
ok grazie per la risposta,

ma tu pensi che mi convenga comprare delphi 11 insieme a dei colleghi?

avrei più vantaggi o svantaggi?

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1395
  • Karma: +44/-0
  • Prima ascoltare, poi decidere
Re:informazioni per creare database
« Risposta #58 il: Novembre 26, 2021, 05:52:03 pm »
Intanto, ammesso di avere voglia di investire in Delphi, comunque verrebbe concessa una sola installazione.

Potete usare per un anno la versione Community, l'ultima è la 10.4.2 CE, che è gratuita per quel periodo.

E di questa ne potete avere una a testa. Fermo restando che non dovete avere introiti sulla attività legata alla programmazione per più di tot Euro all'anno (non ricordo quanto sia il tot).

EDIT: Non potete usare la CE per fare applicazioni commerciali, ossia da vendere (a meno che non abbiano cambiato la licenza).

Altra cosa, è che ovviamente poi bisogna scegliere se continuare (e pagare) oppure rivolgersi ad altro.

Io ho la licenza di Delphi, ma tutto sommato vedo che Lazarus è una buona controparte. Ha la stragrande maggioranza delle funzionalità di Delphi e soddisfa il 99% delle esigenze di un programmatore.

Certo essendo Delphi un progetto gestito e mantenuto da una società strutturata paragoni completi non se ne possono fare.

Giusto un esempio: in un altro post odierno ho allegato un programmino che fà vedere alcuni effetti .... Quello in Delphi si fà in 1 minuto (si fà per dire ...). Ma nella mia vita attuale, e anche quella futura penso, non mi è mai servita ne ritengo userò mai quella tecnologia.

Ciao
« Ultima modifica: Novembre 26, 2021, 05:54:20 pm da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

casey

  • Newbie
  • *
  • Post: 43
  • Karma: +0/-0
Re:informazioni per creare database
« Risposta #59 il: Marzo 18, 2022, 02:09:44 pm »
con sqlite si può lavorare da più postazioni piazzando l'archivio su un server? o bisogna usare mysql?


mysql si può usare con lazarus?
se si come?
stesse istruzioni di sqlite?

grazie

 

Recenti

How To

Utenti
  • Utenti in totale: 803
  • Latest: maXim.FI
Stats
  • Post in totale: 19169
  • Topic in totale: 2286
  • Online Today: 117
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 1
Guests: 88
Total: 89

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.