Newsgroup: it.comp.appl.access
Titolo: evitare duplicazione fattura su stessa ditta

Salve a tutti.
Il mio db emetto fatture per diverse aziende.
Quando per errore assegno un numero fattura già utilizzato per
l'idazienda in uso, l'utente deve essere avvisato che la fattura già
esiste.
Con il codice
If IsNull(Me.NFattura) Then Exit Sub
Set rs = CurrentDb.OpenRecordset("select count(NFattura)" & _
" from tblfatture where NFattura ='" & _
Replace(Me.NFattura, "'", "''") & "'")
If rs.Fields(0) > 0 Then
MsgBox ("Attenzione, il numero della fattura inserito" & _
" è già presente in archivio!"), vbInformation
ottengo quanto sperato ma non tiene conto della ditta.
Come faccio a farmi apparire il messaggio solo quando il numero
fattura esiste già ma per la ditta in uso e non per qualsiasi?
La tabella delle fatture si chiama tblfatture mentre il campo
IdAzienda. Identico nome hanno i controlli nella form che si chiama
frmfatture.
Grazie.
Giuseppe

 " è già presente in archivio!"), vbInformation
-- 
--------------------------------
Pablitomf
Napoli sempre nel "Q"uore!


Ciao Maurizio, grazie per la risposta.
Ho sovrascritto il tuo codice al mio cambiando & tuaAziendaCorrente)
con & Idazienda (nome mio controllo) o con & soggettocorrente (combo
non associata con l'idAzienda in uso) ma mi dà il seguente errore:
Errore di run-time '3122':
Impossibile eseguire una query che non include l'espressione
"idazienda" specificata come parte di una funzione di aggregazione.
Giuseppe.

 Giuseppe.
Idazienda é il campo che deve appartenere alla tabella... Tu metti il tuo 
ovviamente (io avevo presupposto si chiamasse così )



Scusa Maurizio, infatti si chiama IdAzienda. Comunque ti posto il
codice completo che ho messo e che mi dà errore di run time. Ti
preciso che sia il nome del campo che del controllo si chiama
IdAzienda:
Dim rs As DAO.Recordset
If IsNull(Me.NFattura) Then Exit Sub
Set rs = CurrentDb.OpenRecordset("select count(NFattura), idazienda
from tblfatturequietanze where NFattura ='" & Replace(Me.NFattura,
"'", "''") & "' And idazienda=" & IdAzienda)
If rs.Fields(0) > 0 Then
MsgBox ("Attenzione, il numero della fattura inserito" & _
" è già presente in archivio!"), vbInformation
' ripristina il vecchio valore
Me.Undo
End If
rs.Close
Set rs = Nothing
Grazie.
Giuseppe

 "'", "''") & "' And idazienda=" & IdAzienda)
And idazienda=" & me.idazienda)



Scusami Maurizio, ma mi dà sempre lo stesso errore.
Giuseppe

> Scusami Maurizio, ma mi dà sempre lo stesso errore.
Giuseppe ma nella tab tblfatturequietanze il campo idazienda c'e? E 
soprattutto e' un campo numerico? 


 And idazienda=" & me.idazienda)
uhm...
pleonastico per�
io "me" non lo uso mai
ho la convenzione di chiamare i controlli con l'iniziale maiuscola e mi 
accorgo subito se � sbagliato (scrivo minuscolo e lo cambia lui se esiste)
Antonio 

 accorgo subito se è sbagliato (scrivo minuscolo e lo cambia lui se esiste)
nel suo caso non sono convinto ci sia in tabella l'omonimo campo, oppure non e'
in form.



Si Maurizio sto controllando e ricontrollando. Il campo nella tabella
fatture e nella form c'è e si chiama in entrambi i casi IdAzienda ed è
numerico.
Adesso mi dà in Vba errore di compilazione: Tipo non corrispondente
evidenziano in blu    .OpenRecordset
Il codice completo è:
Dim rs As DAO.Recordset
If IsNull(Me.NFattura) Then Exit Sub
Set rs = CurrentDb.OpenRecordset("select count(NFattura), idazienda" &
_
" from tblfatture where NFattura ='" & _
Replace(Me.NFattura, "'", "''") & "'") & "' And idazienda=" &
Me.IdAzienda
If rs.Fields(0) > 0 Then
MsgBox ("Attenzione, il numero della fattura inserito" & _
" è già presente in archivio!"), vbInformation
' ripristina il vecchio valore
Me.Undo
Me.IdTipoDocumento.SetFocus
End If
rs.Close
Set rs = Nothing
Giuseppe.

Set rs = CurrentDb.OpenRecordset("select count(NFattura), idazienda" &
praticamente l'editor non accetta l'utilizzo diretto di "currentbd"
cosi come hai fatto, ma memorizzandolo in una variabile pare funzioni:
dim vDb
vDb = currentdb
Set rs = vDb.OpenRecordset("select count(NFattura), idazienda" 
&..........................
prova cosi.
-- 
Ciao
Geppo

 "'", "''") & "' And idazienda=" & IdAzienda)
Siccome vuoi solo contare i record non hai bisogno di idazienda
nel SELECT. In più ti consiglio di usare più formatazione e
questo che Antonio chiama "pleonastico". :-) Fa un codice più
robusto dove è più semplice di trovare errori. P.e.
If IsNull(Me!NFattura) Then Exit Sub
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strSQL As String
If IsNull(Me!NFattura) Then Exit Sub
strSQL = "SELECT COUNT(NFattura)" & _
        " FROM tblfatturequietanze" & _
        " WHERE NFattura ='" & Replace(Me!NFattura, "'", "''") & _
        "' AND idazienda=" & Me!IdAzienda
Set db = CurrentDb
Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)
...
-- 
Ciao
Karl
*********
Access FAQ: 
http://www.donkarl.com/it
 

 Set rs = CurrentDb.OpenRecordset("select count(NFattura), idazienda" &
Il problema e' qui... Devi togliere il campo " ,idazienda " perchï¿œ dopo non 
lo raggruppi



Grazie Karl.
Ho sovrascritto il tuo codice, ho provato a digitare nel controllo
NFattura un numero di fattura già esistente sulla ditta in uso e mi
avvisa col msgbox  che esiste già.
Ho provato a inserire una fattura con lo stesso numero ma utilizzando
una ditta che quel numero fattura non ce l'ha e l'ha accettato.
Giuseppe.

 Napoli sempre nel "Q"uore!
Maurizio ho provato ma mi evidenziava in Vba sempre .OpenRecordset.
Con la soluzione di Karl, ho risolto.
Grazie a tutti.
Giuseppe.

 Giuseppe.
Guarda che ti avevo detto (senza aver letto Karl) proprio la stessa cosa di 
Karl :)



Si Maurizio, lo so.
Grazie.
Giuseppe.