[Risolto] Copiare righe da una query ad una tabella in blocc

Discussioni sulle caratteristiche di database
Rispondi
squob
Messaggi: 16
Iscritto il: venerdì 20 aprile 2012, 10:29

[Risolto] Copiare righe da una query ad una tabella in blocc

Messaggio da squob »

Ciao a tutti. Sono qui in cerca di consigli. Ho creato un database per gestire le analisi chimiche che faccio nel mio laboratorio. Ho una tabella tbANALISI dove inserisco gli analiti che il cliente mi richiede. L'inserimento avviene un analita alla volta ma sto cercando un sistema per poterne inserire in blocco recuperando la lista da una query. Per fare un esempio pratico ammettiamo che Mario debba fare le analisi del sangue ContaGlobuliRossi e ContaGlobuliBianchi. Posso inserire le due voci singolarmente oppure recuperarle insieme visto e considerato che fanno parte entrambe del pacchetto Emocromo.
Per stabilire i pacchetti ho creato un'altra tabella dove sono elencati i vari pacchetti di analisi con i corrispondenti analiti. Da questa tabella posso estrapolare i dati che mi interessano, il problema che mi si pone è come riuscire a copiarli in blocco nella tabella tbANALISI. La tabella tbANALISI contiene anche altri dati, alcuni dei quali sono riferimenti al cliente, giorno del campionamento, ecc ecc ma soprattutto i risultati delle analisi, che sono valori che inserisco successivamente.
Lo stesso analita può trovarsi in diversi pacchetti e per questo ho creato una tabella separata.
Utilizzando direttamente il comando sql INSERT INTO la cosa funziona ma non riesco a farlo dal form.
Ultima modifica di charlie il lunedì 14 marzo 2022, 10:39, modificato 3 volte in totale.
Motivazione: Aggiunta ✔ verde.
Libreoffice 7.3 su Kubuntu 20.04
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8954
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Copiare righe da una query ad una tabella in blocco

Messaggio da charlie »

Ciao, aggiorna per cortesia la tua firma, non credo tu sia fermo a Windows Xp e OO 3.0.
Allega un esempio del tuo datbase, senza dati sensibili, ma con alcuni dati.
charlie
macOS 14.6.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
squob
Messaggi: 16
Iscritto il: venerdì 20 aprile 2012, 10:29

Re: Copiare righe da una query ad una tabella in blocco

Messaggio da squob »

Ok. Fatto. effettivamente era parecchio vecchia. Allego il database. Il form è Accettazione Campioni dove, in ordine partendo da sinistra a destra, si compila la sezione del verbale di campionamento , del campione da analizzare e per ogni campione gli analiti. Per motivi di spazio ho dovuto inserire in allegato una versione vecchia del database che manca delle listBox per l'inserimento degli analiti. Ho ricostruito anche la tabella tbPACCHETTO che non era presente in questo database ma sta li solo come esempio.
Spero si capisca.
Allegati
EBlims3.odb
(64.05 KiB) Scaricato 101 volte
Libreoffice 7.3 su Kubuntu 20.04
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8954
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Copiare righe da una query ad una tabella in blocco

Messaggio da charlie »

Cio, sto cercando di capire :roll:
  1. Aprendo il form compare un messaggio dei errore, manca la tabella tbRAPPORTO. Per ora tralascio.
  2. Dalla barra di navigazione non si possono inserire nuovi record. Hai volontariamente stabilito così?
  3. Se sì, allora posso modificare i dati esistenti nelle tre griglie presenti
  4. Oppure posso aggiungere nuove righe: compilo N Verbale e Campionatore. Se aggiorno la griglia mi si apre un nuovo record nella seconda griglia. Compilo Luogo, Matrice, Sub Matrice, Descrizione. Se aggiorno la griglia, mi si apre un nuovo record della terza griglia. Compilo ID Analita, Analita: ma non sono questi la stessa cosa? Se hai previsto una listbox su IDAnalita, l'altro campo è un doppione ....
    E poi, non mi permette di scrivere su Risultato e Incertezza.
Tutto questo ancora prima di prendere in considerazione le tue domande :roll:
charlie
macOS 14.6.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
squob
Messaggi: 16
Iscritto il: venerdì 20 aprile 2012, 10:29

Re: Copiare righe da una query ad una tabella in blocco

Messaggio da squob »

Ok, perfetto. Non si possono fare alcune cose perché ho dovuto eliminare parti del database per stare sotto i 250 KB. Non so perché non funziona risultato ed incertezza ma poco importa per ora. Tutto il resto è giusto. Le listBox sono su Analita e permettono di selezionare i valori presenti nella tabella tbANALITA, che sono gli unici valori che mi interessa inserire in quella tabella a vista . Questi valori Analita li inserisco uno per uno, invece in alcune situazione (molte) mi sarebbe comodo inserirli in automatico tutti insieme. La tabella tbPACCHETTO riporta le correlazioni tra i valori IDAnalita e il nome di un pacchetto in modo da poter selezionare tutti gli analiti che corrispondono a quel gruppo. Il mpio obiettivo è inserire nella tabella tbANALISI i valori della colonna IDAnalita presenti nella tabella tbPACCHETTO che corrispondono allo stesso PACCHETTO.
Sono in grado di selezionare con una query i valori che mi interessano ma non riesco ad inserirli in blocco nella tabella finale (tbANALISI). Non so se sto seguendo la via migliore, che equivarrebbe ad una specie di copia ed incolla oppure approcciare un sistema diverso.
Forse se riuscissi ad inviarvi il database un po' più completo sarebbe più comprensibile la faccenda.
Libreoffice 7.3 su Kubuntu 20.04
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Copiare righe da una query ad una tabella in blocco

Messaggio da Gaetanopr »

squob ha scritto: Utilizzando direttamente il comando sql INSERT INTO la cosa funziona ma non riesco a farlo dal form.
Quale istruzione usi? puoi fare un esempio di inserimento spiegandolo dettagliatamente passo per passo.
La tabella pacchetto a mio avviso non è costruita bene, ad esempio il pacchetto acqua biosmosi come altri è ripetuto tante volte
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
squob
Messaggi: 16
Iscritto il: venerdì 20 aprile 2012, 10:29

Re: Copiare righe da una query ad una tabella in blocco

Messaggio da squob »

Gaetanopr ha scritto: Quale istruzione usi? puoi fare un esempio di inserimento spiegandolo dettagliatamente passo per passo.
La tabella pacchetto a mio avviso non è costruita bene, ad esempio il pacchetto acqua biosmosi come altri è ripetuto tante volte
L'utilizzo di INSERT INTO mi è venuto in mente perché se utilizzo il comando sql seguente

Codice: Seleziona tutto

INSERT INTO "tbANALISI" ("Analita")
SELECT "IDAnalita" FROM "tbPACCHETTO" WHERE "Pacchetto" = 'Acqua Biosmosi'
accade ciò che voglio ma non riesco a riportare questo codice nel form.
La tabella tbPACCHETTO riporta ripetutamente gli stessi valori sulla colonna pacchetto cosicché posso raggruppare i valori IDAnalita con una ricerca.

Ho inserito il database completo nel link qui sotto. Nel form Accettazione campioni, in basso a destra, c'è il filtro che riporta le analisi appartenenti al Pacchetto selezionato ma non è collegato a nulla per ora. La mia intenzione è fare in modo che i dati risultanti dal filtro vengano inseriti nella tabella di sinistra

https://www.dropbox.com/s/ajm5phpe0kryl ... a.odb?dl=0

Grazie per la pazienza
Libreoffice 7.3 su Kubuntu 20.04
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8954
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

Re: Copiare righe da una query ad una tabella in blocco

Messaggio da charlie »

Ecco il db completo:
Allegati
EBLims_7_test_copia.odb
(766.98 KiB) Scaricato 95 volte
charlie
macOS 14.6.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Copiare righe da una query ad una tabella in blocco

Messaggio da Gaetanopr »

Ho provato ad inserire un record manualmente, comunque ho inserito un pulsante in basso a destra basta digitarlo e la macro inserisce i dati presenti sul form nella tabella tbANALISI, fai alcune prove.
Per adesso inserisce l'IDCliente e IDAnalita O Analita (credo dovrebbe inserire IDAnalita) mancano tutti gli altri campi nell'istruzione di INSERT.
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
squob
Messaggi: 16
Iscritto il: venerdì 20 aprile 2012, 10:29

Re: Copiare righe da una query ad una tabella in blocco

Messaggio da squob »

Gaetanopr ha scritto:Ho provato ad inserire un record manualmente, comunque ho inserito un pulsante in basso a destra basta digitarlo e la macro inserisce i dati presenti sul form nella tabella tbANALISI, fai alcune prove.
Per adesso inserisce l'IDCliente e IDAnalita O Analita (credo dovrebbe inserire IDAnalita) mancano tutti gli altri campi nell'istruzione di INSERT.
Gentilissimo. Non vedo il file però.
Libreoffice 7.3 su Kubuntu 20.04
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Copiare righe da una query ad una tabella in blocco

Messaggio da Gaetanopr »

 Editato: File sostituito (admin) 
Allegati
EBLims_7_test_copia_gaetano.odb
(775.16 KiB) Scaricato 87 volte
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
squob
Messaggi: 16
Iscritto il: venerdì 20 aprile 2012, 10:29

Re: Copiare righe da una query ad una tabella in blocco

Messaggio da squob »

Grazie. Funziona benissimo. Adesso devo solo inserire anche IDVerbale e IDCampione. Sto provando a modificare la macro ma vado a tentativi perché per me quello è arabo. Ho visto la funzione che acquisisce il formulario e il sub formulario ed ho capito che se scrivo così:

Codice: Seleziona tutto

FormCli = FmAcq_oForm("MainForm", "Verbale", "")    ' ACQ. RIF. FORMULARIO
dovrei acquisirli entrambi. A questo punto dovrei però dover prendere anche un valore dal sub-sub-formulario "Campione".

Poi invece non capisco qui che cosa succede

Codice: Seleziona tutto

idcliente = FormCli.getbyname("fmtIDCliente").EffectiveValue ' idcliente
cioè, ho capito che prendo il valore della casella IDCliente ma poi come faccio a prendere anche quello di IDVerbale e IDCampione?

Siccome già ho litigato con le macro precedenti per prendere i valori in quella che viene definita "table control" ho utilizzato l'escamotage di creare due texBox dove vengono ripetuti i vari ID ma che poi rendo invisibili. EDIT ma ora mi hai suggerito come vanno gestiti :D .
Libreoffice 7.3 su Kubuntu 20.04
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Copiare righe da una query ad una tabella in blocco

Messaggio da Gaetanopr »

squob ha scritto: cioè, ho capito che prendo il valore della casella IDCliente ma poi come faccio a prendere anche quello di IDVerbale e IDCampione?
Prova in questo modo.

Codice: Seleziona tutto

Sub INSERT (oEvent As Object) 
	oForm = oEvent.Source.Model.Parent
	FormCli = FmAcq_oForm("MainForm", "", "")    ' ACQ. RIF. FORMULARIO 
	idcliente = FormCli.getbyname("fmtIDCliente").EffectiveValue ' idcliente
	Pacchetto = oForm.getByName("Table Control  1").GetByName("Text Box 1").CurrentValue
	idcampione  = oForm.Parent.Parent.getByName("fmtIDCampione").effectiveValue
	idverbale  = oForm.Parent.Parent.getByName("fmtIDVerbale").effectiveValue
	oStatement = oForm.ActiveConnection.createStatement() 'Create an SQL statement object
	sSQL = "INSERT INTO ""tbANALISI"" (""IDCampione"", ""IDVerbale"", ""IDCliente"", ""IDAnalita"") SELECT " & idcampione & "," & idverbale &","& idcliente & ", ""IDAnalita"" FROM ""tbPACCHETTO"" WHERE ""Pacchetto"" = '" & Pacchetto & "'"
	oStatement.executeUpdate( sSQL ) 'Execute the SQL command
	oForm.reload
End Sub
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
squob
Messaggi: 16
Iscritto il: venerdì 20 aprile 2012, 10:29

Re: Copiare righe da una query ad una tabella in blocco

Messaggio da squob »

Grazie Gaetanopr. La macro funziona perfettamente. Ci ho messo un po' a rispondere perché ho dovuto addattare un po' la situazione visto che c'erano dei problemini. Ad esempio, trovandosi il filtro di ricerca in un subform rispetto a quello delle Analisi, non si attivava la listBox se non fosse già presente un nuovo record nella tabella Analisi. Risolto il problema spostando il form Pacchetto in "parallelo" a quello Analisi. Aggiunta poi una riga alla macro dopo il reload per riportarmi sull'ultimo campione inserito.

Codice: Seleziona tutto

Sub INSERT (oEvent As Object)
   oForm = oEvent.Source.Model.Parent
   FormCli = FmAcq_oForm("MainForm", "", "")    ' ACQ. RIF. FORMULARIO
   idcliente = FormCli.getbyname("fmtIDCliente").EffectiveValue ' idcliente
   Pacchetto = oForm.getByName("Table Control  1").GetByName("Text Box 1").CurrentValue
   idcampione = oForm.Parent.Parent.getByName("fmtIDCampione").EffectiveValue
   idverbale  = oForm.Parent.Parent.getByName("fmtIDVerbale").EffectiveValue
   oStatement = oForm.ActiveConnection.createStatement() 'Create an SQL statement object
   sSQL = "INSERT INTO ""tbANALISI"" (""IDCampione"", ""IDVerbale"", ""IDCliente"", ""Analita"") SELECT " & idcampione & "," & idverbale &","& idcliente & ", ""IDAnalita"" FROM ""tbPACCHETTO"" WHERE ""Pacchetto"" = '" & Pacchetto & "'"
   oStatement.executeUpdate( sSQL ) 'Execute the SQL command
   oForm.Parent.Parent.reload
   oForm.Parent.Parent.Last()
End Sub


Metto risolto nel titolo, grazie ancora.

PS: Giusto capire. Ho provato a fare questa cosa

Codice: Seleziona tutto

Pacchetto = oForm.getByName("Table Control  1").GetByName("Text Box 1").CurrentValue
al posto di questa

Codice: Seleziona tutto

idverbale  = oForm.Parent.Parent.getByName("fmtIDVerbale").EffectiveValue
per avere un codice più pulito ed evitare di mettere le texbox nascoste, visto che sono doppioni e i valori si trovano già nelle tabelle di controllo ma non mi riesce. Magari è soltanto perché ci ho provato dopo il lauto pranzo domenicale. Ci riproverò
Libreoffice 7.3 su Kubuntu 20.04
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Copiare righe da una query ad una tabella in blocco

Messaggio da Gaetanopr »

squob ha scritto:..... visto che sono doppioni e i valori si trovano già nelle tabelle di controllo ma non mi riesce. Magari è soltanto perché ci ho provato dopo il lauto pranzo domenicale. Ci riproverò
Ciao non ho capito cosa non ti riesce, in ogni caso credo tu abbia modificato il formulario, quindi dovresti pure riallegare il file, sempre se nel frattempo non abbia già risolto.

Saluti
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
squob
Messaggi: 16
Iscritto il: venerdì 20 aprile 2012, 10:29

Re: [Risolto] Copiare righe da una query ad una tabella in b

Messaggio da squob »

Scusami per la tarda risposta. Mi usciva un errore nella macro ma per colpa mia. Non riuscivo a identificare il campo nella tabella di riepilogo ma era solo un errore di inscatolento dei form. Grazie ancora
Libreoffice 7.3 su Kubuntu 20.04
Rispondi