[Risolto] Copiare righe da una query ad una tabella in blocc
[Risolto] Copiare righe da una query ad una tabella in blocc
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.
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.
Motivazione: Aggiunta ✔ verde.
Libreoffice 7.3 su Kubuntu 20.04
Re: Copiare righe da una query ad una tabella in blocco
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.
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
macOS 14.6.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Re: Copiare righe da una query ad una tabella in blocco
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.
Spero si capisca.
- Allegati
-
- EBlims3.odb
- (64.05 KiB) Scaricato 100 volte
Libreoffice 7.3 su Kubuntu 20.04
Re: Copiare righe da una query ad una tabella in blocco
Cio, sto cercando di capire
- Aprendo il form compare un messaggio dei errore, manca la tabella tbRAPPORTO. Per ora tralascio.
- Dalla barra di navigazione non si possono inserire nuovi record. Hai volontariamente stabilito così?
- Se sì, allora posso modificare i dati esistenti nelle tre griglie presenti
- 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.
charlie
macOS 14.6.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
macOS 14.6.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Re: Copiare righe da una query ad una tabella in blocco
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.
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
Re: Copiare righe da una query ad una tabella in blocco
Quale istruzione usi? puoi fare un esempio di inserimento spiegandolo dettagliatamente passo per passo.squob ha scritto: Utilizzando direttamente il comando sql INSERT INTO la cosa funziona ma non riesco a farlo dal form.
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
Openoffice 4.1.13 su windows 10
Re: Copiare righe da una query ad una tabella in blocco
L'utilizzo di INSERT INTO mi è venuto in mente perché se utilizzo il comando sql seguenteGaetanopr 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
Codice: Seleziona tutto
INSERT INTO "tbANALISI" ("Analita")
SELECT "IDAnalita" FROM "tbPACCHETTO" WHERE "Pacchetto" = 'Acqua Biosmosi'
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
Re: Copiare righe da una query ad una tabella in blocco
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
macOS 14.6.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Re: Copiare righe da una query ad una tabella in blocco
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.
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
Openoffice 4.1.13 su windows 10
Re: Copiare righe da una query ad una tabella in blocco
Gentilissimo. Non vedo il file però.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.
Libreoffice 7.3 su Kubuntu 20.04
Re: Copiare righe da una query ad una tabella in blocco
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
Openoffice 4.1.13 su windows 10
Re: Copiare righe da una query ad una tabella in blocco
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ì:
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
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 .
Codice: Seleziona tutto
FormCli = FmAcq_oForm("MainForm", "Verbale", "") ' ACQ. RIF. FORMULARIO
Poi invece non capisco qui che cosa succede
Codice: Seleziona tutto
idcliente = FormCli.getbyname("fmtIDCliente").EffectiveValue ' idcliente
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 .
Libreoffice 7.3 su Kubuntu 20.04
Re: Copiare righe da una query ad una tabella in blocco
Prova in questo modo.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?
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
Openoffice 4.1.13 su windows 10
Re: Copiare righe da una query ad una tabella in blocco
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.
Metto risolto nel titolo, grazie ancora.
PS: Giusto capire. Ho provato a fare questa cosa
al posto di questa 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ò
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
Codice: Seleziona tutto
idverbale = oForm.Parent.Parent.getByName("fmtIDVerbale").EffectiveValue
Libreoffice 7.3 su Kubuntu 20.04
Re: Copiare righe da una query ad una tabella in blocco
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.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ò
Saluti
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Openoffice 4.1.13 su windows 10
Re: [Risolto] Copiare righe da una query ad una tabella in b
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