|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2003
Messaggi: 2172
|
[VB.NET08EE]
salve a tutti!
ho appena finito di realizzare il mio primo programma (funzionanete...) "scritto" in vb.net... perché l'ho scritto tra parentesi? perché non ho dovuto praticamente usare mai la tastiera, ho solo trascinato quel che mi serviva sul form... l'applicazione si appoggia ad un file mdb che contiene delle tabelle che vanno a popolare la tabella principale, in definitiva si tratta di una applicazione per la gestione della pratiche di un ufficio. per ora ho utilizzato solo gli strumenti che .net mette a disposizione, primo su tutti, la barra che gestiche le righe... ora vorrei personalizzare il programma, e vorrei un aiuto da parte vostra: 1) il salvataggio delle pratiche (modifiche a pratiche già inserite o completamente nuove) vorrei che fosse sempre preceduto da un avviso - la messagebox sarebbe tipo "Confermi i dati: <camp01><campo2>" alla pressione di OK il salvataggio viene portato a termine mentre con ANNULLA si ritorna alla form e il programma "rilegge" i dati dal db precedenti le modifiche. così facendo si ha un controllo sulle modifiche alle pratiche esistenti e contemporaneamente una veloce ricapitolazione dei campi inseriti nelle nuove pratiche 2) controllo cancellazione pratiche, se non sbaglio l'approccio al problema dovrebbe essere simile al punto 1, giusto? con l'unica differenza che l'unica pratica cancellabile può essere solo e soltanto l'ultima inserita 3) gestire meglio il numero associato alla pratica... ho notato che se si cancella una pratica il contatore che ho inserito (è un contatore del file mdb...) continua imperterrito ad aumentare senza preoccuparsi che delle righe siano state eliminate dite che devo aggiungere del codice per insegnargli a contare o aggiungo una colonna numero al mio mdb e uso quella con un controllo che mi dica "ultima pratica + 1" o roba simile? 4) gestire avvisi scadenze alcune pratiche devono essere completate in un determinato periodo di tempo, hanno quindi una scadenza, gestita con un campo "data", altre hanno ricorrenze annuali, biennali, triennali e così via; vorrei poter disporre di un sistema visivo per avere sott'occhio queste particolari pratiche. esempio: sfondo normale -> pratica standard/senza scadenza/completata/ecc. sfondo verde -> pratica a ricorrenza annuale o più che sia in scadenza a 6 mesi (di solito sono pratiche che richiedono molto tempo per essere chiuse) sfondo arancione -> pratica con scadenza a una settimana sfondo rosso -> pratica con scadenza un giorno pratica scaduta -> messagebox che ti avvisa della scadenza e ti visualizzala pratica per chiuderla o modificarla 5) gestire le pratiche chiuse mi serve un modo per inibire la modifica alle pratiche definite chiuse (ho un bolean nell'mdb) non so proprio come implementarlo chi mi aiuta? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Mar 2003
Messaggi: 2172
|
se faccio un UP vado contro il regolamento?
aiutatemi, vi scongiuro! |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2006
Messaggi: 22462
|
non è difficile fare quello che vuoi, ma purtroppo non siamo in molti a sapere il VB.net, in java te lo saprei dire senza esitazioni, ma in vb assolutamente no, aspetta MarcoGG, lui saprà consigliarit
__________________
amd a64x2 4400+ sk939;asus a8n-sli; 2x1gb ddr400; x850 crossfire; 2 x western digital abys 320gb|| asus g1
Se striscia fulmina, se svolazza l'ammazza |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Beh, in pratica stai chiedendo a qualcuno di farti il programma...
1. Puoi usare una msgbox di VB "preconfezionata" con pulsanti yes/no/cancel ( MsgBoxStyle.YesNoCancel ), o fartene una tua con una piccola Form... Non è difficile. 2. Esatto. Ma devi prima gestire l'id numerico ( suppongo chiave primaria ) per fare in modo che il numero più alto sia associato sempre alla pratica più recente, il che ci porta al punto 3. 3. Non è sempre sbagliato usare il contatore di Access, anche se molti lo indicano come pratica da principianti. Un limite molto fastidioso è che il contatore ignora gli spazi vuoti nella numerazione, lasciati da eventuali voci eliminate. Se vuoi che non vi siano spazi vuoti tra gli id numerici, devi crearti tu un contatore numerico, e una routine VB che controlla ad ogni inserimento, l'ultimo id disponibile e lo incrementa di 1, e ad ogni cancellazione esegue lo "shift" verso l'alto degli id successivi al "buco" che si è creato... Devo avere qualcosa di già pronto in giro, ma al momento non ho proprio tempo di cercarla... Sorry. 4. Semplicemente interroghi il campo scadenza ed agisci di conseguenza. Userai una Select Case per modificare i colori e/o far apparire le messagebox che desideri... 5. Il boolean non è l'unico modo. Più semplicemente ancora fai un campo numerico "attiva" che può essere 1 ( pratica attiva ) oppure 0 ( non attiva ), semplice da settare/leggere. Cmq, in generale te la puoi cavare con una conoscenza base di VB, su tutti i quesiti. Magari prova a sbatterci un po' la testa, suddividendo il problema in sotto-problemi e chiedi aiuti più specifici... Ciao. |
|
|
|
|
|
#5 | |||||||
|
Senior Member
Iscritto dal: Mar 2003
Messaggi: 2172
|
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
vediamo di sbatterci la testa allora!!!! grazie, a risentirci |
|||||||
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Mar 2003
Messaggi: 2172
|
ho riempito di messagebox il mio programma...
peccato che alla pressione sia di "OK" sia di "annulla" o altro.. succede sempre la stessa cosa! cosa dovrei imparare? try catch for if o ke???? intanto mi son messo a cercare informazioni su come poter modificare la connessione al database e ho trovato questo: http://www.codeproject.com/KB/vb/Per...onStrings.aspx la mia intenzione è aggiungere un menu "setting" dove poter inserire il percorso del file mdb che serve al programma (l'intenzione è di installare il programma su più pc ed avere un solo file mdb, quindi ogni programma deve avere la possibilità di modificare la propria connettionstrings...) piano piano procedo... grazie a chi vorrà ancora aiutarmi |
|
|
|
|
|
#7 | ||
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Codice:
Dim strMessaggio As String = "Attenzione! Eseguire?"
Dim msgR As MsgBoxResult
msgR = MsgBox(strMessaggio, MsgBoxStyle.YesNoCancel, "Scegli.")
Select Case msgR
Case MsgBoxResult.Yes
MsgBox("SI")
Case MsgBoxResult.No
MsgBox("NO")
Case MsgBoxResult.Cancel
MsgBox("ANNULLA")
End Select
Quote:
Codice:
Dim percorsoDB As String = Application.StartupPath & "\CartellaDB\"
Dim nomeDB As String = "fileDB.mdb"
Dim strCN As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
percorsoDB & nomeDB & ";Persist Security Info=False"
|
||
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Mar 2003
Messaggi: 2172
|
nel frattempo avevo trovato questo:
Codice:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal_
As System.EventArgs) Handles Button1.Click
Dim result As MsgBoxResult
result = MsgBox("Tuo Testo", MsgBoxStyle.YesNo)
If result = MsgBoxResult.Yes Then
tuo codice
Else If result = MsgBoxResult.No Then
tuo codice
End If
End Sub
per la seconda questione... i percorsi relativi mi giravano nella testa ma non sapevo proprio come implementarli! grande MarcoGG! grazie 1000!!! |
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Mar 2003
Messaggi: 2172
|
Quote:
non ho modo di verificarne il funzionamento fino al momento dell'installazione. siamo sulla strada giusta o il codice che mi hai passato non serve allo scopo? |
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Il concetto è sempre lo stesso.
Hai N client che vedono un unico DB Access su server. Ovviamente gli utenti devono avere libero accesso alla cartella in cui si trova il DB. Basterà impostare la Connection String nel modo appropriato. Su Linux non ho provato, ma in Win senza dubbio questa funziona : Codice:
Dim strCN As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
"\\" & nomeMacchina & "\" & nomeDirCondivisa & "\" & nomeDB & _
";Persist Security Info=False"
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Mar 2003
Messaggi: 2172
|
grazie! proverò...
adesso però mi sto "studiando" la gestione degli errori, ho trovato un pdf e parecchie guide. il fatto è che che mi era (quasi) chiaro il concetto "on error goto" ma non avendolo mai applicato... ora son cambiate molte cose e mi trovo spaesato. probabilmente ho scritto tutto il codice giusto ma non l'ho messo nel posto corretto! in definitiva, un evento deve poter accadere solo in presenza di certe condizioni (combobox non vuote) se mancano le condizioni un messaggio avverte e FA TORNARE alla form senza altri cambiamenti, se le condizioni sono rispettate invece un altro messaggio avvisa del completamento dell'evento se si clicca su ok altrimenti se si clicca su annulla FA TORNARE alla form senza altri cambiamenti. intanto studio.... |
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
In generale forse ti sei appoggiato troppo alle tecniche "veloci" di connessione DB di .Net ( se sei agli inizi, il mio consiglio è lo stesso dato qui a chi chiedeva su C# : http://www.hwupgrade.it/forum/showthread.php?t=1913387 ). All'inizio è meglio scrivere codice, non preoccuparsi di essere prolisso, lasciar stare l'ottimizzazione e capire come funziona Ado .Net... Non puoi farci niente, all'inizio devi faticare ! P.S.: meglio continuare nel Thread, anzichè con i pvt. |
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Mar 2003
Messaggi: 2172
|
Quote:
purtroppo non ho il tempo materiale di mettermi ad imparare cose che in definitiva sono un passatempo (lo dico perché mi son reso conto di non aver tempo nemmeno di farmi una lavatrice come si deve... )comunque sono riuscito a realizzare qualcosa! è completo al 99%.. e ADESSO sembra funzionare! mi manca solo la gestione di una textbox o maskedtextbox, sicuramente meglio la seconda ma non so come gestire un: if <> "" che nella textbox è comodo ma nella masked non molto... in definitiva devo vincolare l'utente ad inserire un numero (es. 001/09) che sarebbe "pratica/anno" ma devo anche poter verificare se le ha lasciate vuote "___/__" o scritte male "oo1/09" come è meglio procedere? inserendo tutta una serie di if o che? help |
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Nel tuo caso basta specificare 000/00 nella proprietà Mask. A questo punto se provi a scrivere caratteri non-numerici vedari che non è possibile. Per le immissioni parziali, bastano 3 righe di codice : Codice:
If MaskedTextBox1.Text.Length < MaskedTextBox1.Mask.Length _
Or MaskedTextBox1.Text.Contains(" ") Then
MsgBox("Input Incompleto.")
End If
Faccio notare che questo codice è valido per qualsiasi Masked che accetti solo caratteri numerici ! |
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Mar 2003
Messaggi: 2172
|
adesso ci provo... ma...
mi sa che mi sono incartato... Codice:
vecchio codice ...EDIT... ho sistemato in questo modo, è "grammaticalmente" corretto? Codice:
Private Sub PraticaBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PraticaBindingNavigatorSaveItem.Click
If N_pratMaskedTextBox.Text.Length < N_pratMaskedTextBox.Mask.Length Or N_pratMaskedTextBox.Text.Contains(" ") Or N_pratMaskedTextBox.Text.Trim.Length = 0 Then
MessageBox.Show("Devi inserire un numero di pratica!", "Attenzione!", MessageBoxButtons.OK, MessageBoxIcon.Warning)
Exit Sub
End If
If IDpvfComboBox.Text.Trim.Length = 0 Then
MessageBox.Show("Devi inserire un punto vendita!", "Attenzione!", MessageBoxButtons.OK, MessageBoxIcon.Warning)
Exit Sub
End If
Select Case MessageBox.Show("Confermi il salvataggio della paratica:" & vbCrLf & vbCrLf & "Pratica:" & N_pratMaskedTextBox.Text & vbCrLf & "Punto vendita:" & IDpvfComboBox.Text, "Salvataggio", MessageBoxButtons.YesNo, MessageBoxIcon.Information)
Case DialogResult.Yes
Try
Me.Validate()
Me.PraticaBindingSource.EndEdit()
Me.TableAdapterManager.UpdateAll(Me.PraticheDataSet)
Catch ex As Exception
MessageBox.Show("Devi inserire un punto vendita!", "Attenzione!", MessageBoxButtons.OK, MessageBoxIcon.Warning)
Finally
MessageBox.Show("Salvataggio eseguito con successo")
End Try
Case DialogResult.No
MessageBox.Show("Salvataggio annullato")
Me.PraticaBindingSource.CancelEdit()
Exit Sub
End Select
End Sub
Ultima modifica di radeon_snorky : 03-02-2009 alle 16:06. |
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Infatti se la Masked ha Mask = 000/00, nel caso in cui l'utente non inserisca niente, non ritornerà mai stringa vuota ( "" ), ma almeno " /". I caratteri prima del "/" sono 3 spazi, e se provi a interrogare la proprietà .Text.Length della Masked vuota ricevi risultato = 4. Se fai la Trim ricevi comunque 1 ( il solo "/" ). Perciò l'ultima condizione Or è superflua, non verrà mai verificata e inoltre era già inclusa nel mio codice. Nel secondo caso ( Combo ) se l'intento è di interrogare la stringa al netto degli spazi pre e post, hai scritto correttamente. |
|
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Mar 2003
Messaggi: 2172
|
Quote:
|
|
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Codice:
If MaskedTextBox1.Text.Length < MaskedTextBox1.Mask.Length Then
'Errore immissione 1
MsgBox("ERRORE su Text.Length")
End If
If MaskedTextBox1.Text.Contains(" ") Then
'Errore immissione 2
MsgBox("ERRORE su Text.Contains("" "")")
End If
If MaskedTextBox1.Text.Trim.Length = 0 Then
'Errore immissione 3
MsgBox("ERRORE su Text.Trim.Length")
End If
A questo punto fai qualche test. Esempi : - L'utente scrive 123/__ : Errore immissione 1 - L'utente scrive 1__/_3 : Errore immissione 2 - L'utente scrive ___/_1 : Errore immissione 2 - L'utente non scrive nulla ( ___/__ ) : Errore immissione 1 + 2 E cmq, Errore immissione 3 non si verifica mai... |
|
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Mar 2003
Messaggi: 2172
|
ho messo tutto in ordine, ora gira che è un piacere...
ho infarcito il programma di avvisi se qualcosa non è corretto (al salvataggio, all'aggiunta, ecc...) adesso sembra la divina commedia! sto cercando di capire come mai non mi funzionano il .focus () e il selectall ().... vorrei che ad ogni errore il cursore si posizionasse sulla box che non è corretta e la evidenziasse. ha funzionato 2 volte poi al terzo debug non più... altra cosa: vorrei implementare il drag&drop di cartelle, nel senso che ho un linklabel che vorrei impostare come la directory che ci trascino sopra (ora ho un button che attiva una FolderBrowserDialog.... abbastanza brutterella e poco comoda: spesso ho dei percorsi molto lunghi) ho cercato su msdn ma l'inglese mi rimane sempre indigesto |
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Mar 2003
Messaggi: 2172
|
Codice:
SELECT Pratica.n_prat, Pratica.IDpvf, Pratica.IDcliente, Pratica.IDsocietà, Pratica.IDincaricato, Pratica.Oggetto, Pratica.Data_inizio, Pratica.Data_fine, Pratica.[Campo si/no], Pratica.allegato FROM (Pratica INNER JOIN Rubrica ON Pratica.IDpvf = Rubrica.IDpvf) WHERE (Rubrica.PVF LIKE '%' + @PVF + '%') nella form ho un button e una combobox con cui vorrei filtrare le righe help me! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:33.












)








