Query in visualizzazione struttura, criteri su una sola riga, si puo?

di il
9 risposte

Query in visualizzazione struttura, criteri su una sola riga, si puo?

Dopo aver modificato la mia query come suggeritomi da Alex qui:
https://www.iprogrammatori.it/forum-programmazione/access/iif-con-null-t31808.html

quindi impostando i criteri come
[CampoX]=Forms!NomeForm!NomeCombo OR Forms!NomeForm!NomeCombo IS NUll;
ed averla salvata, riaprendola mi appare cosi (è lunga almeno 5 volte tanto):
Cattura.JPG
Cattura.JPG

anche la visualizzazione SQL è infinita, c'è modo di visualizzare i criteri esattamente come li avevo scritti cioe tutti sulla stessa riga? cosi è praticamente inmodificabile in futuro...

9 Risposte

  • Re: Query in visualizzazione struttura, criteri su una sola riga, si puo?

    Pensi sia possibile valutare d scrivere il predicato SQL con i SOLI criteri validi... invece di fare quel mapazzone...?

    Il predicato SQL si può scrivere e, controllando i Contribuenti del Criterio se validi si insericono nella stringa altrimenti NO...!
    Es:
    
    Dim strSQL As String
    Dim strWH As string
    strSQL="SELECT * FROM T1 "
    IF Len(Me!NomeCOntrollo1 & vbNullstring)>0 Then strWH=strWH & "NomeCampo1  =" & MeNomeControllo1 & " AND "
    IF Len(Me!NomeCOntrollo2 & vbNullstring)>0 Then strWH=strWH & "NomeCampo2  =" & MeNomeControllo2 & " AND "
    IF Len(Me!NomeCOntrollo3 & vbNullstring)>0 Then strWH=strWH & "NomeCampo3  =" & MeNomeControllo3 & " AND "
    .....
    If Len(strWH)>0 then 
        strWH=" WHERE " & Mid$(strWH,1,Len(strWH)-5)
        strsql = strSQL & strWH
    End if
    ' Se hai anche strORDBY lo aggiungi
    Dbengine(0)(0).QueryDefs("NomeQuery").SQL=strSQL
    Ora vai a guardare la query...

    Fai attenzione alle righe di controllo dei criteri, serve applicare la SINTASSI corretta per ogni Controllo/Campo in base al FieldType.
  • Re: Query in visualizzazione struttura, criteri su una sola riga, si puo?

    Seguendo il tuo suggerimento ho creato una function per eseguire l'accodamento:
    Dim strSQL As String
    Dim strWH As String
    
    strSQL = "INSERT INTO CONF005b( MT, [...]) "
    strSQL = strSQL & "SELECT * FROM CONF005 "
    
    strWH = strWH & "[MT]  =" & [Forms]![CONF000]![Tipo_F] & " AND "
    If Len([Forms]![CONF000]![Tipo_o] & vbNullString) > 0 Then strWH = strWH & "[tr]  =" & "'" & [Forms]![CONF000]![Tipo_o] & "'" & " And "
    If Len([Forms]![CONF000]![Tipo_C] & vbNullString) > 0 Then strWH = strWH & "[CL]  =" & "'" & [Forms]![CONF000]![Tipo_C] & "'" & " And "
    [....]
    
    If Len(strWH) > 0 Then
        strWH = " WHERE " & Mid$(strWH, 1, Len(strWH) - 5)
        strSQL = strSQL & strWH
    End If
    Debug.Print strSQL
    CurrentDb.Execute strSQL
    Ho modificato poi:
    strSQL = "INSERT INTO CONF005b( MT, [...], ID_c) "
    Dove ID_c non è contenuto in CONF005 ma è = [Forms]![CONF000]![ID]
    quindi:
    strSQL = strSQL & "SELECT * FROM CONF005, [Forms]![CONF000]![ID] as Expr1 "
    Poi ho modificato * in
    pippo = "[Forms]![CONF000]![ID] as Expr1"
    strSQL = strSQL & "SELECT MT, [...], " & pippo & " "

    Guardando il risultato della stringa in una msgbox sembra corretto:
    INSERT INTO CONF005b_Tempi_commesse( Mt, [...], Id_commessa_tempi ) SELECT CONF005.Mt, [...], " & pippo & " AS exp1 """

    dove 13 è il valore di [Forms]![CONF000]![ID]
    se invece lo passo come
    INSERT INTO CONF005b_Tempi_commesse( Mt, [...], Id_commessa_tempi ) SELECT CONF005.Mt, [...], 13

    ma mi da sempre operatore mancante
    Se invece
    pippo = [Forms]![CONF000]![ID]
    pippo = pippo & " as Expr1"
    [code]
    Mi dice l'input deve contenere almeno una tabella o una query.
    Non capisco se sbaglio io o se semplicemente non si puo fare, per ora ho risolto per ora creando una query di aggiornamento ed aggiornando tutti i campi ID vuoti dopo aver eseguito la function ma possibile che non si possa passare direttamente il valore [id_C]=[Forms]![CONF000]![ID] in fase di esecuzione della function?
  • Re: Query in visualizzazione struttura, criteri su una sola riga, si puo?

    Fai un Debug.Print oppure un bel MsgBox della Stringa prima di eseguirla... devi imparare a fare DEBUG di quello che scrivi altrimenti non puoi procedere... noi possiamo solo verificare i MACRO ERRORI, ma non ci si valorizzano i dati quindi fatichiamo ad entrare nel merito della correttezza della Stringa finale che non vediamo.

    Poi secondo te, funziona una cosa simile...?
    
    INSERT INTO CONF005b( MT, [...]) SELECT * FROM CONF005
    Devi leggere anche un po di TEORIA di BASE... la trovi comodamente in rete nel sito MS...
    C'è una regola molto rigida per fare un INSERT da Query... ovvero i Campi devono corrispondere... e tu con [*] di certo non gli consenti di capire cosa accodare a cosa...
    https://msdn.microsoft.com/en-us/library/office/ff834799.aspx
    In particolare risulta molto chiaro da quì:
    
    You can also use INSERT INTO to append a set of records from another table or query by using the SELECT … FROM clause as shown above in the multiple-record append query syntax. In this case, the SELECT clause specifies the fields to append to the specified target table.
  • Re: Query in visualizzazione struttura, criteri su una sola riga, si puo?

    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
  • Re: Query in visualizzazione struttura, criteri su una sola riga, si puo?

    Seconde me non ti è chiaro cosa devi fare perchè hai scritto cose estremamente assurde...!
    
    NSERT 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
    Queste 4 righe contengono un numero di ERRORI impressionante, come è possibile secondo te gestire un aiuto nel quale ogni cosa va messa in discussione...?

    A parte il predicato SQL, che hai MIXATO 2 modalità di inserimento, una da Elenco ed una da Origine... su cui fossi in te mi limiterei a non inventare nulla...!
    Quindi se usi l'inserimento per valori:
    
    INSERT INTO table_name (column1, column2, column3, ...)
    VALUES (value1, value2, value3, ...);
    Seinvece usi l'inserimento da Origine dati(Tabella o Query):
    
    INSERT INTO table2
    SELECT * FROM table1
    WHERE condition;
    In questo caso come ti è già stato detto i campi devono essere UGUALI, altrimenti si usa questa sintassi
    
    INSERT INTO table2 (column1, column2, column3, ...)
    SELECT column1, column2, column3, ...
    FROM table1
    WHERE condition;
    Detto questo poi, i campi, e di conseguenz ai Valori attribuiti ad essi, vanno FORMATTATI in modo differenziato a seconda siano:
    
    Numerico(Intero)
    Numerico(con decimali, perchè la virgola è affetta dalle impostazioni Internazionali, quindi potrebbe servire il PUNTO)
    Testo
    Data
    Se non vuoi preoccuparti di Formattare, si usano Query Parametriche...

    Insomma... io mi fermo quì... invitandoti a fare una lettura prima di fare prove che potresti evitare leggendo qualche testo attinente ad un minimo di teoria.
  • Re: Query in visualizzazione struttura, criteri su una sola riga, si puo?

    bean_bandit ha scritto:


    Debug.Print
    :INSERT INTO ...  Select CONF005_Elenco_Tempi.Macchina_tempi, ... CONF005_Elenco_Tempi.125, CONF005_Elenco_Tempi.250, CONF005_Elenco_Tempi.330, ...
    Immagino che i duepunti all'inizio siano un refuso da copiaincolla o simile.
    Chi ha avuto la brillante idea di attribuire ai campi un nome che è "numerico"? Prova a racchiudere tutti i campi con nome corrispondente ad un numero tra parentesi quadre
    [CONF005_Elenco_Tempi].[125], [CONF005_Elenco_Tempi].[250], [CONF005_Elenco_Tempi].[330], ...
    Pensaci e ripensaci e pensanci un'altra volta se decidi di tenere i nomi dei campi così, saranno grane e basta.
    Ammesso che abbia capito giusto, non ho letto proprio tutto in maniere approfondita.
  • Re: Query in visualizzazione struttura, criteri su una sola riga, si puo?

    @Alex ha scritto:


    A parte il predicato SQL, che hai MIXATO 2 modalità di inserimento, una da Elenco ed una da Origine... su cui fossi in te mi limiterei a non inventare nulla...!
    Quindi se usi l'inserimento per valori:
    Codice: Seleziona tutto
    INSERT INTO table_name (column1, column2, column3, ...)
    VALUES (value1, value2, value3, ...);

    [...]

    Insomma... io mi fermo quì... invitandoti a fare una lettura prima di fare prove che potresti evitare leggendo qualche testo attinente ad un minimo di teoria.
    Era in verita una delle prime sintassi che avevo scritto, ho capito solo adesso perche non andava, il nome di uno dei campi era sbagliato, togliendoli uno ad uno ho capito qual'era. Hai ragione sul procedere a tentoni ma cerco sempre di esplorare tutto il possibile prima di chiedere sul forum, a volte capisco come si fa altre volte mi perdo poi in ragionamenti assurdi e non ci salto piu fuori...

    @Philcattivocarattere ha scritto:


    Prova a racchiudere tutti i campi con nome corrispondente ad un numero tra parentesi quadre
    Perfetto! senza me li considera valori puri, invece con le parentesi prende il valore contenuto nel campo.

    @Philcattivocarattere ha scritto:


    Chi ha avuto la brillante idea di attribuire ai campi un nome che è "numerico"?
    Pensaci e ripensaci e pensanci un'altra volta se decidi di tenere i nomi dei campi così, saranno grane e basta.
    Ti spiego il perche poi magari c'è un modo per far funzionare il tutto usando un campo che si chiama F125, F250, ecc...

    In questa prima function semplicemente filtro i dati da una tabella archivio e li scrivo in una tabella [CONF005b_Tempi_commesse] che li lega ad uno specifico cliente.

    Oltre ai valori 125, 250, ecc.., devo avere la possibilita di inserire uno o piu valori personalizzati, ad essempio 200.

    Quindi la tabella [CONF005b_Tempi_commesse] avra a sua volta legata una tabella contenente due campi, [dimesione personalizzata] e [valore personalizzato] dove [valore personalizzato] sara calcolato con una function del tipo curva tra i valori contenuti nella due colonne piu prossima a [dimesione personalizzata] ovvero 125 e 250, per questo avevo utilizzato campi numerici.

    Eredito questo modo di pensare da excel che mi rendo conto non essere la stessa cosa quindi magari si puo fare in maniera diversa

    Ps. lascio la function funzionante a beneficio di altri che magari possono incappare nel mio stesso problema:
    Dim strSQL As String
    Dim strSQL_C As String
    Dim strSQL_S As String
    Dim strWH As String
    Dim Tb_Into As String
    Dim Tb_From As String
    strSQL = "INSERT INTO CONF005b_Tempi_commesse (Macchina_tempi, PRODOTTO, [g/l], T_C, Opzione_trattamento, Collo, Livello, Tolleranza, Mat_Contenitori, [125], [250], [330], [350], [500], [600], [750], [1000], [1250], [1500], [2000], [2250], [2500], [3000], [3500], [Note], Id_commessa_tempi ) "
    strSQL_S = "SELECT Macchina_tempi, PRODOTTO, [g/l], T_C, Opzione_trattamento, Collo, Livello, Tolleranza, Mat_Contenitori, [125], [250], [330], [350], [500], [600], [750], [1000], [1250], [1500], [2000], [2250], [2500], [3000], [3500], [Note], " & [Forms]![CONF000_Dimensionamento]![ID_dimensionamento] & " FROM CONF005_Elenco_Tempi"
    strSQL_C = strSQL & strSQL_S
    Debug.Print strSQL_C
    
    strWH = strWH & "[Macchina_tempi]  =" & [Forms]![CONF000_Dimensionamento]![Tipo_Filler] & " AND "
    If Len([Forms]![CONF000_Dimensionamento]![Tipo_opzione] & vbNullString) > 0 Then strWH = strWH & "[Opzione_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]![CONF000_Dimensionamento]![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_C = strSQL_C & strWH
    End If
    
    CurrentDb.Execute strSQL_C
    Edit. avevo incollato una funzione sbagliata
  • Re: Query in visualizzazione struttura, criteri su una sola riga, si puo?

    bean_bandit ha scritto:


    ..

    @Philcattivocarattere ha scritto:


    Chi ha avuto la brillante idea di attribuire ai campi un nome che è "numerico"? ...
    Ti spiego il perche
    ...
    Quindi la tabella [CONF005b_Tempi_commesse] avra a sua volta legata una tabella contenente due campi, [dimesione personalizzata] e [valore personalizzato] dove [valore personalizzato] sara calcolato con una function del tipo curva tra i valori contenuti nella due colonne piu prossima a [dimesione personalizzata] ovvero 125 e 250, per questo avevo utilizzato campi numerici.
    Tu hai spiegato ma io non ho capito, mi prendo come alibi il fatto di non conoscere il "tuo ambiente d'uso" del database e probabilmente non capirei nemmeno in futuro quand'anche i dettagli diventassero più precisi.
    Ad intuito sento però che una strada percorribile potrebbe essere quella della "destrutturazione" della tabella. Cioè quelli che adesso sono i campi (quindi ci sono tutti per tutti i record) potrebbero diventare record in una tabella separata, attribuendo solo quelli che servono ad ogni record di CONF005b_Tempi_commesse o di non so quale altra tabella (è impossibile capire dove agire, ammesso che l'intuizione sia giusta)
    Qui trovi alcune nozioni sulla destrutturazione
    https://www.iprogrammatori.it/forum-programmazione/access/idee-sulla-normalizzazione-t30970.html#p8573841
    ma questo, oltre ad essere a mio avviso oggetto eventualmente di thread autonomo, se lo riterrai opportuno, è oltre le mie conoscenze (attuali, ovviamente)
  • Re: Query in visualizzazione struttura, criteri su una sola riga, si puo?

    Philcattivocarattere ha scritto:


    Tu hai spiegato ma io non ho capito, mi prendo come alibi il fatto di non conoscere il "tuo ambiente d'uso" del database e probabilmente non capirei nemmeno in futuro quand'anche i dettagli diventassero più precisi.
    Ad intuito sento però che una strada percorribile potrebbe essere quella della "destrutturazione" della tabella. Cioè quelli che adesso sono i campi (quindi ci sono tutti per tutti i record) potrebbero diventare record in una tabella separata, attribuendo solo quelli che servono ad ogni record di CONF005b_Tempi_commesse o di non so quale altra tabella (è impossibile capire dove agire, ammesso che l'intuizione sia giusta)
    Qui trovi alcune nozioni sulla destrutturazione
    https://www.iprogrammatori.it/forum-programmazione/access/idee-sulla-normalizzazione-t30970.html#p8573841
    ma questo, oltre ad essere a mio avviso oggetto eventualmente di thread autonomo, se lo riterrai opportuno, è oltre le mie conoscenze (attuali, ovviamente)
    Ci ho pensato un po su, ma non credo che sia una strada percorribile, CONF005b_Tempi_commesse contiene i dati filtrati di CONF005_Elenco_Tempi ed associati ad una singola commessa in modo da permettere poi ad un utente di modificarli e questo ancora prima di andare ad inserire un valore personalizzato.

    In sostanza uno schema di funzionamento è
    Fase 1
    Form ---> Filtro CONF005_Elenco_Tempi ---> Scrivo in CONF005b_Tempi_commesse
    Fase 2
    Operatore modifica i dati di CONF005b_Tempi_commesse
    Fase 3
    Operatore sceglie (se necessario) uno formati personalizzati ed i valori ad essi associati sono calcolati partendo da CONF005b_Tempi_commesse

    Chiaramente andiamo in un altro argomento qui e come hai suggerito chiudo l'OT e nel caso apro un nuovo tread.


    PS. ho editato la precedente function... ero cosi cotto ieri che ho copiato una cosa che non andava...
Devi accedere o registrarti per scrivere nel forum
9 risposte