Macro per trasferire dati da una tabella ad un'altra

Discussioni sulle caratteristiche di database
Rispondi
Avatar utente
bydindi
Messaggi: 258
Iscritto il: lunedì 21 febbraio 2011, 10:16

Macro per trasferire dati da una tabella ad un'altra

Messaggio da bydindi »

Ecco il quesito:

Ho preso in prestito il DB che ha modificato Gaetano in questo post:
http://forum.openoffice.org/it/forum/vi ... 244#p19244

e questo è il DB:
https://dl.dropbox.com/u/31847429/Assic ... liente.odb

quando apro il form "contratto" per creare un nuovo contratto ad un certo punto dovrò inserire l'ID cliente, clicco sul pulsante "ricerca cliente" che mi apre il formulario cliente, trovo il cliente che mi interessa e a questo punto...... servirebbe una macro che mi copi l'ID del cliente visualizzato nel form Cliente e lo incolli nella casella ID Cliente del formulario Contratto!

(attualmente una volta trovato il cliente vado sul campo ID e con tasto DX copio, chiudo la mashera cliente mi posiziono sul campo ID cliente nel Form Contratto e con tasto DX faccio "incolla" )

Ciao
Paolo

Aggiungo:
Utilizzo la macro per la ricerca dei Clienti:

Codice: Seleziona tutto

Sub FiltraListaClienti(oEv)
oModel = oEv.Source.Model
sTestoPerRicerca = oEv.Source.getAccessibleContext.Text
oForm = oModel.Parent
oForm.Filter = " ( ""Clienti"".""Cognome"" LIKE '%" & sTestoPerRicerca & "%' OR ""Clienti"".""C.Fiscale"" LIKE '%" & sTestoPerRicerca & "%' )"
oForm.reload()
End Sub
ma non riesco ad adattarla per la ricerca a partire dal ID
OOo 4.1.1 su Windows Vista
Avatar utente
Mizio1961
Messaggi: 841
Iscritto il: mercoledì 5 ottobre 2011, 22:55
Località: Roma

Re: Macro per trasferire dati da una tabella ad un'altra

Messaggio da Mizio1961 »

Ciao
Ti ho allegato il tuo DB con una prova di formulario diverso, F_Contratti, dove ho portato dentro al formulario la selezione del Cliente.
Tra le macro ne hai tre nuove, una che lavora sulla selezione del cliente e porta con se l'ID dello stesso, la seconda che pulisce il filtro che viene impostato selezionando il cliente, la terza che genera un nuovo record in base alla selezione corrente del cliente.
Vedi se può esserti utile così
Saluti
Allegati
AssicurazioniInsCliente.odb
(71.74 KiB) Scaricato 459 volte
OpenOffice Windows - Libre su Ubuntu Desktop e Notebook WiFi
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto. ;-)
Avatar utente
bydindi
Messaggi: 258
Iscritto il: lunedì 21 febbraio 2011, 10:16

Re: Macro per trasferire dati da una tabella ad un'altra

Messaggio da bydindi »

Ciao Mizio, grazie per il tuo interessamento

In realtà nel mio formulario esiste già una casella di riepilogo per selezionare il cliente ma è proprio quello che vorrei evitare in quanto ho notato che quando l'elenco incomincia a crescere è comunque difficile trovare il cliente (digito le prime lettere ma se non lo faccio consecutivamente mi ricomincia la ricerca dall' ultima lettera digitata), non so se mi sono spiegato bene, comunque ciò che mi serve lo riassumo con delle immagini:
quando apro il mio formulario per l'apertura di un nuovo contratto mi appare questo:
https://dl.dropbox.com/u/31847429/CONTRATTO.jpg
inserisco i vari dati (ra numero,rf numero, uscita,prev rientro ecc.) poi il cursore si posiziona su "codice cliente"
a questo punto se conosco già il codice (ho un file che mi stampa le prenotazioni dove compaiono sia il codice cliente che il codice guidatore) lo inserisco, altrimenti clicco nella tendina che ho evidenziato con "2" e mi recupero il nominativo che,una volta selezionato, mi mette in automatico il codice cliente nel campo "codice" e senza bisogno di macro.
ma quest'ultima opzione vorrei eliminarla,(anche per recuperare un po' di spazio che inizia a scarseggiare) quindi c'è ancora una possibilità:
clicco sul tasto "1" (RICERCA/MODIFICA CLIENTE) e si apre questa maschera:
https://dl.dropbox.com/u/31847429/FORM%20CLI.jpg
nel campo "3" cerco la denominazione e prendo nota del "Id" che compare nel campo "4" che ho cerchiato in alto a sinistra e lo inserisco manualmente nel "codice cliente" di cui sopra nella maschera contratto, ecco cercavo una macro che mi evitasse la fase che ho evidenziato in G-rosso
Mi piacerebbe aprire il form Clienti, cercare il cliente e, una volta trovato, con la pressione di un pulsante...zac! mi piazza il codice nel campo codice del contratto!

Naggia che prolisso!

Ciau
OOo 4.1.1 su Windows Vista
Avatar utente
Mizio1961
Messaggi: 841
Iscritto il: mercoledì 5 ottobre 2011, 22:55
Località: Roma

Re: Macro per trasferire dati da una tabella ad un'altra

Messaggio da Mizio1961 »

Ciao
Il sistema è semplice.
1) Prendi il rif della Form Clienti e acquisisci con getByName il valore del controllo che contiene l'ID selezionato corrente
2) Acquisisci il rif. del formulario contratti e sempre con la funzione getByName lo assegni al controllo ID presente in quest formulario
3) Fai il commit di questo controllo e l'update della riga di tabella contratti corrente
Il gioco è fatto
Saluti
OpenOffice Windows - Libre su Ubuntu Desktop e Notebook WiFi
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto. ;-)
Avatar utente
bydindi
Messaggi: 258
Iscritto il: lunedì 21 febbraio 2011, 10:16

Re: Macro per trasferire dati da una tabella ad un'altra

Messaggio da bydindi »

Mizio1961 ha scritto:Ciao
Il sistema è semplice
.........................................
.........................................
Il gioco è fatto
Saluti
sono le uniche parole che ho capito, lo ammetto se non ci capisco nulla di macro è colpa mia ma comunque il fatto che ci sia una soluzione e anche semplice mi fà ben sperare :super:
OOo 4.1.1 su Windows Vista
Avatar utente
Mizio1961
Messaggi: 841
Iscritto il: mercoledì 5 ottobre 2011, 22:55
Località: Roma

Re: Macro per trasferire dati da una tabella ad un'altra

Messaggio da Mizio1961 »

Ciao
Ho capito. Come ho un'attimo ti mando la macro che dovrebbe fare ciò che chiedi.
Te la sviluppo sul piccolo esempio che hai allegato qualche messaggio fa
Saluti
09-04-2013
Allora
1) Metti questa riga a inizio modulo macro FUORI da ogni macro:

Codice: Seleziona tutto

Global oGForm as object                          ' VAR. GLOBALE PER FORMULARIO CHIAMANTE
Serve per memorizzare l'oggetto formulario chiamante F_Contratti e renderlo disponibile all'interno di qualsiasi macro
2) Sostituisci la tua macro ApriFormulario con la seguente:

Codice: Seleziona tutto

Sub ApriFormulario(oEvnt)
   dim sTitle as string
   dim oThisCp, oConnDB, oCompWn as object
   dim oForm, oFormLM as object
'   dim oGForm as object
   dim i as integer
   '---------------------------------------------'
   sNameDB = "AssicurazioniInsCliente.odb"       ' NOME TUO DB SE DIVERSO DA
   sNameFm = "Clienti"                           ' NOME TUO FORMULARIO SE DIVERSO DA  
   oThisCp = ThisComponent                       ' ACQ. THISCOMPONENT
   sTitle  = oThisCp.Title                       ' ACQ. TITOLO THISCOMPONENT
   oGForm  = oEvnt.source.model.parent           ' MEMORIZZO FORMULARIO CONTRATTI IN VAR GLOBALE
   while len(sTitle) > len(sNameDB)              ' CERCA OGGETTO DATABASE
      if sTitle = sNameDB then                   ' IF    SONO SU WIND MAIN DB
         sTitle = 0                              '
      else                                       ' ELSE LEGGO OGGETTO LIV. SUPERIORE
         oThisCP = oThisCP.Parent                ' ACQ. OGGETTO LIV. SUPERIORE
         sTitle  = oThisCp.Title                 ' ACQ. TITOLO OGGETTO LIV. SUPERIORE
      endif                                      ' ENDIF
   wend                                          '
   oForm   = oThisCp.FormDocuments.getByName(sNameFm)
   oForm.open                                    ' APRE FORM RICHIESTA
end sub                                          ' FINE
3) Aggiungi la macro trsfIDCliente:

Codice: Seleziona tutto

Public Sub trsfIDCliente(oEv)                    ' TRASFERISCI ID Cliente
   dim oForm, oFormD as object
   dim oCntl, oCntlD as object
   dim CVALUE as integer
   dim ARRAY(0) as string
   '---------------------------------------------' 
   oForm  = oEv.source.model.parent              ' ACQ. OGGETTO FORM CORRENTE
   oCntl  = oForm.GetByName("fmtIDCliente")      ' ACQ. CONTROLLO IDCliente
   oCntlD = oGForm.getByName("IDCliente")        ' ACQ. CONTROLLO IDCliente IN FORM CONTRATTO  
   oCntlD.effectivevalue = oCntl.effectivevalue  ' ASSEGNO VALORE
   oCntlD.commit                                 ' LO SALVO IN DB
   oGForm.updaterow()                                ' AGGIORNO IL FORMULARIO CONTRATTI
end sub                                          ' FINE
4) Associala al bottone del formulario Clienti
Prova!!! Il gioco è fatto o almeno dovrebbe visto che a me funziona
Ti allego anche il tuo DB con la libreria completa delle macro di cui ho riportato sopra il codice
Saluti by Mizio
Allegati
AssicurazioniInsCliente.odb
(67.44 KiB) Scaricato 352 volte
Ultima modifica di Mizio1961 il martedì 9 aprile 2013, 14:17, modificato 1 volta in totale.
OpenOffice Windows - Libre su Ubuntu Desktop e Notebook WiFi
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto. ;-)
Avatar utente
bydindi
Messaggi: 258
Iscritto il: lunedì 21 febbraio 2011, 10:16

Re: Macro per trasferire dati da una tabella ad un'altra

Messaggio da bydindi »

Ciao
Ho aperto il DB che hai allegato, lo ho registrato e sono andato sul formulario F_Contratti, ho cliccato sul pulsante Clienti per la ricerca del cliente, ho selezionato "PINCO PALLINO" e alla pressione del pulsante
"Trasferisci ID" mi appare questo messaggio:

https://dl.dropbox.com/u/31847429/ERRORE.jpg

:(
OOo 4.1.1 su Windows Vista
Avatar utente
Mizio1961
Messaggi: 841
Iscritto il: mercoledì 5 ottobre 2011, 22:55
Località: Roma

Re: Macro per trasferire dati da una tabella ad un'altra

Messaggio da Mizio1961 »

Prova ora
Le modifiche le ho fatte sul messaggio precedente dove ho anche aggiornato l'allegato
Era un problema di nome della casella IDCliente nel formulario F_Contratti (era rimasta su fmtIDCliente quindi non la trovava)
Incrociamo le dita
OpenOffice Windows - Libre su Ubuntu Desktop e Notebook WiFi
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto. ;-)
Avatar utente
bydindi
Messaggi: 258
Iscritto il: lunedì 21 febbraio 2011, 10:16

Re: Macro per trasferire dati da una tabella ad un'altra

Messaggio da bydindi »

Mizio1961 ha scritto:Incrociamo le dita
Ho incrociato tutto l'incrociabile....
ho notato che hai inibito il comando per aggiornare il formulario....... ti avrei chiesto se fosse possibile farlo in quanto se aggiorno i miei formulari senza compilare i campi obbligatori mi dà errore :)

comunque ora mi dà un altro errore:

https://dl.dropbox.com/u/31847429/errore2.jpg

eliminando l'update row mi dà comunque un errore (io quando una linea dà errore la elimino ma non credo sia il modo giusto per correggere un problema... :D :D )
OOo 4.1.1 su Windows Vista
Avatar utente
Mizio1961
Messaggi: 841
Iscritto il: mercoledì 5 ottobre 2011, 22:55
Località: Roma

Re: Macro per trasferire dati da una tabella ad un'altra

Messaggio da Mizio1961 »

E' strano perchè a me funziona perfettamente senza errori.
Dovresti dirmi quale errore ti dà se togli l'updaterow(). Potrebbe essere un problema di permessi di scrittura in tabella
OpenOffice Windows - Libre su Ubuntu Desktop e Notebook WiFi
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto. ;-)
Avatar utente
bydindi
Messaggi: 258
Iscritto il: lunedì 21 febbraio 2011, 10:16

Re: Macro per trasferire dati da una tabella ad un'altra

Messaggio da bydindi »

Se metto ' su update row, la macro si blocca su questa linea:

Codice: Seleziona tutto

oCntlD = oGForm.getByName("IDCliente")        ' ACQ. CONTROLLO IDCliente IN FORM CONTRATTO

e mi dice "variabile dell'oggetto non impostata"
poi se chiudo la finestra di errore mi mette il codice "0" (cliente MAN ALESSANDRO) anche se il cliente che ho visualizzato è un altro (ad es PINCO PALLINO)


*edit*
ho salvato il db e l'ho riaperto ora non mi da errori ma premendo il pulsante per trasferire l'ID mi mette in automatico l'ID "0" (zero), ho provato ad eliminare il codice 0 (modificando l'ID del cliente MAN ALESSANDRO) ma il pulsante continua ad inserire un codice "0" pur non essendo presente nella tabella clienti
OOo 4.1.1 su Windows Vista
Avatar utente
Mizio1961
Messaggi: 841
Iscritto il: mercoledì 5 ottobre 2011, 22:55
Località: Roma

Re: Macro per trasferire dati da una tabella ad un'altra

Messaggio da Mizio1961 »

Per caso hai rimesso oGform.reload?
Se è così lui torna sempre al primo record e fa un pò di casino.
Per questo avevo REMMATO la riga
OpenOffice Windows - Libre su Ubuntu Desktop e Notebook WiFi
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto. ;-)
Avatar utente
bydindi
Messaggi: 258
Iscritto il: lunedì 21 febbraio 2011, 10:16

Re: Macro per trasferire dati da una tabella ad un'altra

Messaggio da bydindi »

No ho lasciato anche il REM so oGform, managgia sarebbe la ciliegina sulla torta
OOo 4.1.1 su Windows Vista
Avatar utente
Mizio1961
Messaggi: 841
Iscritto il: mercoledì 5 ottobre 2011, 22:55
Località: Roma

Re: Macro per trasferire dati da una tabella ad un'altra

Messaggio da Mizio1961 »

Non so che dirti
L'ho scaricato anche a casa e funziona tranquillamente
Prova ad aggiungere

Codice: Seleziona tutto

on error resume next: 
davanti alle due righe di programma updaterow() e reload
Così il programma continua l'esecuzione anche in presenza di errori
Però è strano che dia questi problemi quando a me su due installazioni completamente diverse mi lavora tranquillamente
Prova a vedere se è un problema legato alla versione corrente di Java. Quella che ancora oggi è ritenuta ben affidabile è la 1.6.0_22
Per controllare vai su menù Strumenti->Opzioni->Openoffice.org->Java. Ti appare un riquadro con una o più versioni di Java.
Seleziona quella che ti ho detto, chiudi OpenOffice, riavvialo, incrocia le dita e vedi se cambia qualcosa.
Saluti by Mizio
OpenOffice Windows - Libre su Ubuntu Desktop e Notebook WiFi
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto. ;-)
Avatar utente
bydindi
Messaggi: 258
Iscritto il: lunedì 21 febbraio 2011, 10:16

Re: Macro per trasferire dati da una tabella ad un'altra

Messaggio da bydindi »

La versione java è la 1.6.0_22, eliminando (o modificando con on error resume next:) quelle righe funziona in questo modo:
sul formulario F_Contratti non funziona per niente.
sul formulario Contratto mi esce questo errore:
https://dl.dropbox.com/u/31847429/errore3.jpg
però cliccando su ok il formulario si apre comunque e a questo punto se apro il form Clienti tramite il pulsante, funziona!!! seleziono un cliente oppure ne aggiungo uno nuovo e premendo "trasferisci......" mi copia pari pari l'Id Cliente!!! :super:
ma c'è un altro problema, il formulario non permette di aggiungere altri record ma mi modifica solo quello visualizzato :(
Nelle proprietà del modulo "Contratto" mi compare "TABELLA" (nel tipo di contenuto) e nel Contenuto compare un comando SQL:
SELECT Contratto.* FROM Contratto, Clienti WHERE Clienti.IDCliente = Contratto.IDCliente AND Contratto.IDCliente = 33 che viene riportato nell'errore del quale ho allegato l'immagine precedente.
Inoltre ho visto che hai modificato la chiave primaria della tabella Contratto impostando come chiave il campo CNROW ma io nel mio db definitivo ho come chiave primaria IdContratto con il quale ho diverse query associate, quindi se la soluzione comporta la modifica della chiave primaria. ho paura che non riuscerei a cavarne piedi, peccato, grazie comunque per il tentativo :D
OOo 4.1.1 su Windows Vista
Avatar utente
Mizio1961
Messaggi: 841
Iscritto il: mercoledì 5 ottobre 2011, 22:55
Località: Roma

Re: Macro per trasferire dati da una tabella ad un'altra

Messaggio da Mizio1961 »

Ciao
L'unica cosa che posso dirti è di allegare il tuo DB reale dove vedo se è possibile far funzionare la macro
Altrimenti... copia e incolla...
Saluti e alla prossima ;)
OpenOffice Windows - Libre su Ubuntu Desktop e Notebook WiFi
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto. ;-)
Avatar utente
bydindi
Messaggi: 258
Iscritto il: lunedì 21 febbraio 2011, 10:16

Re: Macro per trasferire dati da una tabella ad un'altra

Messaggio da bydindi »

Ovviamente senza impegno

questa è la pagina iniziale che NON ti comparirà con le immagini perchè è tutto linkato (ho anche eliminato i report a favore di normali fogli writer esterni che una macro si pesca all' occorrenza)
https://dl.dropbox.com/u/31847429/HOME_SGA.jpg

questo è il database:
https://dl.dropbox.com/u/31847429/SGA1%20-%20Copia.odb
dove ho evidenziato il pulsante "RA" che apre il contratto e da vorrei che funzionasse il tutto, ci sono anche altri Form simili che sevono per registrare contratti "esterni" (ad esempio consegne in hotel)
ma ovviamente se mi dai uno spunto con una macro penserò io ad adattarla agli altri form... spero :mrgreen:
OOo 4.1.1 su Windows Vista
Avatar utente
Mizio1961
Messaggi: 841
Iscritto il: mercoledì 5 ottobre 2011, 22:55
Località: Roma

Re: Macro per trasferire dati da una tabella ad un'altra

Messaggio da Mizio1961 »

Ciao
E' strano ma il tuo aggiornamento mi è apparso solo oggi... forse ero disattento :knock:
Gli ho dato un'occhiata e il risultato lo trovi qui https://drive.google.com/#my-drive identificandoti con Nome Utente: oodocs.tutorial@gmail.com e password: oodocs2012tut
Ho apprortato le seguenti modifiche: In Module1 ho aggiunto la variabile globale

Codice: Seleziona tutto

Global oGForm as object
e nella macro ApreFormulario la riga di codice

Codice: Seleziona tutto

    oGForm  = Evento.source.model.parent           ' MEMORIZZO FORMULARIO CONTRATTI IN VAR GLOBALE	
.
In Module3 ho inserito la macro trsfIDCliente e aggiunto un bottone TrasfID nel formulario Clienti che punta a questa macro... e il gioco è fatto!!! O almeno sul mio PC funziona
Vedi un pò cosa dice a te...
Saluti e fammi sapere
OpenOffice Windows - Libre su Ubuntu Desktop e Notebook WiFi
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto. ;-)
Avatar utente
bydindi
Messaggi: 258
Iscritto il: lunedì 21 febbraio 2011, 10:16

Re: Macro per trasferire dati da una tabella ad un'altra

Messaggio da bydindi »

Grazie Maurizio per il tuo impegno, purtroppo a me non funziona, se "Remmo" oGForm.updaterow() e clicco due volte (perchè al primo click il codice si resetta e mostra 0 (zero)) mi compare correttamente il codice visualizzato nel Form Clienti ma non mi mostra gli altri dati (indirizzo e città) che invece vengono mostrati normalmente se seleziono la ditta dal menù a tendina....che vorrei eliminare! :D
ma comunque una volta cliccato il pulsante per salvare il record, il codice sparisce e ricompare nuovamente il codice zero....
Se invece lascio oGForm.updaterow() il codice cliente appare per un decimo di secondo per lasciare il posto al famigerato "zero" :crazy:

Per ora mi tengo le tendine.... stà arrivando il caldo e almeno mi fanno un po' di ombra :mrgreen:

Grazie infinite ancora
Paolo
OOo 4.1.1 su Windows Vista
Rispondi