Ciao Alex, hai ragione, cerco sempre di compattare il codice per lasciare solo la parte che credo generi errore ma temo di fare piu confusione che altro cosi, il codice completo che uso è questo:
Dim strSQL As String
Dim strWH As String
strSQL = "INSERT INTO CONF005b_Tempi_commesse( Macchina_tempi, PRODOTTO, [g/l], T_C, Trattamento, Collo, Livello, Tolleranza, Mat_Contenitori, 125, 250, 330, 350, 500, 600, 750, 1000, 1250, 1500, 2000, 2250, 2500, 3000, 3500, [Note] ) "
strSQL = strSQL & "SELECT * FROM CONF005_Elenco_Tempi "
strWH = strWH & "[Macchina_tempi] =" & [Forms]![CONF000_Dimensionamento]![Tipo_Filler] & " AND "
If Len([Forms]![CONF000_Dimensionamento]![Tipo_opzione] & vbNullString) > 0 Then strWH = strWH & "[trattamento] =" & "'" & [Forms]![CONF000_Dimensionamento]![Tipo_opzione] & "'" & " And "
If Len([Forms]![CONF000_Dimensionamento]![Tipo_Collo] & vbNullString) > 0 Then strWH = strWH & "[Collo] =" & "'" & [Forms]![CONF000_Dimensionamento]![Tipo_Collo] & "'" & " And "
If Len([Forms]![CONF000_Dimensionamento]![Livello] & vbNullString) > 0 Then strWH = strWH & "[Livello] =" & [Forms]![CONF000_Dimensionamento]![Livello] & " AND "
If Len([Forms]![CONF000_Dimensionamento]![Mat_Cont] & vbNullString) > 0 Then strWH = strWH & "[Mat_Contenitori] =" & [Forms]![CONF020_Tipo_prod_sottomaschera]![Mat_Cont] & " AND "
If Len([Forms]![CONF000_Dimensionamento]![CONF020_Tipo_prod_sottomaschera]![Tipo_gradi_c] & vbNullString) > 0 Then strWH = strWH & "[T_C] =" & [Forms]![CONF000_Dimensionamento]![CONF020_Tipo_prod_sottomaschera]![Tipo_gradi_c] & " AND "
If Len([Forms]![CONF000_Dimensionamento]![CONF020_Tipo_prod_sottomaschera]![Tipo_grammi_litro] & vbNullString) > 0 Then strWH = strWH & "[g/l] =" & [Forms]![CONF000_Dimensionamento]![CONF020_Tipo_prod_sottomaschera]![Tipo_grammi_litro] & " AND "
If Len(strWH) > 0 Then
strWH = " WHERE " & Mid$(strWH, 1, Len(strWH) - 5)
strSQL = strSQL & strWH
End If
CurrentDb.Execute strSQL
Id_del_dimensionamento = [Forms]![CONF000_Dimensionamento]![ID_dimensionamento]
strSQL = "UPDATE CONF005b_Tempi_commesse SET Id_commessa_tempi = " & Id_del_dimensionamento & " "
strWH = " WHERE CONF005b_Tempi_commesse.Id_commessa_tempi Is Null"
CurrentDb.Execute strSQL & strWH
[Forms]![CONF000_Dimensionamento]![CONF005_Tempi_com_sottomaschera].Requery
Cosi funziona, i campi di destinazione ed i campi sorgente hanno stesso nome quindi uso "SELECT * FROM CONF005_Elenco_Tempi "
Quello che vorrei fare è spostare la parte:
Id_del_dimensionamento = [Forms]![CONF000_Dimensionamento]![ID_dimensionamento]
strSQL = "UPDATE CONF005b_Tempi_commesse SET Id_commessa_tempi = " & Id_del_dimensionamento & " "
strWH = " WHERE CONF005b_Tempi_commesse.Id_commessa_tempi Is Null"
direttamente nella parte di accodamento, ho creato una query di accodamento in visualizzazione struttura e studiato l'SQL per vedere com'era fatto:
Quindi ancora prima di passare a la condizione ho provato a cambiare la function in vari modi, quello che mi sembra piu corretto (che mi sa ieri non ho scritto) è:
strSQL = strSQL & "VALUES ( Macchina_tempi, PRODOTTO, [g/l], T_C, Trattamento, Collo, Livello, Tolleranza, Mat_Contenitori, 125, 250, 330, 350, 500, 600, 750, 1000, 1250, 1500, 2000, 2250, 2500, 3000, 3500, [Note] ) FROM CONF005"
L'errore che ottengo è manca ; alla fine dell'istruzione SQl, non capisco perche non va, leggendo alcuni esempi in rete sembrerebbe funzionante, ho commesso qualche errore?
debug print
INSERT INTO CONF005b_Tempi_commesse( Macchina_tempi, PRODOTTO, [g/l], T_C, Trattamento, Collo, Livello, Tolleranza, Mat_Contenitori, 125, 250, 330, 350, 500, 600, 750, 1000, 1250, 1500, 2000, 2250, 2500, 3000, 3500, [Note] ) VALUES ( Macchina_tempi, PRODOTTO, [g/l], T_C, Trattamento, Collo, Livello, Tolleranza, Mat_Contenitori, 125, 250, 330, 350, 500, 600, 750, 1000, 1250, 1500, 2000, 2250, 2500, 3000, 3500, [Note] ) FROM CONF005 WHERE [Macchina_tempi] =1 AND [T_C] =60
Ho fatto poi varie prove ma ho sempre trovato errori poi sul sito Microsoft leggo:
Query di accodamento a più record
INSERT INTO destinazione [(campo1[, campo2[, ...]])] [IN databaseesterno]
SELECT [origine.]campo1[, campo2[, ...]
FROM espressionetabella
https://support.office.com/it-it/article/Istruzione-INSERT-INTO-e12fd58b-33b1-479c-8221-e9f245ab8d24
ed anche qui qui mi sorge il dubbio perche select e non values, si possono usare entrambi i metodi?
Quindi cambio in:
Dim strSQL As String
Dim strWH As String
strSQL = "INSERT INTO CONF005b_Tempi_commesse( Macchina_tempi, PRODOTTO, [g/l], T_C, Trattamento, Collo, Livello, Tolleranza, Mat_Contenitori, 125, 250, 330, 350, 500, 600, 750, 1000, 1250, 1500, 2000, 2250, 2500, 3000, 3500, [Note] ) "
strSQL = strSQL & "Select CONF005_Elenco_Tempi.Macchina_tempi, CONF005_Elenco_Tempi.PRODOTTO, CONF005_Elenco_Tempi.[g/l], CONF005_Elenco_Tempi.T_C, CONF005_Elenco_Tempi.Trattamento, CONF005_Elenco_Tempi.Collo, CONF005_Elenco_Tempi.Livello, CONF005_Elenco_Tempi.Tolleranza, CONF005_Elenco_Tempi.Mat_Contenitori, CONF005_Elenco_Tempi.125, CONF005_Elenco_Tempi.250, CONF005_Elenco_Tempi.330, CONF005_Elenco_Tempi.350, CONF005_Elenco_Tempi.500, CONF005_Elenco_Tempi.600, CONF005_Elenco_Tempi.750, CONF005_Elenco_Tempi.1000, CONF005_Elenco_Tempi.1250, CONF005_Elenco_Tempi.1500, CONF005_Elenco_Tempi.2000, CONF005_Elenco_Tempi.2250, CONF005_Elenco_Tempi.2500, CONF005_Elenco_Tempi.3000, CONF005_Elenco_Tempi.3500, CONF005_Elenco_Tempi.[Note] FROM CONF005_Elenco_Tempi"
strWH = strWH & "[Macchina_tempi] =" & [Forms]![CONF000_Dimensionamento]![Tipo_Filler] & " AND "
If Len([Forms]![CONF000_Dimensionamento]![Tipo_opzione] & vbNullString) > 0 Then strWH = strWH & "[trattamento] =" & "'" & [Forms]![CONF000_Dimensionamento]![Tipo_opzione] & "'" & " And "
If Len([Forms]![CONF000_Dimensionamento]![Tipo_Collo] & vbNullString) > 0 Then strWH = strWH & "[Collo] =" & "'" & [Forms]![CONF000_Dimensionamento]![Tipo_Collo] & "'" & " And "
If Len([Forms]![CONF000_Dimensionamento]![Livello] & vbNullString) > 0 Then strWH = strWH & "[Livello] =" & [Forms]![CONF000_Dimensionamento]![Livello] & " AND "
If Len([Forms]![CONF000_Dimensionamento]![Mat_Cont] & vbNullString) > 0 Then strWH = strWH & "[Mat_Contenitori] =" & [Forms]![CONF020_Tipo_prod_sottomaschera]![Mat_Cont] & " AND "
If Len([Forms]![CONF000_Dimensionamento]![CONF020_Tipo_prod_sottomaschera]![Tipo_gradi_c] & vbNullString) > 0 Then strWH = strWH & "[T_C] =" & [Forms]![CONF000_Dimensionamento]![CONF020_Tipo_prod_sottomaschera]![Tipo_gradi_c] & " AND "
If Len([Forms]![CONF000_Dimensionamento]![CONF020_Tipo_prod_sottomaschera]![Tipo_grammi_litro] & vbNullString) > 0 Then strWH = strWH & "[g/l] =" & [Forms]![CONF000_Dimensionamento]![CONF020_Tipo_prod_sottomaschera]![Tipo_grammi_litro] & " AND "
If Len(strWH) > 0 Then
strWH = " WHERE " & Mid$(strWH, 1, Len(strWH) - 5)
strSQL = strSQL & strWH
End If
CurrentDb.Execute strSQL
Id_del_dimensionamento = [Forms]![CONF000_Dimensionamento]![ID_dimensionamento]
strSQL = "UPDATE CONF005b_Tempi_commesse SET Id_commessa_tempi = " & Id_del_dimensionamento & " "
strWH = " WHERE CONF005b_Tempi_commesse.Id_commessa_tempi Is Null"
CurrentDb.Execute strSQL & strWH
[Forms]![CONF000_Dimensionamento]![CONF005_Tempi_com_sottomaschera].Requery
mi dice uso non valido di '','!'o () mell'espressione della query
Debug.Print
:INSERT INTO CONF005b_Tempi_commesse( Macchina_tempi, PRODOTTO, [g/l], T_C, Trattamento, Collo, Livello, Tolleranza, Mat_Contenitori, 125, 250, 330, 350, 500, 600, 750, 1000, 1250, 1500, 2000, 2250, 2500, 3000, 3500, [Note] ) Select CONF005_Elenco_Tempi.Macchina_tempi, CONF005_Elenco_Tempi.PRODOTTO, CONF005_Elenco_Tempi.[g/l], CONF005_Elenco_Tempi.T_C, CONF005_Elenco_Tempi.Trattamento, CONF005_Elenco_Tempi.Collo, CONF005_Elenco_Tempi.Livello, CONF005_Elenco_Tempi.Tolleranza, CONF005_Elenco_Tempi.Mat_Contenitori, CONF005_Elenco_Tempi.125, CONF005_Elenco_Tempi.250, CONF005_Elenco_Tempi.330, CONF005_Elenco_Tempi.350, CONF005_Elenco_Tempi.500, CONF005_Elenco_Tempi.600, CONF005_Elenco_Tempi.750, CONF005_Elenco_Tempi.1000, CONF005_Elenco_Tempi.1250, CONF005_Elenco_Tempi.1500, CONF005_Elenco_Tempi.2000, CONF005_Elenco_Tempi.2250, CONF005_Elenco_Tempi.2500, CONF005_Elenco_Tempi.3000, CONF005_Elenco_Tempi.3500, CONF005_Elenco_Tempi.[Note] FROM CONF005_Elenco_Tempi WHERE [Macchina_tempi] =1 AND [T_C] =60