Pagina 1 di 1

[Risolto] Form, macro e SQL

Inviato: giovedì 21 maggio 2020, 21:55
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

Re: Form, macro e SQL

Inviato: venerdì 22 maggio 2020, 14:18
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 .

Re: Form, macro e SQL

Inviato: venerdì 22 maggio 2020, 18:10
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

Re: Form, macro e SQL

Inviato: sabato 23 maggio 2020, 6:09
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 

Re: Form, macro e SQL

Inviato: sabato 23 maggio 2020, 9:38
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

Re: Form, macro e SQL

Inviato: sabato 23 maggio 2020, 10:53
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"

Re: Form, macro e SQL

Inviato: sabato 23 maggio 2020, 11:47
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

Re: Form, macro e SQL

Inviato: sabato 23 maggio 2020, 14:19
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.

Re: Form, macro e SQL

Inviato: sabato 23 maggio 2020, 18:54
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.