Pagina 1 di 1
Macro per trasferire dati da una tabella ad un'altra
Inviato: giovedì 21 marzo 2013, 20:44
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
Re: Macro per trasferire dati da una tabella ad un'altra
Inviato: sabato 6 aprile 2013, 19:36
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
Re: Macro per trasferire dati da una tabella ad un'altra
Inviato: domenica 7 aprile 2013, 0:33
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
Re: Macro per trasferire dati da una tabella ad un'altra
Inviato: domenica 7 aprile 2013, 7:55
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
Re: Macro per trasferire dati da una tabella ad un'altra
Inviato: domenica 7 aprile 2013, 23:11
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

Re: Macro per trasferire dati da una tabella ad un'altra
Inviato: lunedì 8 aprile 2013, 10:58
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
Re: Macro per trasferire dati da una tabella ad un'altra
Inviato: martedì 9 aprile 2013, 12:53
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

Re: Macro per trasferire dati da una tabella ad un'altra
Inviato: martedì 9 aprile 2013, 14:19
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
Re: Macro per trasferire dati da una tabella ad un'altra
Inviato: martedì 9 aprile 2013, 14:48
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...

)
Re: Macro per trasferire dati da una tabella ad un'altra
Inviato: martedì 9 aprile 2013, 16:03
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
Re: Macro per trasferire dati da una tabella ad un'altra
Inviato: martedì 9 aprile 2013, 18:02
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
Re: Macro per trasferire dati da una tabella ad un'altra
Inviato: martedì 9 aprile 2013, 18:18
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
Re: Macro per trasferire dati da una tabella ad un'altra
Inviato: martedì 9 aprile 2013, 18:50
da bydindi
No ho lasciato anche il REM so oGform, managgia sarebbe la ciliegina sulla torta
Re: Macro per trasferire dati da una tabella ad un'altra
Inviato: martedì 9 aprile 2013, 20:10
da Mizio1961
Non so che dirti
L'ho scaricato anche a casa e funziona tranquillamente
Prova ad aggiungere
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
Re: Macro per trasferire dati da una tabella ad un'altra
Inviato: mercoledì 10 aprile 2013, 0:30
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!!!
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

Re: Macro per trasferire dati da una tabella ad un'altra
Inviato: mercoledì 10 aprile 2013, 8:58
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

Re: Macro per trasferire dati da una tabella ad un'altra
Inviato: mercoledì 10 aprile 2013, 16:01
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

Re: Macro per trasferire dati da una tabella ad un'altra
Inviato: domenica 14 aprile 2013, 19:00
da Mizio1961
Ciao
E' strano ma il tuo aggiornamento mi è apparso solo oggi... forse ero disattento
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
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
Re: Macro per trasferire dati da una tabella ad un'altra
Inviato: venerdì 19 aprile 2013, 12:31
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!
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"
Per ora mi tengo le tendine.... stà arrivando il caldo e almeno mi fanno un po' di ombra
Grazie infinite ancora
Paolo