Aiuto! Come creare una maschera che prima di salvare i dati in tabella...

sabato 23 maggio 2009 - 15.04

86Marco Profilo | Expert

Salve, ho un piccolo problema per il mio progettino Access.
Ho una piccola applicazione che tra le altre cose mi effettua delle fatture dando come numero fattura l'id autoincrementale.

MI trovo davanti una maschera per l'emissione di fatture e quello che vorrei è che quando finisco di completare la maschera prima di poter salvare effettivamente i dati della stessa sulla tabella mi venga chiesta una conferma.

Invece in acces per impostazione predefinita nel momento in cui si digita il primo carattere all'interno di una maschera viene già incrementato il numero ID, ciò significherebbe che se per esempio emetto per sbaglio la fattura 7 che poi cancello, al momento di una nuova fattura mi viene restituito il numero 8 e non il 7 che era stato già emesso e cancellato. Come posso fare? sapete aiutarmi???

E' importante Grazie.

DomA Profilo | Expert

Ciao Marco,
per risolvere il problema, secondo me, dovresti creare le maschere in modalità progettazione ed utilizzare le query. Mi spiego meglio se nella maschera c'è un pulsante "Nuova Fatt" ed una casella di testo per il n° fatt potresti creare una query del genere:

Dim NFatt as integer strsql="Select Max(Nome_Colonna) as Massimo from Nome_Tabella" e poi aggiungere 1 al valore max.
Tutto il codice va inserito nell'evento clic del suddetto pulsante.

Infine potresti inserire un pulsante "Salva" e salvare il tutto trame le query.
Domenico

86Marco Profilo | Expert

bhe ma questo è per selezionarmi il numero dell'ultima, o cmq il numero + alto della fattura emessa, poi come faccio a confermare l'emissione della fattura?

Grazie cmq ;)

dinoxet Profilo | Senior Member

per inserire la fattura non usare la tabella definitiva usane una di appoggio nella quale scrivi tutto tranne l'ID e quando confermi fai l'accodamento nella tabella definitiva (e l'id essendo autoincrementale verrà assegnato al momento dell'accodamento così solo dopo la tua conferma)

scusa la ripetizione delle parole
DINOXET
__________________________________________
impossible is only a word

DomA Profilo | Expert

Fermo restando che:
>> per inserire la fattura non usare la tabella definitiva usane una di appoggio
Basta cambiare la stringa sql in una del genere:

Dim NumFT as imteger Dim IdCliente as imteger ... NumFT = form.maschera1.txtNumero.tex .... queryString = "INSERT INTO Fatture (Data, N°, IdCliente, Imponibile, Imposta) VALUES ('" _ & NumFT & "', '" & id_cli & "', '" & Imponibile & "', '" & Iva & "')"

Per la modifica invece

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

E' chiaro che devi fare una o più routine per l'inserimento/modifica dei dati.
>> Alcune query le puoi preparare direttamente dalla scheda Query di Access e poi selezionare il tipo che ti interessa : accodamento; aggiornamento; selezione e così via.

>> Se opti per questa opzione ti basterà creare dei pulsanti associati alle suddette query.

Spero di essere stato chiaro.


Domenico

86Marco Profilo | Expert

sei stato molto chiaro... anche se il max sarebbe se mi potessi fare, qualora ne hai di tempo a disp, un esempio pratico.
Ad ogni modo ti ringrazio veramente tanto :)

DomA Profilo | Expert

Ciao Marco,
ti ho preparato un piccolo esempio così composto:

Una Tabella;
Una Maschera (in cui c'è il pulsante di Inserimento);
Due query (query di selezione per sapere il n dell'ultima ft emessa; query di accodamento che serve a registrare i dati inseriti nella maschera)

A questo punto basta associare la quey di accodamento al pulsante Inserisci.

Tu potresti utilizzare due tabelle e costruire con una creazione guidata la maschera sulla tabella di appoggio.
Poi potresti fare una query di accodamento dalla tabella di appoggio alla tabella definitiva ed associare quella query al pulsante.
L'esempio è associato a questo messaggio.
Domenico

86Marco Profilo | Expert

Perfetto grazie!
Adesso un ultima cosa mi serve.
Quando faccio clic sul pulsante inserisci oltre ad accodare il tutto sulla tabella principale deve alla fine su una message box per esempio dirmi l'id che è stato assegnato all'ultimo inserimento.
Come posso fare? So che esiste la proprietà identity, ma come si usa ???

Spero potrai ancora aiutarmi grazie!!

DomA Profilo | Expert

Ciao Marco,
dovresti modificare la ruotine associata al pulsante in questo modo:
On Error GoTo Err_Comando5_Click Dim stDocName As String stDocName = "qryIns" DoCmd.OpenQuery stDocName, acNormal, acEdit MsgBox "Registrazione effettuata correttamente", vbInformation, "Gestione Fatture" Exit_Comando5_Click: Exit Sub Err_Comando5_Click: MsgBox Err.Description Resume Exit_Comando5_Click

Per modificare la routine:
aprire la struttura della maschera;
clic sul pulsante;
accedere alle proprietà del pulsante (F4 se non sono visualizzate);
nella scheda evento cliccare si puntini sospensivi a fianco di "Routine Evento;
Infine copiare ed incollare il codice tra sub ed End sub del pulsante;


326x251 27Kb



Nota la riga:
>> MsgBox "Registrazione effettuata correttamente", vbInformation, "Gestione Fatture"
questa e la msgbox.
Se ti va bene ricordati di accettare la risposta così chiudiamo il thread perchè potrebbe serre d'aiuto abche ad altri.
Domenico

86Marco Profilo | Expert

Ciao, forse mi sono espresso male :)
Lo so come si crea una message box, al suo interno voglio che oltre a dirmi che l'inserimento è stato effettuato correttamente deve darmi anche il relativo id nella tabella fatture che è stato associato! Spero di essermi spiegato meglio :)

DomA Profilo | Expert

Prova così:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
Domenico

86Marco Profilo | Expert

Mi sa che non ce ne usciamo + :).
Tu sei stato cosi gentile da farmi un esempio pratico:
nel tuo esempio pratico ho una maschera che mi da l'opportunità di inserire da tastiera il numero di fattura, immaginati invece gli stessi campi nella mia maschera ma senza il numero di fattura.

Io compilo la fattura, faccio clic su inserisci e la query me la accoda alla tabella principale. Quando la query me l'accoda alla tabella principale a quel record viene assegnato un id, come faccio a farmelo tornare indietro e dire all'utente che a quella fattura è stata assegnato il numero x?

Ti prego aiutami, non so + dv sbattere la testa!

DomA Profilo | Expert

Ciao Marco,
ho modificato il codice secondo le tue esigenze:

>> N° Ft generato automaticamente
>> Msgbox con riferimento al numero dell'ultima ft registrata

se non vuoi visualizzare i numeri dell'ultima ft e della nuova basta che nascondi i relativi campi nella maschera. Tuttavia io il numero della nuova ft, che adesso viene generato automaticamente, io lo lascerei visibile.

Attenzione se esamini il codice, aprendo l'editor vba, ti accorgerai che prima di fare riferimento ad un oggetto della maschera gli imposto il focus altrimenti da un errore.
Se abbiamo centrato l'obiettivo chiudiamo il thread...
per favore.


Domenico

86Marco Profilo | Expert

diciamo che è qualcosa di olto + utile ma non è proprio quello che mi serviva :), se vuoi cmq chiudiamo lo stesso il thread!

DomA Profilo | Expert

Io purtroppo sto seguendo anche altri thread ed ho lo sviluppo di un’applicazione in corso.
Se ritieni che io ti abbia aiutato a risolvere i principali problemi:

>> Registrazione dati con pulsante;
>> N° Ft generato automaticamente;
>> Msgbox con riferimento al numero dell'ultima ft registrata;

… allora direi che possiamo proprio chiudere.

Se hai qualche altro problema non ti resta che inviare altri post.
Siamo qui per scambiare conoscenza.
Ciao

Domenico
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5