|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 153
|
[Office-openoffice] Programma con form
Avrei la necesità di creare un programmino leggero con office o openoffice che compia piccole operazioni.
Vorrei creare una form che abbia un textbox , una combobox che prenda dati da una query su db, un'altra combo che faccia altrettanto con un altra query ma che cambi i valori che si possono scegliere a seconda della scelta della prima (quindi cambi query), e un tasto submit che faccia eseguire una calcolo sui valori scelti e lo restituisca magari su un altra textbox. Vorrei aiuto su come poter fare. Riesco più o meno a creare la form coi controlli ma ad es. non so come far fare le scelte diverse alla seconda combo e come fare la macro. Grazie davvero a chi volesse aiutarmi. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
E magari, prima di aprire nuovi thread, rispondere a quelli precedenti in cui si è ricevuta attenzione, no ?
http://www.hwupgrade.it/forum/showthread.php?t=1724332 |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 153
|
Hai perfettamente ragione, mi ero scordato di rispondere, l'ho fatto ora e prometto d fare meglio in futuro!! Se potessi darmi una manina in quest'altra situazione...
Grazie |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Bene.
Io ti consiglio ovviamente di usare Office ( preferibilmente 2003 o 2007 ). Perciò userei Excel come applicazione, che estrae i dati da Access e ha il miglior supporto alle form di tutto il pacchetto Office... Il DB Access lo hai già realizzato ? Sei già arrivato ad estrarre il recordset con VBA ? |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 153
|
Per ora ho fatto un database con :
ID-NOMENAZIONE-CODICEREGIONE-FASCIAPESO-NOMEFORNITORE In realtà avevo fatto delle prove su openoffice, così su due piedi non so come fare per creare maschere con controlli associati al database. Non ho estratto recordset. Grazie |
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 153
|
Chiarisco meglio: ho creato e riempito un database che al momento consiste di una sola tabella con attributi :
ID-NOMENAZIONE-CODICEREGIONE-FASCIAPESO-NOMEFORNITORE Ho creato anche una maschera con le combo come avevo detto. Non so come fare per fare il cambio dinamico dei dati della combo come nel primo post e non so come fare per recuperare i valori dei controlli, eseguire operazioni con questi dati e associare il risultato a un altro controllo. |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Prima crei una Query che prende tutti i campi desiderati dalla tabella >> costruisci la tua maschera in creazione guidata, basata sulla Query appena creata, ma lascia fuori i campi che andrai ad associare poi alle ComboBox. Apri la maschera appena creata in vis. struttura, inserisci una nuova Combo, e segui la procedura guidata creazione combo. Scegli l'opzione "Trova un record nella maschera basato sul valore...", e associa la Combo al campo della tabella che vuoi... Comunque in questo caso Una Query = Una Maschera. Se non ho capito male tu all'inizio parlavi anche di una Combo "cambia-query" ? |
|
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 153
|
Grazie, si volevo fare 2 combo di cui la seconda aggiornava i suoi valori quando si cambiano i valori della prima... stile javascript... Vorrei prendere i valori della seconda da una query così come quelli della prima. Ho provato anche a creare del codice VBA pechè dovrei fare delle operazioni confrontando i valoi passati tramite la combo o una textbox con quelli presenti nel db ma non ci sono riuscito....quindi:
Come ci si collega al nostro db in vba? Come si eseguono le query? ho provato così ma ho dei problemi Codice:
Private Sub Comando7_Click()
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim stringa As String
stringa = "Select * FROM costi WHERE Nazione = Francia AND Peso = 2; "
Set conn = CurrentProject.Connection
Set rs = New ADODB.Recordset
rs.Open stringa, conn
If rs.EOF Then
MsgBox "Nessun dato"
Else
Testo4.SetFocus
Testo4.Value = rs("tariffa")
End If
Set cn = Nothing
Set rs = Nothing
End Sub
dice che ci sono problemi con i parametri in rs.Open stringa, conn ...altra domanda nelle query dove si devono mettere le "" tipo where x="ciao" come si fa? perchè mi da problemi di fine comando Spero di non avere chiesto troppe cose insieme ma contribuiscono tutte alla cosa che sto facendo. Grazie ancora |
|
|
|
|
|
#9 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 153
|
UP, ....se pensate che sia meglio faccio più 3d per fare le domande...
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
1. Se fai tutto in Access ci sono buone probabilità che tu non debba usare alcun codice VBA ( io avevo parlato di VBA perchè inizialmente ti avevo consigliato du usare le Form di Excel, non quelle di Access... ). Se vuoi che il cambiamento su una Combo "pilota" ti permetta di scorrere i record della maschera, devi fare una procedura guidata creazione maschera, come ti ho già detto. 2. Quella SELECT è ovvio che non funziona, per 2 motivi : - se nella tabella hai un campo NOMENAZIONE, poi non puoi richiamarlo come Nazione dalla Select. - WHERE NOMENAZIONE = 'Francia' . 3. In generale puoi avere più controlli su una stessa maschera di Access, e senza codice VBA, che fanno riferimento a Query differenti >> Prima ti crei le Query in Access, magari parametriche, le salvi, e poi associando i controlli della maschera alle query, esegui i confronti... 4. Sarebbe molto più semplice se facessi un esempio concreto per volta di ciò che vuoi ottenere. Spesso la gente non risponde ai thread perchè il tempo è scarso, e se inoltre bisogna star lì ad interpretare ciò che uno chiede è meglio lasciar perdere. |
|
|
|
|
|
|
#11 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 153
|
Allora...ricapitolo la situazione:
ho creato un database in ACCESS con una sola tabella tariffe coi seguent campi: ID-NAZIONI-PROVINCE-FORNITORI-TIPOSPED-PESOMIN-PESOMAX-PREZZO ed ho creato per ora le query : 1)select distinct nazioni from tariffe; 2)select distinct province from tariffe where nazioni = "Estonia"; 3)select distinct province from tariffe where nazioni = "Lettonia"; ho poi creato sempre in access una maschera con 2 caselle combinatorie. Alla prima ho associato la query 1 e vorrei che le opzioni della seconda fossero i risultati delle query 2 o 3 a seconda della scelta della prima casella combinatoria. Se ho ben capito dovrebbe essere possibile senza meyttere mano al codice.Come si fa? Infine vorrei inserire un pulsante e un campo testo dove alla pressione del pulsante eseguo una funzione utilizzando i valori selezionati dalle combo e restituisco il risultato nel campo testo. Come posso fare? Quì forse va messo mano a vba? Grazie |
|
|
|
|
|
#12 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 153
|
up HELP.....
ho trovato le seguenti soluzioni su google ma non me ne funziona nemmeno una... 1) aggiungere una afterupdate alla prima combo così: Private Sub combo1_AfterUpdate() Me.combo2.RowSource = "SELECT provinceCap FROM tariffe WHERE nazioni = " & Me.combo1 End Sub 2) basare l'origine record della maschera su una query di questo tipo : SELECT * FROM tariffe WHERE (((nazioni) LIKE nz([forms]![Maschera1]![combo1],"*")) AND ((tariffe.[provinceCap]) LIKE nz([forms]![Maschera1]![combo2],"*"))); e poi crear gli after update in questo modo... Private Sub combo1_AfterUpdate() Me.Requery combo1.Requery combo2.Requery End Sub Private Sub combo2_AfterUpdate() Me.Requery combo1.Requery combo2.Requery End Sub ma nessuna funziona o lameno mi pare AIUTOOOOOOOOOOOOOO
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Io invece farei così :
1. Anzitutto le query : Query1 : Codice:
SELECT DISTINCT tariffe.NAZIONI FROM tariffe; Codice:
SELECT DISTINCT tariffe.PROVINCE FROM tariffe WHERE tariffe.NAZIONI = [nazione]; 2. Ho una maschera con 2 combo che chiamo "cmbNaz" e "cmbProv". - cmbNaz è associata direttamente a Query1. - cmbProv non è associata. 3. cmbNaz contiene già tutte le nazioni all'avvio della maschera, mentre la cmbProv si popola di conseguenza, con questo codice : Codice:
Private Sub cmbNaz_Change()
Dim naz As String
cmbNaz.SetFocus
If cmbNaz.Text <> "" Then naz = cmbNaz.Text
Dim QD As QueryDef
Set QD = CurrentDb.QueryDefs("Query2")
QD.Parameters("nazione") = naz
Dim RS As Recordset
Set RS = QD.OpenRecordset
Dim i As Integer
i = 0
For i = 0 To cmbProv.ListCount - 1
cmbProv.RemoveItem (0)
Next i
RS.MoveFirst
While Not RS.EOF
cmbProv.AddItem (RS("PROVINCE").Value)
RS.MoveNext
Wend
cmbProv.SetFocus
cmbProv.Text = cmbProv.ItemData(0)
RS.Close
QD.Close
Set RS = Nothing
Set QD = Nothing
End Sub
|
|
|
|
|
|
#14 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 153
|
Ti ringrazio moltissimo, solo che ho il seguente errore quando faccio la selezione:
mi si apre una finestra che dice: Errore di runtime '3601' Parametri insufficenti, previsto 2 e se apro il debug sembra che il problema risieda in : Set RS = QD.OpenRecordset help again |
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Da me funziona perfettamente invece ( Access 2003 ).
Tua versione di Access ? |
|
|
|
|
|
#16 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 153
|
La mia è 2007, ora ci riprovo da capo... scusa, non è che puoi darmi qualche commento in più sul codice?
In particolare non ho capito il significato di <> "" nella riga 5 e il comando next i. Grazie ancora |
|
|
|
|
|
#17 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 153
|
Benissimo, grazie a Dio funziona davvero, ho risolto... avevo una serie di problemi:
la cmbProv non si chiamava così, L' attributo province lo chiamavo provinceCap Dovevo impostare il tipo origine riga di CmbProv come elenco valori Grazie Mille ancora, se puoi mi dai due commenti per quello che ti ho chiesto? Ultima cosa (o quasi)... è possibile fare il deploy del progetto access (per chi ha access)nel senso di creare un file che esegua direttamente la maschera? Poi ora dovrei inserire un bottone che prende i valori dalle combo e da un campo text, fa una funzione e restituisce il valore su una text....ma guardo se ci arrivo da solo senza rompere oltre. Ultima modifica di braian : 22-05-2008 alle 14:43. |
|
|
|
|
|
#18 | ||
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Perchè avevi qualche dubbio che non funzionasse ? Quote:
Esegue un semplice controllo di sicurezza sul fatto che in quel momento la cmbNaz non stia mostrando una stringa vuota... Qui si potrebbe inserire un codice opportuno, nel caso si verifichi ( a volte il comportamento dei controlli su Access Forms è "anomalo"... ) ma se va sempre liscio lo lasci pure così com'è... Next i non è altro che l'istruzione di chiusura del For precedente ( in VB non è richiesto che si ripeta "i" dopo Next, ma io lo faccio sempre > quando creerai routines con 300 righe e 5 For nidificati capirai il perchè |
||
|
|
|
|
|
#19 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 153
|
Ripeto l'ultama domanda che ho fatto... per altre cose prometto di aprire nuovi 3d....
E' possibile fare il deploy del progetto access (per chi ha access)nel senso di creare un file che esegua direttamente la maschera? |
|
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Quello che puoi fare è convertire il tuo DB in un file "compilato" .mde, che permette all'utente di fare tutto, ma non di vedere/modificare il codice VBA ( la modalità progettazione sulle maschere è disabilitata |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:25.




















