Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Loop o altro?
giovedì 04 novembre 2010 - 12.27
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
Access (.mdb)
Se2
Profilo
| Junior Member
59
messaggi | Data Invio:
gio 4 nov 2010 - 12:27
Cioa a tutti, io ho questo codice un po' rudimentale che vorrei venisse ripetuto epr tutti i record della tabella. Devo usare la funzione loop o ci sono altre soluzioni? In qualsiasi caso sia che debba usare il loop o il for next ( come ho letto in un'altra discussione ) mi potreste modificare il mio codice? purtroppo sono molto scarso di vba
GRAZIE 1000
Il codice è
If Me.[Quantità_cartonicini] <> "0" Then
Me.[Quantità_cartonicini] = ((Quantità_cartonicini) - 1)
DoCmd.OpenReport "Report_stampa_attestati", acViewPreview, "", "", acNormal
DoCmd.PrintOut acPages, 1, 1, acHigh, 1, True
[Stampa_attestato].Value = "no stampa"
End If
ugk111
Profilo
| Junior Member
92
messaggi | Data Invio:
dom 7 nov 2010 - 16:23
Se ho capito hai la necessità di stampare il report "Report_stampa_attestati" per la quanti cartoncini presenti nel tuo database
quind se così fosse potresti usare il seguente codice copiandolo nell' evento SU APERTURA della maschera di interesse oppure farlo eseguire dopo l'apertura della maschera alla pressione di un pulsante .Ovviammente la maschera deve avere come origine dati la tabella che contiene il campo Quantita_cartoncini.
In pratica vendono contati i record presenti nella tabellaA che contengono il campo Quantità_cartoncini che dovrebbe essere pari ad 1
Dim J,ContatoreCartoncini as integr ' dichiarazione del tipo di variabili vengono tefinite numeriche intere
ContatoreCartoncini = DCount("Quantita_cartoncini", "tabellaA") 'conta record
for J=1 to ContatoreCartoncini 'ciclo da 1 a ContatoreCartoncini
DoCmd.OpenReport "Report_stampa_attestati", acViewPreview, "", "", acNormal
DoCmd.PrintOut acPages, 1, 1, acHigh, 1, True
Docmd.gotorecord,,acnext ' va al record successivo
next J
Se2
Profilo
| Junior Member
59
messaggi | Data Invio:
lun 8 nov 2010 - 08:28
Ciao e innanzittutto grazie 1000 per la risposta. Ho provato il codice ma mi da un errroe
Errore di compilazione: Tipo definitio dall'utente non definito
e mi seleziona , contatorecartoncini As integr
Io ho inserito in origine dati la tabellaA contenente il campo Quantita_cartoncini e ho impostato il campo Contatorecartoncini come Contatore mentre il campo Quantita_cartoncini come testo
Ciao Grazie
P.s. sarebbe possibile ottenere che ogni voltoa che stampa o un singolo record o alla fine della stampa mi inserisca un valore negativo corrispondente al numero di stampe effettuate in modo da avere il numero di cartonicini disponibili sempre aggiornato?
GRAZIE
ugk111
Profilo
| Junior Member
92
messaggi | Data Invio:
mar 9 nov 2010 - 14:48
scusa ma si tratta di un errore di battitura nella istruzione
Dim J,ContatoreCartoncini as integr ' dichiarazione del tipo di variabili vengono tefinite numeriche intere
in pratica ho digitato integr mentre la definizione corretta è integer quindi dovrai solo riscrivere
Dim J,ContatoreCartoncini as integer ' dichiarazione del tipo di variabili vengono tefinite numeriche intere
La seconda parte della tua richiesta non mi è chiara puoi spiegarmi meglio ?
Se2
Profilo
| Junior Member
59
messaggi | Data Invio:
mar 9 nov 2010 - 15:11
Scusa ma non mi sono spiegato bene e mi dispiace averti fatto perdere tempo
Io ho una tabella contenente dei nomi che devono essere stampati. Dovendo essere utilizzati dei cartoncini avrei bisogno che mi venissero stampati un numero di nominativi uguale e non superiore al numero di cartoncini disponibili. Ad es io ho da stampare
Luca
Marco
Sergio
Maria
e avendo solo 2 cartonicini disponibili ( dato contenuto in un'altra tabella denominata "Cartoncini" Campo "Cartoncini disponibili" ) dovrebbero venire stampati solo i primi due nominativi ( luca,Marco)
Al termine della stampa o durante mi servirebbe che nel campo "cartoncinci disponibili" della tabella "Cartonicini" venisse inserito un -2 corrispondente al numero di cartoncini utilizzati in modo tale che con una query di somma il numero di cartoncini disponibili inserito nella tabella "Cartoncini" campo Campo "Cartoncini disponibili" diventa 0 impedendo la stampa
GRAZIE e scusa per la spiegazione non chiara !!!!
ugk111
Profilo
| Junior Member
92
messaggi | Data Invio:
dom 14 nov 2010 - 21:17
non preoccuparti non è un aperdita di tempo
. comunque il percorso per la soluzione si allunga un po' inquanto
sembrerebbe che la stampa dei nominativi avvenga in base al numero dei cartoncini quindi conoscendo questo valore poi dovresti preoccuparti di selezionare di volta in volta i nomi da estrapolare e poi stampare (luca e marco). sai come superare questo punto ? se si passiamo oltre fammi sapere
Se2
Profilo
| Junior Member
59
messaggi | Data Invio:
lun 15 nov 2010 - 08:26
Ciao sinceramente non m'inteno molto di vba
Ora ho creato ( copiando qua e la ) questo codice per la selezione manuale
ID è contenuto nella Tabella Nominativi
If Not IsNull(Me.[lista]) Then
DoCmd.OpenReport "Report stampa", acNormal, "", "[ID]=[Forms]![006_msc]![lista]", acReadOnly, acNormal
DoCmd.OpenForm "007_msc", acNormal, "", "[ID]=[Forms]![006_msc]![lista]", acReadOnly, acNormal
DoCmd.OpenReport "Report stampa", acViewPreview, "", "[ID]=[Forms]![006_msc]![lista]", acReadOnly, acNormal
DoCmd.OpenForm "017_msc", acNormal, "", "", acEdit, acNormal
End If
Me.Requery
Me.[lista].Requery
----
Private Sub Form_Load()
DoCmd.GoToRecord acForm, "017_msc", acNewRec
[Numero cartoncini].Value = "-1"
DoCmd.Close acForm, "017_msc"
End Sub
GRAZIE
ugk111
Profilo
| Junior Member
92
messaggi | Data Invio:
lun 15 nov 2010 - 12:31
scusa se ti pongo ancora domande e non ti offro soluzioni, ma il codice che hai scritto è suddivisibile in due parti :una sul caricamento della maschera (load) ed il resto è applicato a cosa? ad un pulsante sulla maschera? sulla maschera hai creato una casella combinta (o un elenco) dalla quale selezionando un nome parta subito la stampa del cartoncino ?
Se2
Profilo
| Junior Member
59
messaggi | Data Invio:
lun 15 nov 2010 - 14:12
Figurati, anzi grazie per l'aiuto...
è associato all'evento DblClick
In pratica ho una combobox "lista" in cui sono visualizzati l'elenco di nominativi da stampare
Ciao grazie
ugk111
Profilo
| Junior Member
92
messaggi | Data Invio:
lun 15 nov 2010 - 21:38
una possibile soluzione potrebbe essere la seguente:
creare la maschera sulla tabella contenente i nomi ,nel mio caso la tabella è nomi o attribuisci tale origine dei dati alla mascgera già creata poi
dovrebbe bastrae copiare il seguente codice con le dovute modifiche
la tabella nomi da me creta contiene solo il campo id e nome e aggiungi alla mashera una casella di testo nel mio caso testo6
Option Compare Database
Public ContatoreCartoncini As Integer
Private Sub CasellaCombinata4_AfterUpdate() 'sostituisci CasellaCombinata4 con la tua
' Trova il record corrispondente al controllo
Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFirst "[id] = " & Str(Nz(Me![CasellaCombinata4], 0)) 'sostituisci CasellaCombinata4 con la tua
If Not rs.EOF Then Me.Bookmark = rs.Bookmark
Dim EseguiSql, Risposta, Messaggio As String
Messaggio = "Fine Cartoncini"
Select Case ContatoreCartoncini
Case Is > 0 'se contatorecartoncini è maggiore di zero esegue
ContatoreCartoncini = ContatoreCartoncini - 1 'la sottrazione di un dal contatorecartoncino per la stampa
Testo6 = ContatoreCartoncini 'assegna il valore del contatorecartoncino alla casella di testo6 (nella maschera) doCmd.OpenReport "nomi Query", acViewPreview 'apre il report
EseguiSql = "UPDATE cartoncini SET cartoncini.Quantita_cartoncini = Testo6" 'esegue la query di aggiornamento
DoCmd.RunSQL EseguiSql
Case 0
Risposta = MsgBox(Messaggio, vbCritical + vbOKOnly)
EseguiSql = "UPDATE cartoncini SET cartoncini.Quantita_cartoncini = Testo6"
DoCmd.RunSQL EseguiSql
Exit Sub
Case Is < 0
End Select
End Sub
Private Sub Form_Open(Cancel As Integer)
DoCmd.SetWarnings False
ContatoreCartoncini = DLookup("Quantita_cartoncini", "cartoncini", "id_cartoncini = 1") ' legge il valore dell'unica riga della tabella quantificartoncini
Testo6 = ContatoreCartoncini assegna ol valore trovato a testo6
End Sub
il report dovrà essere creato utilizzanodo come origine dei dati una query di selezione in base al valore ricrato dalla casella combinata tipo
SELECT nomi.id, nomi.nome
FROM nomi
WHERE (((nomi.nome)=[Forms]![nomi]![nome]));
come vedi è un po' più complicato ma sicuramente a mio parere più efficente
Se2
Profilo
| Junior Member
59
messaggi | Data Invio:
mar 16 nov 2010 - 09:03
Cioa e innanzitutto grazie per il tuo AIUTO!!!
Però ho dei problemi nella realizzazione.
Ti spiego come ho fatto: ho creato una maschera "nomi" a cui ho collegato una tabella "nomi" e ho inserito una combobox "nome" con origine controllo "nome" e ho inserito una casella di testo Testo6 "non associato"
poi ho creato un report "Report_stampa_attestati" con origine record la query "SELECT nomi.ID, nomi.nome FROM nomi WHERE (((nomi.nome)=[Forms]![nomi]![nome]));" e su apertura della maschera
Option Compare Database
Public ContatoreCartoncini As Integer
Private Sub CasellaCombinata4_AfterUpdate() 'sostituisci CasellaCombinata4 con la tua
' Trova il record corrispondente al controllo
Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFirst "[id] = " & Str(Nz(Me![CasellaCombinata4], 0)) 'sostituisci CasellaCombinata4 con la tua
If Not rs.EOF Then Me.Bookmark = rs.Bookmark
Dim EseguiSql, Risposta, Messaggio As String
Messaggio = "Fine Cartoncini"
Select Case ContatoreCartoncini
Case Is > 0 'se contatorecartoncini è maggiore di zero esegue
ContatoreCartoncini = ContatoreCartoncini - 1 'la sottrazione di un dal contatorecartoncino per la stampa
Testo6 = ContatoreCartoncini 'assegna il valore del contatorecartoncino alla casella di testo6 (nella maschera) doCmd.OpenReport "nomi Query", acViewPreview 'apre il report
EseguiSql = "UPDATE cartoncini SET cartoncini.Quantita_cartoncini = Testo6" 'esegue la query di aggiornamento
DoCmd.RunSQL EseguiSql
Case 0
Risposta = MsgBox(Messaggio, vbCritical + vbOKOnly)
EseguiSql = "UPDATE cartoncini SET cartoncini.Quantita_cartoncini = Testo6"
DoCmd.RunSQL EseguiSql
Exit Sub
Case Is < 0
End Select
End Sub
Private Sub Form_Open(Cancel As Integer)
DoCmd.SetWarnings False
ContatoreCartoncini = DLookup("Quantita_cartoncini", "cartoncini", "id_cartoncini = 1") ' legge il valore dell'unica riga della tabella quantificartoncini
Testo6 = ContatoreCartoncini 'assegna ol valore trovato a testo6
End Sub
Ora non capisco a quale combobox si riferisce "CasellaCombinata4"
Ho creato una tabella "cartoncini" con campi "Quantita_cartoncini" e "id_cartoncini" ma non ho capito se devo associare i campi nella maschera
Abbi pazienza ma per me è arabo il VBA
GRAZIE 1000
ugk111
Profilo
| Junior Member
92
messaggi | Data Invio:
mar 16 nov 2010 - 12:43
la casellacombinata4 dovrebbe essere la tua "casellacombinata nomi" ed il codice scritto per la casellacombinata4 va applicato all'evento della casellacombinta dopo aggiornamento (after update) quindi nel codice dovresti sostituire tuttele le "casellacombinata4" con la tua "nomi".Non devi applicare nessun evento all?apertura della maschera in quanto la seconda delle due prime righe va scritta direttamente.infine Non devi associare la tabella cartoncini in quanto l'istruzione dlookup provvederà a leggere il valore interessato.fammi sapere se sono stato più chiaro.
Se2
Profilo
| Junior Member
59
messaggi | Data Invio:
mar 16 nov 2010 - 14:53
1475_Prova di stampa.zip
Ciao, non sei tu che non sei chiaro... sono io che sbaglio qualcosa... in effetti ho apportato le modifiche da te proposte ma non capita nulla.
Ti allego il database... scusa
ugk111
Profilo
| Junior Member
92
messaggi | Data Invio:
mar 16 nov 2010 - 19:39
1476_Risposta Prova di Stampa.ZIP
Non ti preoccupare è tutto ok.ho apportato delle modifiche importatnti,a mio avviso, nelle tabelle,ovvero non si può mettere l'id dopo i campi dati ,dovrà essere sempre il primo e nel caso essere la chiave primaria della tabella. fatto ciò ho dato una aggiustatina alla tua maschera,report e query.spero ti vada bene
Se2
Profilo
| Junior Member
59
messaggi | Data Invio:
mer 17 nov 2010 - 08:30
E' PERFETTO!!!!!!!! GRAZIE 100000000000
ugk111
Profilo
| Junior Member
92
messaggi | Data Invio:
mer 17 nov 2010 - 09:26
di nulla
Torna su
Stanze Forum
Elenco Threads
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 !