Discussione:
query di accodamento e aggiornamento maschera
(troppo vecchio per rispondere)
sandro
2004-12-10 12:39:05 UTC
Permalink
Private Sub Form_Current()
Dim strsql As String
Dim dbs As Database
Set dbs = CurrentDb
Set dbs = DBEngine.Workspaces(0).Databases(0)
If IsNull(id_data_fattura) = True Or IsEmpty(id_data_fattura) = True Then
strsql = "insert into T_fatture_carico_unione (data_fattura) values(#" &
Format(Now() + 1, "yyyy/mm/dd") & "#)"
dbs.Execute (strsql)
'DoCmd.RunCommand acCmdSaveRecord
End If
Me.data_fattura.Requery


Questo evento mi serve per accodare alla tabella T_fatture_carico_unione il
valore della data odierna +1, e nella tabella correttamente viene scritto
quando sulla maschera che utilizzo per popolarla la condizione è vera.
Il problema è che anche mettendo l’istruzione :
Me.data_fattura.Requery
La maschera non si aggiorna ! e non capisco perchè ?
Però se entro ed esco dalla maschera invece il record lo vedo ed è scritto
correttamente.

Inoltre oltre a questo avrei bisogno che un campo associato a una tabella
che rappresenta il n° della fattura si incrementasse di uno, (sempre su
corrente quando di verifica la condizione qui sopra) magari scrivendolo sulla
tabella stessa come faccio con la data qui sopra, solo che non so come
prelevare il valore precedente e sommarli 1.
Devo fare una query che mi estragga il recordset e sommargli 1 ?

Grazie per la risposta
Cinzia
2004-12-10 13:02:02 UTC
Permalink
Post by sandro
Private Sub Form_Current()
Dim strsql As String
Dim dbs As Database
Set dbs = CurrentDb
Set dbs = DBEngine.Workspaces(0).Databases(0)
If IsNull(id_data_fattura) = True Or IsEmpty(id_data_fattura) = True Then
strsql = "insert into T_fatture_carico_unione (data_fattura) values(#" &
Format(Now() + 1, "yyyy/mm/dd") & "#)"
dbs.Execute (strsql)
'DoCmd.RunCommand acCmdSaveRecord
End If
Me.data_fattura.Requery
Questo evento mi serve per accodare alla tabella T_fatture_carico_unione il
valore della data odierna +1, e nella tabella correttamente viene scritto
quando sulla maschera che utilizzo per popolarla la condizione è vera.
Me.data_fattura.Requery
La maschera non si aggiorna ! e non capisco perchè ?
Non capisco esattamente a cosa ti serve questo codice, da quello che posso
dedurre dal codice sembra che sull'evento corrente della tua maschera
(quindi ogni volta che vai avanti e indietro con i bottoni prec e succ)
verifichi se il campo id_datafattura è vuoto o null e in questo caso
aggiungi un record nella tabella T_fatture_Carico_unione.
Ma T_fatture_carico_unione è anche l'origine record della maschera che
scatena l'evento? e se è così perchè non fai semplicemente:

If IsNull(id_data_fattura) = True Or IsEmpty(id_data_fattura) = True Then
me.data_Fattura = DAte()+1
end if

Probabilmente mi sfugge qualcosa...
Post by sandro
Però se entro ed esco dalla maschera invece il record lo vedo ed è scritto
correttamente.
Inoltre oltre a questo avrei bisogno che un campo associato a una tabella
che rappresenta il n° della fattura si incrementasse di uno, (sempre su
corrente quando di verifica la condizione qui sopra) magari scrivendolo sulla
tabella stessa come faccio con la data qui sopra, solo che non so come
prelevare il valore precedente e sommarli 1.
Devo fare una query che mi estragga il recordset e sommargli 1 ?
me.NumeroFattura = Nz(Dmax("NumeroFattura"; "Fatture"; condizione ), 0) +1

dove condizione dovrà essere ad esempio che l'anno delle fatture passate sia
uguale all'anno della data di oggi o domani..
Post by sandro
Grazie per la risposta
Prego
Cinzia
sandro
2004-12-10 14:05:09 UTC
Permalink
[cut]
Post by Cinzia
Non capisco esattamente a cosa ti serve questo codice, da quello che posso
dedurre dal codice sembra che sull'evento corrente della tua maschera
(quindi ogni volta che vai avanti e indietro con i bottoni prec e succ)
verifichi se il campo id_datafattura è vuoto o null e in questo caso
aggiungi un record nella tabella T_fatture_Carico_unione.
Ma T_fatture_carico_unione è anche l'origine record della maschera che
If IsNull(id_data_fattura) = True Or IsEmpty(id_data_fattura) = True Then
me.data_Fattura = DAte()+1
end if
Probabilmente mi sfugge qualcosa...
No non ti sfugge nulla. Pensavo che per fare questo fosse necessaria una
query di accodamento e così ho fatto. In effeti come mi dici è molto +
semplice.
Cerco prima di postare di guardare anche l'help, ma probabilmente bisogna
impostare la domanda in modo corretto, perchè ho difficoltà a consultarlo e
non sempre trovo ciò che cerco.
Post by Cinzia
Post by sandro
Però se entro ed esco dalla maschera invece il record lo vedo ed è scritto
correttamente.
Inoltre oltre a questo avrei bisogno che un campo associato a una tabella
che rappresenta il n° della fattura si incrementasse di uno, (sempre su
corrente quando di verifica la condizione qui sopra) magari scrivendolo
sulla
Post by sandro
tabella stessa come faccio con la data qui sopra, solo che non so come
prelevare il valore precedente e sommarli 1.
Devo fare una query che mi estragga il recordset e sommargli 1 ?
me.NumeroFattura = Nz(Dmax("NumeroFattura"; "Fatture"; condizione ), 0) +1
dove condizione dovrà essere ad esempio che l'anno delle fatture passate sia
uguale all'anno della data di oggi o domani..
Anche questa funzione mi sfuggiva !
domanda: per evitare che vengano per sbaglio inseriti nuovi record con data
numero fattura nella tabella dopo il click sul pulsante "record successivo"
ho fatto così :
Me.Comando13.SetFocus
Me.Comando14.Enabled = False

E così il comando14 non lo clicco +. C'è un'altra strada ?

Altra domanda : ho bisogno di chiederti una cosa su access, ma prima di
pubblicarla al NG, vorrei prima sentire un parere tuo personale, lo so che
normalmente non si dovrebbe fare.
Poi se mi dici che si può pubblicare faccio un copia e incolla e se vuoi mi
rispondi sul NG, ma ti ripeto non so se è il caso.

Ti rigranzio ancora per le risposte che mi dai.
Ciao.
Cinzia
2004-12-10 14:25:54 UTC
Permalink
Post by sandro
Post by Cinzia
Non capisco esattamente a cosa ti serve questo codice, da quello che posso
dedurre dal codice sembra che sull'evento corrente della tua maschera
(quindi ogni volta che vai avanti e indietro con i bottoni prec e succ)
verifichi se il campo id_datafattura è vuoto o null e in questo caso
aggiungi un record nella tabella T_fatture_Carico_unione.
Ma T_fatture_carico_unione è anche l'origine record della maschera che
If IsNull(id_data_fattura) = True Or IsEmpty(id_data_fattura) = True Then
me.data_Fattura = DAte()+1
end if
Probabilmente mi sfugge qualcosa...
No non ti sfugge nulla. Pensavo che per fare questo fosse necessaria una
query di accodamento e così ho fatto. In effeti come mi dici è molto +
semplice.
Cerco prima di postare di guardare anche l'help, ma probabilmente bisogna
impostare la domanda in modo corretto, perchè ho difficoltà a consultarlo e
non sempre trovo ciò che cerco.
A volte per trovare la risposta giusta nell'help bisogna anche sapere cosa
cercare, e specialmente per chi è alle prime armi questo non è sempre
vero..., a questo scopo puoi sempre ricorrere al NG che al massimo ti dice
guardati l'help della funzione XXX
Post by sandro
Post by Cinzia
Post by sandro
Però se entro ed esco dalla maschera invece il record lo vedo ed è scritto
correttamente.
Inoltre oltre a questo avrei bisogno che un campo associato a una tabella
che rappresenta il n° della fattura si incrementasse di uno, (sempre su
corrente quando di verifica la condizione qui sopra) magari scrivendolo
sulla
Post by sandro
tabella stessa come faccio con la data qui sopra, solo che non so come
prelevare il valore precedente e sommarli 1.
Devo fare una query che mi estragga il recordset e sommargli 1 ?
me.NumeroFattura = Nz(Dmax("NumeroFattura"; "Fatture"; condizione ), 0) +1
dove condizione dovrà essere ad esempio che l'anno delle fatture passate sia
uguale all'anno della data di oggi o domani..
Anche questa funzione mi sfuggiva !
domanda: per evitare che vengano per sbaglio inseriti nuovi record con data
numero fattura nella tabella dopo il click sul pulsante "record successivo"
Me.Comando13.SetFocus
Me.Comando14.Enabled = False
E così il comando14 non lo clicco +. C'è un'altra strada ?
risponderei se avessi capito a cosa corrispondono il comando13 e il
comando14, e anche se avessi capito cosa vuoi evitare (nuovi record con data
numero fattura nella tabella dopo il click sul pulsante "record successivo"
???)

altro suggerimento gratis:
è buona regola dare agli oggetti dei nomi appropriati, i wizard per forza
di cosa chiamano i bottoni comando1 comando2 ecc... ma nessuno ci impedisce
di cambiarli in qualcosa di più significativo in modo tale che fra 5 anni se
dobbiamo manutenere il codice per qualche motivo nondivendiamo matti a
ricostruire a che significato corrisponde il comando12.
Così se il comando5 crea un nuovo record lo chiamerò cmd_Nuovo se invece va
al record successivo lo chiamerò cmd_Next
ecc...
Post by sandro
Altra domanda : ho bisogno di chiederti una cosa su access, ma prima di
pubblicarla al NG, vorrei prima sentire un parere tuo personale, lo so che
normalmente non si dovrebbe fare.
Poi se mi dici che si può pubblicare faccio un copia e incolla e se vuoi mi
rispondi sul NG, ma ti ripeto non so se è il caso.
Chiedi pure, il mio email è quello che vedi depurato di NoSpam_please
Post by sandro
Ti rigranzio ancora per le risposte che mi dai.
Ciao.
Ciao
Cinzia
sandro
2004-12-10 15:37:09 UTC
Permalink
[cuttone]
Ciao Cinzia :

Allora sulla maschera ci sono due bottoni recordsucc (che va al record
succeddivo)
E recordprec che va al record precedente
Andando all’ultimo record della tabella e schiacciando recordsucc ho scitto
questo per evitare che vengano inseriti record con numero e data fattura per
errore :

Private Sub recordsucc_Click()

DoCmd.GoToRecord , , acNext
DoCmd.RunCommand acCmdSaveRecord
Me.recordprec.SetFocus
Me.recordsucc.Enabled = False

End Sub

E questo sul pulsante che chiude la maschera per cancellare il record nella
tabella quando la condizione è vera :
Dim strsql As String
If IsNull(SM_carico.Form.sommaqta) = True Or
IsEmpty(SM_carico.Form.sommaqta) Then
strsql = "DELETE T_fatture_carico_unione.id_data_fattura"
strsql = strsql & " FROM T_fatture_carico_unione"
strsql = strsql & " WHERE (((T_fatture_carico_unione.id_data_fattura)="
& [Forms]![M_carico_unione]![id_data_fattura] & "))"
DoCmd.RunSQL strsql
End If
DoCmd.Close

A me piacciono le query ormai l’hai capito ! Ma si può fare anche questo +
facilmente ?

(ps:Mi funziona correttamente)
Cinzia
2004-12-10 16:37:11 UTC
Permalink
Post by sandro
Allora sulla maschera ci sono due bottoni recordsucc (che va al record
succeddivo)
E recordprec che va al record precedente
Andando all'ultimo record della tabella e schiacciando recordsucc ho
scitto
Post by sandro
questo per evitare che vengano inseriti record con numero e data fattura per
Private Sub recordsucc_Click()
DoCmd.GoToRecord , , acNext
DoCmd.RunCommand acCmdSaveRecord
Me.recordprec.SetFocus
Me.recordsucc.Enabled = False
End Sub
Questo continua a non essermi chiaro, vai al record successivo, si scatena
l'evento current, che nel caso sia un nuovo record, imposta i valori che
avevamo visto prima, salvi il nuovo record, metti il fuoco sul bottone prec.
e disabiliti il bottone successivo
messa così mi pare che lo faccia su tutti i record e non solo sull'ultimo..
Post by sandro
E questo sul pulsante che chiude la maschera per cancellare il record nella
Dim strsql As String
If IsNull(SM_carico.Form.sommaqta) = True Or
IsEmpty(SM_carico.Form.sommaqta) Then
strsql = "DELETE T_fatture_carico_unione.id_data_fattura"
strsql = strsql & " FROM T_fatture_carico_unione"
strsql = strsql & " WHERE
(((T_fatture_carico_unione.id_data_fattura)="
Post by sandro
& [Forms]![M_carico_unione]![id_data_fattura] & "))"
DoCmd.RunSQL strsql
End If
DoCmd.Close
Questo ti serve per cancellare una fattura se non sono state inserite
posizioni.
Va bene così, al limite puoi mettere un messagio per avvertire l'utente che
siccome non ha compilato le posizioni, cancelli la fattura.
Post by sandro
A me piacciono le query ormai l'hai capito ! Ma si può fare anche questo +
facilmente ?
(ps:Mi funziona correttamente)
sandro
2004-12-10 17:31:01 UTC
Permalink
[cut]
Post by Cinzia
Post by sandro
Private Sub recordsucc_Click()
DoCmd.GoToRecord , , acNext
DoCmd.RunCommand acCmdSaveRecord
Me.recordprec.SetFocus
Me.recordsucc.Enabled = False
End Sub
Questo continua a non essermi chiaro, vai al record successivo, si scatena
l'evento current, che nel caso sia un nuovo record, imposta i valori che
avevamo visto prima, salvi il nuovo record, metti il fuoco sul bottone prec.
e disabiliti il bottone successivo
messa così mi pare che lo faccia su tutti i record e non solo sull'ultimo..
E' vero hai ragione ! Mi va bene solo se accedo direttamente all'utimo
record e poi clicco si recordsucc.
come faccioa testare se il record corrente è l'ultimo ?
Post by Cinzia
Post by sandro
E questo sul pulsante che chiude la maschera per cancellare il record
nella
Post by sandro
Dim strsql As String
If IsNull(SM_carico.Form.sommaqta) = True Or
IsEmpty(SM_carico.Form.sommaqta) Then
strsql = "DELETE T_fatture_carico_unione.id_data_fattura"
strsql = strsql & " FROM T_fatture_carico_unione"
strsql = strsql & " WHERE
(((T_fatture_carico_unione.id_data_fattura)="
Post by sandro
& [Forms]![M_carico_unione]![id_data_fattura] & "))"
DoCmd.RunSQL strsql
End If
DoCmd.Close
Questo ti serve per cancellare una fattura se non sono state inserite
posizioni.
Va bene così, al limite puoi mettere un messagio per avvertire l'utente che
siccome non ha compilato le posizioni, cancelli la fattura.
ok allora così :
Dim strsql, bottoni, mess As String
If IsNull(SM_carico.Form.Testo21) = True Or IsEmpty(SM_carico.Form.Testo21)
Then
bottoni = vbCritical + vbOKCancel
mess = "Se esci cancello il record con la data fattura. Procedo ?"
If MsgBox(mess, bottoni) = vbOK Then
strsql = "DELETE T_fatture_carico_unione.id_data_fattura"
strsql = strsql & " FROM T_fatture_carico_unione"
strsql = strsql & " WHERE
(((T_fatture_carico_unione.id_data_fattura)=" &
[Forms]![M_carico_unione]![id_data_fattura] & "))"
DoCmd.SetWarnings False
DoCmd.RunSQL strsql
DoCmd.SetWarnings True
End If
End If
DoCmd.Close
Cinzia
2004-12-11 21:57:15 UTC
Permalink
Post by sandro
[cut]
Post by Cinzia
Post by sandro
Private Sub recordsucc_Click()
DoCmd.GoToRecord , , acNext
DoCmd.RunCommand acCmdSaveRecord
Me.recordprec.SetFocus
Me.recordsucc.Enabled = False
End Sub
Questo continua a non essermi chiaro, vai al record successivo, si scatena
l'evento current, che nel caso sia un nuovo record, imposta i valori che
avevamo visto prima, salvi il nuovo record, metti il fuoco sul bottone prec.
e disabiliti il bottone successivo
messa così mi pare che lo faccia su tutti i record e non solo sull'ultimo..
E' vero hai ragione ! Mi va bene solo se accedo direttamente all'utimo
record e poi clicco si recordsucc.
come faccioa testare se il record corrente è l'ultimo ?
if me.CurrentRecord = me.RecordsetClone.RecordCount then
oppure
if me.CurrentRecord =Dcount("ID"; "Tabella";"") then


saluti
Cinzia
sandro
2004-12-11 23:39:03 UTC
Permalink
[cuttone]

Ciao Cinzia :

Questa cosa che mi proponi la sto provando da tutto il pomeriggio dalle
consultazione da me fatte sui post storici in internet
Adesso se me lo dici anche tu allora la strada è giusta.
Però a me non va.
Su corrente della form principale ho scritto :

If IsNull(id_data_fattura) = True Or IsEmpty(id_data_fattura) = True Then
Me.data_fattura = Date + 1
numero_fattura = DMax("numero_fattura", "[T_fatture_carico_unione]",
"[tipo_contratto] = 2") +1
'commentoIf Me.CurrentRecord = Me.RecordsetClone.RecordCount Then

If Me.CurrentRecord = DCount("id_data_fattura",
"T_fatture_carico_unione", "") Then
MsgBox ("pioppo")
Me.recordprec.SetFocus
Me.recordsucc.Enabled = False
Me.Requery
End If
End If

Provando entrambe le tue due soluzioni e facendo comparire una msgbox per
vedere se la condizione la vedeva come vera.

Questo:

If Me![id_data_fattura] = DLast("[id_data_fattura]",
"T_fatture_carico_unione", "[id_data_fattura]=" &
[Forms]![M_carico_unione]![id_data_fattura]) Then

If IsNull(SM_carico.Form.sommaqta) = True Or
IsEmpty(SM_carico.Form.sommaqta) Then
bottoni = vbCritical + vbOKCancel
mess = "Se esci cancello il record con la data fattura. Procedo ?"
If MsgBox(mess, bottoni) = vbOK Then
strsql = "DELETE T_fatture_carico_unione.id_data_fattura"
strsql = strsql & " FROM T_fatture_carico_unione"
strsql = strsql & " WHERE
(((T_fatture_carico_unione.id_data_fattura)=" &
[Forms]![M_carico_unione]![id_data_fattura] & "))"
DoCmd.SetWarnings False
DoCmd.RunSQL strsql
DoCmd.SetWarnings True
Me.Requery
End If
End If
End If


If Me![id_data_fattura] = DLast("[id_data_fattura]",
"T_fatture_carico_unione", "[id_data_fattura]=" &
[Forms]![M_carico_unione]![id_data_fattura]) Then

Questo inserito nel pulsante di uscita della maschera (ti riporto tutto il
codice sopra)
Viene eseguito correttamente, ma su corrente non funziona !!!!
Non capisco dove sbaglio.
[OT] ti ho mandato quella cosa l’hai ricevuta ? (mi basta un si)

Ciao ti saluto
Cinzia
2004-12-12 12:55:49 UTC
Permalink
Post by sandro
Questa cosa che mi proponi la sto provando da tutto il pomeriggio dalle
consultazione da me fatte sui post storici in internet
Adesso se me lo dici anche tu allora la strada è giusta.
Però a me non va.
If IsNull(id_data_fattura) = True Or IsEmpty(id_data_fattura) = True Then
Me.data_fattura = Date + 1
numero_fattura = DMax("numero_fattura", "[T_fatture_carico_unione]",
"[tipo_contratto] = 2") +1
'commentoIf Me.CurrentRecord = Me.RecordsetClone.RecordCount Then
If Me.CurrentRecord = DCount("id_data_fattura",
"T_fatture_carico_unione", "") Then
MsgBox ("pioppo")
Me.recordprec.SetFocus
Me.recordsucc.Enabled = False
Me.Requery
End If
End If
Ricapitoliamo un attimo:
l'istruzione seguente ti serve per discriminare un record "nuovo" da uno già
inserito?
se la risposta è sì potresti usare la proprietà NewReocrd del form

If IsNull(id_data_fattura) = True Or IsEmpty(id_data_fattura) = True
Then

diventerebbe:

if me.newRecord then
Me.data_fattura = Date + 1
numero_fattura = DMax("numero_fattura", "[T_fatture_carico_unione]",
"[tipo_contratto] = 2") +1
end if

alternativamente potresti mettere queste istruzioni invece che su corrente
nell'evento BeforeInsert, evento scatenato non appena scrivi qualcosa in un
campo di un record nuovo, in quest'ultimo modo diventerebbe superfluo
inserire il controllo sul bottone successivo in quanto i campi sarebbero
compilati solo nel caso in cui l'utente comincia a scrivere qualcosa.
Post by sandro
Provando entrambe le tue due soluzioni e facendo comparire una msgbox per
vedere se la condizione la vedeva come vera.
If Me![id_data_fattura] = DLast("[id_data_fattura]",
"T_fatture_carico_unione", "[id_data_fattura]=" &
[Forms]![M_carico_unione]![id_data_fattura]) Then
If IsNull(SM_carico.Form.sommaqta) = True Or
IsEmpty(SM_carico.Form.sommaqta) Then
bottoni = vbCritical + vbOKCancel
mess = "Se esci cancello il record con la data fattura. Procedo ?"
If MsgBox(mess, bottoni) = vbOK Then
strsql = "DELETE T_fatture_carico_unione.id_data_fattura"
strsql = strsql & " FROM T_fatture_carico_unione"
strsql = strsql & " WHERE
(((T_fatture_carico_unione.id_data_fattura)=" &
[Forms]![M_carico_unione]![id_data_fattura] & "))"
DoCmd.SetWarnings False
DoCmd.RunSQL strsql
DoCmd.SetWarnings True
Me.Requery
End If
End If
End If
If Me![id_data_fattura] = DLast("[id_data_fattura]",
"T_fatture_carico_unione", "[id_data_fattura]=" &
[Forms]![M_carico_unione]![id_data_fattura]) Then
Questo inserito nel pulsante di uscita della maschera (ti riporto tutto il
codice sopra)
Viene eseguito correttamente, ma su corrente non funziona !!!!
Non capisco dove sbaglio.
[OT] ti ho mandato quella cosa l'hai ricevuta ? (mi basta un si)
si, la sto guardando!
Post by sandro
Ciao ti saluto
Ciao
Cinzia
sandro
2004-12-12 15:09:03 UTC
Permalink
[altro cuttone]
Ciao Cinzia :(ultimissima cosa su questo argomento):

If Me.NewRecord Then
Me.data_fattura = Date + 1
numero_fattura = DMax("numero_fattura", "[T_fatture_carico_unione]",
"[tipo_contratto] = 2") + 1
Me.txtHidden.SetFocus
Me.recordsucc.Enabled = False
' con un nuovo record assegno un nuovo numero fattura e la data fattura
incrementate di 1
End If
If Me.CurrentRecord = (Me.RecordsetClone.RecordCount) -
(Me.RecordsetClone.RecordCount - 1) Then
Me.txtHidden.SetFocus
Me.recordprec.Enabled = False
Me.recordsucc.Enabled = True
' se il record corrente è il primo inabilito il click su bottone
indietro di 1
' e abilito il bottone avanti di uno spostando il focus su una txt
nascosta
Else
If Me.CurrentRecord = (Me.RecordsetClone.RecordCount) Then
DoCmd.RunCommand acCmdSaveRecord
Me.txtHidden.SetFocus
Me.recordsucc.Enabled = False
Me.recordprec.Enabled = True
' se il record corrente è l'ultimo inabilito il click su bottone
avanti di 1
' e abilito il bottone indietro di uno spostando il focus su una txt
nascosta
Else
Me.recordprec.Enabled = True
Me.recordsucc.Enabled = True
' nel caso in cui il record corrente sia in posizione intermedia tra
il primo e l'ultimo
' abilito sia avanti di 1 che indietro di 1
End If
End If

L’abilitazione dei pulsanti record successivo e record precedente in questo
modo è corretta !

1° domanda per controllare se il record corrente è il primo si fa così ?

If Me.CurrentRecord = (Me.RecordsetClone.RecordCount) -
(Me.RecordsetClone.RecordCount - 1)

2° domanda : ho inserito un pulsante per l’inserimento di un nuovo record.
Come mai l’istruzione su corrente del form principale Me.recordsucc.Enabled
= False non funziona ? Nel senso che Me.recordsucc.Enabled = False l’ho
dovuta mettere sul pulsante che mi inserisce il nuovo record per inabilitare
il bottone:

Ciao e grazie ancora
Cinzia
2004-12-12 20:11:22 UTC
Permalink
Post by sandro
[altro cuttone]
If Me.NewRecord Then
Me.data_fattura = Date + 1
numero_fattura = DMax("numero_fattura", "[T_fatture_carico_unione]",
"[tipo_contratto] = 2") + 1
Me.txtHidden.SetFocus
Me.recordsucc.Enabled = False
' con un nuovo record assegno un nuovo numero fattura e la data fattura
incrementate di 1
End If
If Me.CurrentRecord = (Me.RecordsetClone.RecordCount) -
(Me.RecordsetClone.RecordCount - 1) Then
Me.txtHidden.SetFocus
Me.recordprec.Enabled = False
Me.recordsucc.Enabled = True
' se il record corrente è il primo inabilito il click su bottone
indietro di 1
' e abilito il bottone avanti di uno spostando il focus su una txt
nascosta
Else
If Me.CurrentRecord = (Me.RecordsetClone.RecordCount) Then
DoCmd.RunCommand acCmdSaveRecord
Me.txtHidden.SetFocus
Me.recordsucc.Enabled = False
Me.recordprec.Enabled = True
' se il record corrente è l'ultimo inabilito il click su bottone
avanti di 1
' e abilito il bottone indietro di uno spostando il focus su una txt
nascosta
Else
Me.recordprec.Enabled = True
Me.recordsucc.Enabled = True
' nel caso in cui il record corrente sia in posizione intermedia tra
il primo e l'ultimo
' abilito sia avanti di 1 che indietro di 1
End If
End If
L'abilitazione dei pulsanti record successivo e record precedente in
questo
Post by sandro
modo è corretta !
1° domanda per controllare se il record corrente è il primo si fa così ?
If Me.CurrentRecord = (Me.RecordsetClone.RecordCount) -
(Me.RecordsetClone.RecordCount - 1)
Basta semplicemente :
if me.CurrentRecord = 1 then
Post by sandro
2° domanda : ho inserito un pulsante per l'inserimento di un nuovo record.
Come mai l'istruzione su corrente del form principale
Me.recordsucc.Enabled
Post by sandro
= False non funziona ? Nel senso che Me.recordsucc.Enabled = False l'ho
dovuta mettere sul pulsante che mi inserisce il nuovo record per inabilitare
Prova a seguire l'evento current con il debugger, probabilmente succede
questo:
entra nel 1° if (if me.Newrecod)
disabilita il bottone
entra nell'else del 2° if e nell'ultimo else qui riabilita il bottone, in
quanto il currentRecord non corrisponde al recordCount poichè il record
nuovo non è ancora stato salvato...
Post by sandro
Ciao e grazie ancora
Ciao
Cinzia
sandro
2004-12-12 21:21:02 UTC
Permalink
Post by sandro
Post by sandro
[altro cuttone]
If Me.NewRecord Then
Me.data_fattura = Date + 1
numero_fattura = DMax("numero_fattura", "[T_fatture_carico_unione]",
"[tipo_contratto] = 2") + 1
Me.txtHidden.SetFocus
Me.recordsucc.Enabled = False
' con un nuovo record assegno un nuovo numero fattura e la data
fattura
Post by sandro
incrementate di 1
End If
If Me.CurrentRecord = (Me.RecordsetClone.RecordCount) -
(Me.RecordsetClone.RecordCount - 1) Then
Me.txtHidden.SetFocus
Me.recordprec.Enabled = False
Me.recordsucc.Enabled = True
' se il record corrente è il primo inabilito il click su bottone
indietro di 1
' e abilito il bottone avanti di uno spostando il focus su una txt
nascosta
Else
If Me.CurrentRecord = (Me.RecordsetClone.RecordCount) Then
DoCmd.RunCommand acCmdSaveRecord
Me.txtHidden.SetFocus
Me.recordsucc.Enabled = False
Me.recordprec.Enabled = True
' se il record corrente è l'ultimo inabilito il click su bottone
avanti di 1
' e abilito il bottone indietro di uno spostando il focus su una
txt
Post by sandro
nascosta
Else
Me.recordprec.Enabled = True
Me.recordsucc.Enabled = True
' nel caso in cui il record corrente sia in posizione intermedia
tra
Post by sandro
il primo e l'ultimo
' abilito sia avanti di 1 che indietro di 1
End If
End If
L'abilitazione dei pulsanti record successivo e record precedente in
questo
Post by sandro
modo è corretta !
1° domanda per controllare se il record corrente è il primo si fa così ?
If Me.CurrentRecord = (Me.RecordsetClone.RecordCount) -
(Me.RecordsetClone.RecordCount - 1)
if me.CurrentRecord = 1 then
Post by sandro
2° domanda : ho inserito un pulsante per l'inserimento di un nuovo record.
Come mai l'istruzione su corrente del form principale
Me.recordsucc.Enabled
Post by sandro
= False non funziona ? Nel senso che Me.recordsucc.Enabled = False l'ho
dovuta mettere sul pulsante che mi inserisce il nuovo record per
inabilitare
Prova a seguire l'evento current con il debugger, probabilmente succede
entra nel 1° if (if me.Newrecod)
disabilita il bottone
entra nell'else del 2° if e nell'ultimo else qui riabilita il bottone, in
quanto il currentRecord non corrisponde al recordCount poichè il record
nuovo non è ancora stato salvato...
Post by sandro
Ciao e grazie ancora
Ciao
Cinzia
Ciao Cinzia:
Esattamente come dici. Perfetto, finalmente è a posto.
Ciao, alla prossima.

AlKa
2004-12-10 20:00:52 UTC
Permalink
Post by sandro
Private Sub Form_Current()
Dim strsql As String
Dim dbs As Database
Set dbs = CurrentDb
Set dbs = DBEngine.Workspaces(0).Databases(0)
If IsNull(id_data_fattura) = True Or IsEmpty(id_data_fattura) = True Then
strsql = "insert into T_fatture_carico_unione (data_fattura) values(#" &
Format(Now() + 1, "yyyy/mm/dd") & "#)"
dbs.Execute (strsql)
'DoCmd.RunCommand acCmdSaveRecord
End If
Me.data_fattura.Requery
Il formato delle date con # è "mm/dd/yyyy", mentre tu hai usato
"yyyy/mm/dd". Forse il problema è questo.
Post by sandro
Inoltre oltre a questo avrei bisogno che un campo associato a una tabella
che rappresenta il n° della fattura si incrementasse di uno, (sempre su
corrente quando di verifica la condizione qui sopra) magari scrivendolo sulla
tabella stessa come faccio con la data qui sopra, solo che non so come
prelevare il valore precedente e sommarli 1.
Devo fare una query che mi estragga il recordset e sommargli 1 ?
strSql = "SELECT MAX(NrFatt) FROM FATTURE"
set rs = dbs.OpenRecordset(strSql,...)
newFrFAtt = rs(0)+1
rs.Close


Scusa la stringatura ma credo sia chiaro.
Post by sandro
Grazie per la risposta
Prego
Ciao
Loading...