[Risolto] Form, macro e SQL

Discussioni sulle caratteristiche di database
Rispondi
Bonucci
Messaggi: 24
Iscritto il: domenica 3 maggio 2020, 16:53

[Risolto] Form, macro e SQL

Messaggio da Bonucci »

Salve,
c'è una situazione usuale nelle form che vorrei capire come risolvere in modo semplice:
una form basata su una tabella, la tabella contiene, tra le altre cose, un campo valorizzato con un codice che riferisce ad una seconda tabella con chiave primaria (è una correlazione) e descrizione associata al codice
In questo caso non intendo costruire una vista logica basata su entrambe le tabelle, ci possono essere vari motivi per cui questa cosa non si possa o voglia fare.
Vorrei poter invocare una semplice query per ottenere la descrizione associata al codice:
ho visto come si inserisce uno statement SQL all'interno di una macro;
quale è la sintassi per riferirsi (nella where) al campo della form?
come si rende visibile nella form il risultato della query? (forzatamente una sola riga sarà estratta essendo il codice chiave univoca)
come si invoca la query in modo automatico all'apertura della form? (senza usare un pulsante)
Grazie mille anche per gli altri consigli che il forum mi ha già dato.
Pier Luigi
Ultima modifica di charlie il lunedì 25 maggio 2020, 9:07, modificato 3 volte in totale.
Motivazione: Aggiunto ✔ verde
Apache OpenOffice 4.1.7 windows10
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8786
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Form, macro e SQL

Messaggio da charlie »

Ciao, io credo che postando un esempio del database a cui ti riferisci e scrivendo in maniera più ordinata le domande (magari numerandole), riusciresti a farti capire meglio :D .
charlie
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Bonucci
Messaggi: 24
Iscritto il: domenica 3 maggio 2020, 16:53

Re: Form, macro e SQL

Messaggio da Bonucci »

OK.

Allego un semplice DB in modo da chiarire le domande.

- Ci sono tre tabelle: anagrafe, comuni, statocivile;
- Una vista logica: anacom che mette in join anagrafe e comuni: di fatto serve per avere il comune in chiaro invece del solo codice.
- Due correlazioni: comuni ---E anagrafe (1,N), statocivile ---E anagrafe (1,N) servono per la decodifica dei codici presenti nella tabella anagrafe
- Ho costruito una semplice form basata sulla vista logica anacom che contiene:
- tutti i campi con i dati delle persone in anagrafe
- la decodifica del codice comune di nascita
- il codice dello stato civile

Per chiarezza delle informazioni serve avere nella form anche la descrizione relativa al codice di stato civile.
Ecco le domande:
1) come costruire una macro che contenga lo statement: select ... from statocivile where anagrafe.stciv = statocivile.key
2) come inserire nella form il risultato della query, in particolare il campo statocivile.descri (ci sarà una sola riga estratta essendo statocivile.key chiave primaria)
3) come invocare la macro in modo automatico all'apertura della form
4) più in generale quale è la sintassi per riferirsi a campi della form e campi di tabella
Allegati
Nuovo database5.odb
(12.37 KiB) Scaricato 124 volte
Apache OpenOffice 4.1.7 windows10
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8786
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Form, macro e SQL

Messaggio da charlie »

Cominciamo col dire che 'form' in inglese si traduce con 'formulario'. Va bene abbreviarlo il 'form' ma rimane un nome di genere maschile :D .
Le risposte:
  1. Non hai bisogno di macro (che sono un'altra cosa). Hai bisogno di una semplice query che puoi scrivere con SQL

    Codice: Seleziona tutto

    SELECT "anagrafe".* FROM "anagrafe", "statocivile" WHERE "anagrafe"."stciv" = "statocivile"."key"
    o costruire graficamente a tuo piacimento.
  2. Il formulario sulla query lo inserisci come hai fatto per quello sulla Vista.
    Ti serve nello stesso formulario della Vista? Devi aprire il Navigatore ...
Le domande 3 e 4 non hanno bisogno di risposta alla luce di quanto detto.

Vedo che nelle tabelle non fai uso dell'incremento automatico della chiave primaria, quella che normalmente viene chiamata universalmente 'ID' e che tu chiami 'key'. C'è una ragione?
 Editato: Il codice è stato modificato 
charlie
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Bonucci
Messaggi: 24
Iscritto il: domenica 3 maggio 2020, 16:53

Re: Form, macro e SQL

Messaggio da Bonucci »

Ciao, ti rispondo al volo prima di provare i suggerimenti.
Il db che ho inviato è solo un esempio creato in due minuti per chiarire la situazione e si nelle applicazioni uso l'incremento automatico.
Uso il nome key per abitudine lavorativa, quando ho iniziato a lavorare (1975) usavo il cobol, tutta la manualistica era in inglese e mi è rimasta l'abitudine a quella terminologia; negli anni 90 ho iniziato a lavorare con i db relazionali (oracle) ed anche in quell'ambiente si usava primary key o unic key. Hai ragione form è maschile :-( .
Ancora al volo, non comprendo il from che cita 2 volte statocivile e statocivile_1, non è una semplice join tra due tabelle?
Grazie, sei onnipresente.
Pier Luigi
Apache OpenOffice 4.1.7 windows10
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8786
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Form, macro e SQL

Messaggio da charlie »

Sì, in effetti nel copia/incolla è finito qualcosa in più:

Codice: Seleziona tutto

SELECT "anagrafe".* FROM "anagrafe", "statocivile" WHERE "anagrafe"."stciv" = "statocivile"."key"
charlie
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Bonucci
Messaggi: 24
Iscritto il: domenica 3 maggio 2020, 16:53

Re: Form, macro e SQL

Messaggio da Bonucci »

Ciao ancora
Ti serve nello stesso formulario della Vista? Devi aprire il Navigatore ...
Si, mi serve la descrizione dello stato civile nello stesso form, ho provato ad aprire il navigatore ma non ho capito come utilizzarlo per questa necessità.
Quello che vorrei capire è se posso lanciare una query direttamente da form equiparando il codice che compare nella form stessa con la chiave primaria della tabella di decodifica.
Forse sto affrontando il problema in modo non corretto per oo, è anccora un'abitudine mutuata dalla piattaforma oracle in cui questo genere di operazioni erano utilizzate continuamente.

Pier Luigi
Apache OpenOffice 4.1.7 windows10
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8786
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Form, macro e SQL

Messaggio da charlie »

La procedura è questa, ma è la più complicata:
  • apri il form in modalità modifica ed apri il navigatore
  • evidenzia (clic) il ramo principale che si chiama MainForm, clic destro > Nuovo > Formulario
  • con Formulario evidenziato, apri la finestra delle Proprietà (o con l'apposita icona o clic destro > Proprietà)
  • (se vuoi cambia il Nome in SubForm); nella scheda Dati scegli Tabella e poi 'statocivile'; in Collega da/Collega per seleziona i campi in relazione 'stclv' e 'key'
  • apri la finestra Aggiungi campo (bordo inferiore sinistro) e trascina il campo 'descri' sulla pagina
  • salva e passa in modalità esecuzione
Vedi esempio form 'anains' modificato.

La procedura più semplice?
  • fai una query con il sistema grafico o con codice SQL (è il codice che avevo già postato per errore in precedenza):

    Codice: Seleziona tutto

    SELECT "anagrafe".*, "statocivile_1"."descri" FROM "anagrafe", "statocivile", "statocivile" "statocivile_1" WHERE "anagrafe"."stciv" = "statocivile"."key" AND "anagrafe"."stciv" = "statocivile_1"."key"
    Vedi query Ricerca1
  • con pochi clic della procedura guidata fai un nuovo formulario basato sulla Ricerca1
    Vedi formulario Ricerca1.
Allegati
Nuovo_database_6.odb
(21.78 KiB) Scaricato 136 volte
charlie
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Bonucci
Messaggi: 24
Iscritto il: domenica 3 maggio 2020, 16:53

Re: Form, macro e SQL

Messaggio da Bonucci »

Ciao, provati i consigli, funzionano.
Come ho detto affronto i problemi senza una vera conoscenza della piattaforma. A 70 anni suonati non ho voglia di stare sui manuali, così uso l'esperienza e un po' di istinto per imparare mentre faccio, quando non riesco chiedo a persone come te. Spero che questo atteggiamento "pigro" sia comunque adeguato per rimanere su questo forum.
Grazie ancora, per adesso, ho imparato molto da questo scambio.
Pier Luigi.
Apache OpenOffice 4.1.7 windows10
Rispondi