[Risolto] Form, macro e SQL
[Risolto] Form, macro e SQL
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
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
Motivazione: Aggiunto ✔ verde
Apache OpenOffice 4.1.7 windows10
Re: Form, macro e SQL
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 .
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Re: Form, macro e SQL
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
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 127 volte
Apache OpenOffice 4.1.7 windows10
Re: Form, macro e SQL
Cominciamo col dire che 'form' in inglese si traduce con 'formulario'. Va bene abbreviarlo il 'form' ma rimane un nome di genere maschile .
Le risposte:
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?
Le risposte:
- Non hai bisogno di macro (che sono un'altra cosa). Hai bisogno di una semplice query che puoi scrivere con SQL
o costruire graficamente a tuo piacimento.
Codice: Seleziona tutto
SELECT "anagrafe".* FROM "anagrafe", "statocivile" WHERE "anagrafe"."stciv" = "statocivile"."key"
- Il formulario sulla query lo inserisci come hai fatto per quello sulla Vista.
Ti serve nello stesso formulario della Vista? Devi aprire il Navigatore ...
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.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Re: Form, macro e SQL
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
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
Re: Form, macro e SQL
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.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Re: Form, macro e SQL
Ciao ancora
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
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à.Ti serve nello stesso formulario della Vista? Devi aprire il Navigatore ...
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
Re: Form, macro e SQL
La procedura è questa, ma è la più complicata:
La procedura più semplice?
- 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
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):
Vedi query Ricerca1
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"
- 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 138 volte
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Re: Form, macro e SQL
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.
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