Eliminare righe da piu tabelle collegate a un record

Discussioni sulle caratteristiche di database
Rispondi
giampoul
Messaggi: 54
Iscritto il: venerdì 26 febbraio 2016, 21:38

Eliminare righe da piu tabelle collegate a un record

Messaggio da giampoul »

Buon Giorno,
ho creato un formulario che collega delle tabelle insieme, vorrei con l'aiuto di un pulsante , eliminare in un colpo tutti i dati collegati a un record specifico.
Esempio: ho un Tabella Cliente che è collegata a una tabella a un n° di preventivo che che a sua volta è collegata a una tabella delle lavorazioni , vorrei che premendo un pulsante possa eliminare il Cliente e tutto quello che è collegato a quest'ultimo.
Openoffice 4 ubuntu 14.04
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Eliminare righe da piu tabelle collegate a un record

Messaggio da Gaetanopr »

Dovresti allegare un db di esempio privo di dati sensibili per fare delle prove
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
giampoul
Messaggi: 54
Iscritto il: venerdì 26 febbraio 2016, 21:38

Re: Eliminare righe da piu tabelle collegate a un record

Messaggio da giampoul »

il file odb
Allegati
Preventivi.odb
(36.4 KiB) Scaricato 139 volte
Openoffice 4 ubuntu 14.04
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Eliminare righe da piu tabelle collegate a un record

Messaggio da Gaetanopr »

In tutte le tre tabelle id_paziente è scritto in maniera diversa e precisamente id_paziente ; id_pazienti ; id_Paziente
Correggi il campo indicando in tutte le tabelle id_paziente, poi aggiungi un pulsante nel formulario Pazienti, associa questa macro all'evento pulsante mouse premuto.
Inoltre aggiungerei(dato che si tratta di eliminazione dati)Un msgbox che ci avverta dell'eliminazione del record e ci consenta di annullare l'operazione.

Codice: Seleziona tutto

Sub Elimina(oEvent)
	oForm = oEvent.Source.Model.Parent 'MainForm from Button
	Paziente = oForm.Columns.getByIndex(0).string
	oStatement = oForm.ActiveConnection.createStatement() 'Create an SQL statement object
    Tabelle = Array("Prescrizione", "SchedaPreventivo", "Pazienti")
    For i = 0 To 2
    	sSQL = "DELETE FROM """ & Tabelle(i)& """ WHERE  ""id_paziente"" = '" & Paziente & "'" 
        oStatement.executeUpdate( sSQL ) 'Execute the SQL command
	Next i
	oForm.reload
end sub
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
giampoul
Messaggi: 54
Iscritto il: venerdì 26 febbraio 2016, 21:38

Re: Eliminare righe da piu tabelle collegate a un record

Messaggio da giampoul »

Ho provato e funziona,rimane solo un problema che non mi cancella le lavorazioni associate LavorazioniPreventivo
Openoffice 4 ubuntu 14.04
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Eliminare righe da piu tabelle collegate a un record

Messaggio da Gaetanopr »

Basta aggiungere la tabella in questo array

Codice: Seleziona tutto

Tabelle = Array("Prescrizione", "SchedaPreventivo", "Pazienti")
Cambia la macro in questo modo

Codice: Seleziona tutto

Sub Elimina(oEvent)
   oForm = oEvent.Source.Model.Parent 'MainForm from Button
   Paziente = oForm.Columns.getByIndex(0).string
   oStatement = oForm.ActiveConnection.createStatement() 'Create an SQL statement object
    Tabelle = Array("Prescrizione", "SchedaPreventivo", "LavorazioniPreventivo", "Pazienti")
    For i = 0 To Ubound(Tabelle)
       sSQL = "DELETE FROM """ & Tabelle(i)& """ WHERE  ""id_paziente"" = '" & Paziente & "'" 
        oStatement.executeUpdate( sSQL ) 'Execute the SQL command
   Next i
   oForm.reload
end sub
Ricorda che la tabella Pazienti deve sempre essere l'ultima ad essere eliminata, quindi indicata alla fine dell'array
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
giampoul
Messaggi: 54
Iscritto il: venerdì 26 febbraio 2016, 21:38

Re: Eliminare righe da piu tabelle collegate a un record

Messaggio da giampoul »

non funziona è possibile perchè la tabella LavorazioniPreventivi e collegata non da id_pazienti ma da id_cb?
Openoffice 4 ubuntu 14.04
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Eliminare righe da piu tabelle collegate a un record

Messaggio da Gaetanopr »

certo

Codice: Seleziona tutto

Sub Elimina(oEvent)
   oForm = oEvent.Source.Model.Parent 'MainForm from Button
   Paziente = oForm.Columns.getByIndex(0).string
   oStatement = oForm.ActiveConnection.createStatement() 'Create an SQL statement object
   sSQL = "DELETE FROM  ""LavorazioniPreventivo""  WHERE  ""id_cb""  in (SELECT ""id_cb"" FROM  ""SchedaPreventivo"" WHERE ""id_paziente"" = '" & Paziente & "')" 
   oStatement.executeUpdate( sSQL ) 'Execute the SQL command 
  
    Tabelle = Array("Prescrizione", "SchedaPreventivo", "Pazienti")
    For i = 0 To Ubound(Tabelle)
       sSQL = "DELETE FROM """ & Tabelle(i)& """ WHERE  ""id_paziente"" = '" & Paziente & "'" 
        oStatement.executeUpdate( sSQL ) 'Execute the SQL command
   Next i
 
  oForm.reload
end sub
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
giampoul
Messaggi: 54
Iscritto il: venerdì 26 febbraio 2016, 21:38

Re: Eliminare righe da piu tabelle collegate a un record

Messaggio da giampoul »

Tutto funziona correttamente molte grazie...un ultimo quesito mi hai consigliato di inserire un msgbox che ci avverta dell'eliminazione del record e ci consenta di annullare l'operazione come posso fare per aggiungerlo?
Openoffice 4 ubuntu 14.04
Gaetanopr
Volontario
Volontario
Messaggi: 3300
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Eliminare righe da piu tabelle collegate a un record

Messaggio da Gaetanopr »

Codice: Seleziona tutto

Sub Elimina(oEvent)
   oForm = oEvent.Source.Model.Parent 'MainForm from Button
   Paziente = oForm.Columns.getByIndex(0).string
  If Msgbox ("Sicuro di volere eliminare i dati relativi al paziente " & Paziente, 1+16,  "Eliminazione Record") = 2 Then Exit Sub 
   oStatement = oForm.ActiveConnection.createStatement() 'Create an SQL statement object
   sSQL = "DELETE FROM  ""LavorazioniPreventivo""  WHERE  ""id_cb""  in (SELECT ""id_cb"" FROM  ""SchedaPreventivo"" WHERE ""id_paziente"" = '" & Paziente & "')" 
   oStatement.executeUpdate( sSQL ) 'Execute the SQL command 
  
    Tabelle = Array("Prescrizione", "SchedaPreventivo", "Pazienti")
    For i = 0 To Ubound(Tabelle)
       sSQL = "DELETE FROM """ & Tabelle(i)& """ WHERE  ""id_paziente"" = '" & Paziente & "'" 
        oStatement.executeUpdate( sSQL ) 'Execute the SQL command
   Next i

  oForm.reload
end sub
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
giampoul
Messaggi: 54
Iscritto il: venerdì 26 febbraio 2016, 21:38

Re: Eliminare righe da piu tabelle RISOLTO

Messaggio da giampoul »

Tutto Ok grazie per il grande aiuto che mi hai dato.
Openoffice 4 ubuntu 14.04
Rispondi