* * * *

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, 05:59:40 am

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

182 Visitatori, 0 Utenti

Autore Topic: Firebird + Zeos  (Letto 26310 volte)

Serpente80

  • Newbie
  • *
  • Post: 27
  • Karma: +0/-0
Firebird + Zeos
« il: Febbraio 22, 2013, 05:17:38 pm »
Salve  :D
Uso Lazarus da un paio di annetti e ho sviluppato qualche programmino su SQLite senza troppi problemi.
Ora vorrei fare il salto e passare a firebird per un progetto un attimo più serio.
Non ho mai avuto a che fare seriamente con DB relazionali.
Ora espongo il mio problema:
Mettiamo che io voglia creare un form "SCHEDA" che contenga i dati del cliente sotto forma di DBedit, e l'elenco degli ordini sotto forma di DBgrid.
Da quello che ho capito dovrei creare 2 tabelle: Clienti e Ordini, creare una relazione tra le 2 e caricare i dati delle rispettive tabelle tramite 2 Zquery e 2 datasource separati.
E' così o sono totalmente in alto mare ?

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2870
  • Karma: +20/-4
Re:Firebird + Zeos
« Risposta #1 il: Febbraio 22, 2013, 05:26:49 pm »
diciamo che ci sei, non sei sicuramente in alto mare
però per gli ordini forse dovresti creare 2 tabelle:
  • testata (con nr. ordine, cod. cliente, riferimento, tipo pagamento, e bla bla bla) ed è qua che devi creare la relazione con la tabella clienti
  • dettaglio (dove si mette il contenuto: di solito un ordine può contenere più articoli) che è legato da una relazione con la testata
Imagination is more important than knowledge (A.Einstein)

Serpente80

  • Newbie
  • *
  • Post: 27
  • Karma: +0/-0
Re:Firebird + Zeos
« Risposta #2 il: Febbraio 22, 2013, 05:31:48 pm »
Si, m'era pure venuto il dubbio che le tabelle dovessere essere addirittura 3.
Ma come le "collego" in modo che passando alla scheda successiva si aggiornino tutti i dati ?
Devo fare tutto via codice o esiste un modo automatico ?

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:Firebird + Zeos
« Risposta #3 il: Febbraio 22, 2013, 05:32:21 pm »
Dove testata faccia da master table per dettaglio...
Altrimenti sai che bordellone cercare di capire ;)
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

Serpente80

  • Newbie
  • *
  • Post: 27
  • Karma: +0/-0
Re:Firebird + Zeos
« Risposta #4 il: Febbraio 22, 2013, 05:46:00 pm »
Avete per caso una buona guida per FlameRobin ? In particolare che mi faccia capire come creare correttamente una relazione tra tabelle.
Ho provato ad impostare primary e foreign key di 2 tabelle ma non so se l'ho fatto in modo giusto.

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2870
  • Karma: +20/-4
Re:Firebird + Zeos
« Risposta #5 il: Febbraio 22, 2013, 06:31:09 pm »
Avete per caso una buona guida per FlameRobin ? In particolare che mi faccia capire come creare correttamente una relazione tra tabelle.
Ho provato ad impostare primary e foreign key di 2 tabelle ma non so se l'ho fatto in modo giusto.

in questo caso non ti serve una guida per flame robin ma una per sql ;)
posta le 2 PK e la "ADD CONSTRAINT"
Imagination is more important than knowledge (A.Einstein)

Serpente80

  • Newbie
  • *
  • Post: 27
  • Karma: +0/-0
Re:Firebird + Zeos
« Risposta #6 il: Febbraio 22, 2013, 06:33:17 pm »
Appena rientro posto il pastrocchio  :)

Serpente80

  • Newbie
  • *
  • Post: 27
  • Karma: +0/-0
Re:Firebird + Zeos
« Risposta #7 il: Febbraio 23, 2013, 11:19:32 am »
Ecco:




nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2870
  • Karma: +20/-4
Re:Firebird + Zeos
« Risposta #8 il: Febbraio 23, 2013, 11:33:48 am »
sembra corretta

permettimi un paio di consigli ;)

1) abituati a leggere il DDL (istruzioni SQL per definizione tabelle etc)
nel tuo caso dovresti trovare
ALTER TABLE ORDINI
ADD CONSTRAINT FK_ORDINI_1
FOREIGN KEY (CLIENTEID) REFERENCES TABLE CLIENTI (ID);
a prescindere dalla GUI che usi, una frase simile verrà comunque generata: se è giusto si vede meglio da quà ;)

2) chiama le primary key come PK_NOME_TABELLA
non è di sicuro una regola ma se dai un prefisso, dall'interno dei tuoi programmi puoi intercettare le eccezioni e tentare di dare un messaggio decente all'utente


Edit:
una domanda: nella tabella CLIENTI c'è un campo ORDINI.
Che uso intendi farne?
« Ultima modifica: Febbraio 23, 2013, 11:44:28 am da nomorelogic »
Imagination is more important than knowledge (A.Einstein)

Serpente80

  • Newbie
  • *
  • Post: 27
  • Karma: +0/-0
Re:Firebird + Zeos
« Risposta #9 il: Febbraio 23, 2013, 11:53:28 am »
Si, la DDL dice esattamente quello che hai scritto.
Il campo ordini in effetti l'ho messo lì ma non mi erano ben chiari alcuni concetti.
Il parametro restrict in update e delete cosa significa ?

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2870
  • Karma: +20/-4
Re:Firebird + Zeos
« Risposta #10 il: Febbraio 23, 2013, 01:47:22 pm »
Il parametro restrict in update e delete cosa significa ?

nul tuo caso significa che non puoi cambiare il campo ID di un record della tabella CLIENTI se c'è un solo record nella tabella ORDINI dove il campo CLIENTEID ha il suo riferimento.

se fosse stato specificato CASCADE si avrebbe avuto un comportamento un sacco interessante: al variare del valore del campo ID di un record della tabella CLIENTI, tutti i record della tabella ORDINI (dove si verifica il riferimento CLIENTEID / ID) avrebbero subito un aggiornamento del campo CLIENTEID allo scopo di mantenere l'integrità referenziale.

forse sono stato un po' contorto nella spiegazione? :P
Imagination is more important than knowledge (A.Einstein)

Serpente80

  • Newbie
  • *
  • Post: 27
  • Karma: +0/-0
Re:Firebird + Zeos
« Risposta #11 il: Febbraio 23, 2013, 02:23:27 pm »
Ho capito.
Ma esiste un modo per caricare dati da diverse tabelle, su diversi controlli (dbedit,dbgrid) usando una singola query ?
E c'è un modo "automatico" per collegare tot articoli ad un ordine o bisogna fare via codice ?
Perdonate la niubbaggine  :(

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2870
  • Karma: +20/-4
Re:Firebird + Zeos
« Risposta #12 il: Febbraio 23, 2013, 02:52:42 pm »
Ma esiste un modo per caricare dati da diverse tabelle, su diversi controlli (dbedit,dbgrid) usando una singola query ?

solitamente il collegamento database->controlli passa per un dataset ed un datasource.
Un datasource punta ad un dataset (quest'ultimo riceve i dati dal database). N controlli puntano ad uno stesso datasource (e quindi più controlli possono manipolare lo stesso campo).
E' una suddivisione dei compiti di ciascuna classe molto logica e radicata nella programmazione. Anche ADO sotto win funziona così nonostante alcune differenze di implementazione.

E c'è un modo "automatico" per collegare tot articoli ad un ordine o bisogna fare via codice ?

Mi sa che non ho capito "o bisogna fare via codice"...
Comunque, in linea generale nel database devi avere un'altra tabella che colleghi N articoli ad uno stesso ordine. Queste due tabelle devono essere gestite da 2 dataset e 2 datasource.

Imagination is more important than knowledge (A.Einstein)

Serpente80

  • Newbie
  • *
  • Post: 27
  • Karma: +0/-0
Re:Firebird + Zeos
« Risposta #13 il: Febbraio 24, 2013, 04:14:06 pm »
In effetti mi sono spiegato da cani.
Volevo dire:
In visual studio una volta create tabelle e relazione, e trascinati i controlli sul form, in automatico collega i dati delle 2 tabelle. É possibile fare una cosa del genere in lazarus o bisogna fare via codice ? Non che mi pesi il culo, ma scoprire che esiste un modo easy dopo aver scritto un mare di codice mi darebbe alquanto fastidio :-)

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2870
  • Karma: +20/-4
Re:Firebird + Zeos
« Risposta #14 il: Febbraio 24, 2013, 05:14:37 pm »
visual studio non lo conosco quindi non so fare paragoni.
però lazarus ti permette di creare le relazioni master/detail impostando i campi chiave e poco altro.
non sarà automatico nel senso del riconoscimento delle pk ma non serve scrivere codice.
Imagination is more important than knowledge (A.Einstein)

 

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: 182
Total: 182

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.