Newsgroup: it.comp.appl.access
Titolo: non apertura maschera su cambio criterio

Ho tre tabelle:
Ditte: idditta (chiave primaria)
Visite: idvisite (chiave primaria) - idditta (numerico)
Vendita: idvendita (chiave primaria) - idditta - (numerico)
La ditta  CAIO  viene visitata  N volte e in ognuna delle visite ha N
vendite
La visita viene individuata univocamente da idvisita e da un altro numero
non progressivo che pensavo fosse univoco.
Quando immettevo una nuova vendita  facevo in modo che tale numero venisse
copiato in un campo della mia tabella vendite (oltre naturalmente al valore
idditta)
Schema:
TABELLA ditte
(ditta caio - idditta=1)  -------TABELLA visita
                                        ditta caio (idditta =1)  - idvisita
= 1 -visita N°=8329
                                                                          -i
dvisita =2 - visita N°= 4521
 
                                      -------- TABELLA vendite
ditta caio (idditta=1), (idvisita =1) (visita N°=8329)
|
|
idvendita=1 (idditta=1), (idvisita=1) (visita N°=8329)
idvendita=2 (idditta=1), (idvisita=1) (visita N°=8329)
idvendita=3 (idditta=1), (idvisita=1) (visita N°=8329)
E ho tre maschere 1) DITTA (basata su tabella ditte)
                             2) Visite (origine dati: queryVisite -tabella
ditte e visite- per portarsi dietro il campo idditta)
                              3) vendite (origine dati:
queryvendite -tabella ditte tabella vendite- per il solito campo idditta)
Nessun problema se dalla prima maschera voglio visualizzare quante visite ha
avuto la ditta Caio,
Se dalla maschera visite voglio visualizzare quante vendite ha avuto nella
visita n=8329 la ditta Caio nessun problema neanche
perche con l'istruzione su click del mio pulsante di comando:
 stLinkCriteria = "[N°]=" & "'" & Me![N°] & "'"
    DoCmd.OpenForm stDocName, , , stLinkCriteria
mi si apriva tranquillamente la maschera vendite
il problema si è presentato quando è capitato (mai successo in due anni di
inserimento e utilizzo da parte di una decina di utenti)    che due ditte
visitate hanno avuto assegnato lo stesso numero di vendita N° = 8329
Per cui apro dalla ditta Caio visualizzo la visita del 25/03/03 es.
(idvisita univoco=100) e quando visuliazzo le vendite aprendo la maschera
vendite mi compare anche la vendita N°=8329 della ditta TIZIO!!
E' chiaro che a questo punto devo basare il tutto su idvendita ma:
 appena inserisco la tabella visite nella queryvendite (   -tabella ditte
tabella vendite) e il campo idvisita nella maschera vendite modificando il
criterio di apertura da:
                            stLinkCriteria = "[N°]=" & "'" & Me![N°] & "'"
a
 stLinkCriteria = "[idvisita]=" & "'" & Me![idvisita] & "'"
non si apre assolutamente nulla, anzi l'evento su errore che avevo creato mi
dice che non ci sono vendite per la visita corrente (impossibile!!!)
E' da una settimana che ci sto perdendo tempo al lavoro senza riuscire a
venirne fuori, probabilmente mi sono oramai confuso irrimedibilmente
Mi potete aiutare?
Grazie sempre ragazzi
Ph. Barnum
Avevo pertanto creato una maschera ditta che mi apriva una seconda maschera
che mi visualizzava le visite per quella ditta e da questa la maschera
relativa
alle vendite.

 ha scritto nel messaggio
news:OFdQb.177765$_P.62...@news4.tin.it...

Il vero problema è che la struttura della tabella Vendita è sbagliata in
quanto, a mio avviso essa dovrebbe essere in relazione uno-a-molti con la
tabella Visite e non con la tabella Ditte come hai fatto tu e quindi la sua
struttura dovrebbe essere:
Vendita: idvendita (chiave primaria) - idvisite - (numerico)
a questo punto può tranquillamente non esistere l'altro campo contenente un
non meglio precisato numero visita: è normale che l'univocità del record
visite sia realizzata esclusivamente con la chiave primaria della tabella
Visite, altrimenti a cosa serve la chiave primaria se non a rendere il
record univoco.
Per poi sapere ogni vendita a quale ditta si riferisce è semplice visto che
l'idditta è contenuto nel relativo record visite  con cui la vendita è in
relazione uno-a-molti.
Questo a mio avviso è il modo corretto per risolvere il tuo problema con un
database relazionale.
-- 
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 ha scritto nel messaggio
news:x3eQb.273933$vO5.11...@twister1.libero.it...

In effetti andando a guardare le relazioni hai ragione:
la relazione uno a molti è per il campo idditta fra la tabella ditte e
visite mentre fra questa e la tabella vendite la relazione attraverso il
campo N° non è definita.
Non capisco come mai allora, nel gennaio 2002, ho fatto così.
Il problema adesso è che dovrò creare un nuovo campo idvisita anche nella
tabella vendite e metterlo in relazione molti a uno con il corrispondente
della tabella visite.
Ma adesso mi toccherà manualmente andare a inserire il relativi record
idvisite nella tabella idvendite che mi sembra n discreto lavoro di pazzi.
Ci sono soluzioni?
Grazie
Ph. Barnum

 Ph. Barnum


 ha scritto nel messaggio
news:ilsQb.282871$e6.10...@twister2.libero.it...

Mah causa febbre di figlia, ho passato sabato sera e domenica qua davanti!!
Allora creo una query di aggiornamento, seleziono il campo da aggiornare
IDVisita (nuovo campo creato ad hoc nella tabella vendite) che conterrà i
dati provenienti dal camp idvisita della tabella visite
Aggiorna a:
e qui metto [visite].[idvisite]
(perchè i dati nel nuovo campo vendita.idvisita devono essere uguali a
quelli del campo  visite.idvisita)
secondo i criteri:
iif ([vendite]![N°] = [visite]![N°], and [vendite]![controcod] =
[visite]![controcod], )
(cioè se il numero visita N° e controcodice della tab vendite è uguale al
numero visita N° e controcodice della tab visite)
ma al momento in cui la query dovrebbe partire l'errore è il seguente:
"numero errato di argomenti specificati in una  funzione dell'espressione
immessa"
Dove sta l'errore.
Io in questo scorcio di domenica gelida continuo a provare..
Grazieeee
Ph. Barnum

 ha scritto nel messaggio
news:PPQQb.143087$VW.58...@news3.tin.it...


Innanzitutto auguri per l'influenza di tua figlia.
Non mi sembra che, tra i vari tentativi tu abbia usato la funzione DLookup
come ti avevo consigliato di fare; inoltre non so cosa sia il campo
controcod.
Comunque, se i campi N° e controcod sono entrambi di tipo Numerico, penso
che il codice SQL query di aggiornamento dovrebbe essere il seguente:
UPDATE Vendita SET Vendita.IDVisita = Val(DLookUp("idvisite", _
 & "Visite", "[N°] =" & [N°] & " AND [controcod] =" & [controcod]));
Se invece i due campi di cui sopra non sono entrambi di tipo numerico, facci
sapere come stanno le cose e ti aiuterò a modificare di conseguenza il
codice SQL della query di aggiornamento.


 ha scritto nel messaggio
news:NiUQb.285568$e6.11...@twister2.libero.it...


Grazie, spero che stanotte dorma e anche la mamma che è caduta anch'essa
sotto i colpi dell'influenza!!
Dopo questo uso personale del mezzo passo a noi.
Allora la funzione DLookup non l'ho usata per Santa Ignoranza dal momento
che nelle mie due guide (Passo per Passo access 97 - Mondadori Informatica e
Programmare Access) e in quella in linea non era chiarissimo. Non ho avuto,
per mancanza di serenità dato dalle continue chiamate da parte delle malate,
modo di approfondire la ricerca nel NG o nel sito comune. Mea Culpa-
Per quanto riguarda il campo controcod, mi sono reso conto che esso precede
il numero vendita con una causale (RI o IS) che fa si che una vendita sia
univocamente individuata da RI 8323 oppure con IS 8323 per questo avevo  un
errore nell'apertura della maschera  di ricerca, essa era basato solo sul N°
di vendita senza il contro codice, ad ogni modo come avevi detto il concetto
è sbagliato perchè si deve basare il tutto sull'idvendita e su null'altro.
Comunque posso sempre utilizzare il tutto senza il controcod visto che sono
solo due le vendite nel mio database che hanno lo steso Nà (e quindi potrei
corregerlo manualmente)-
Il problema posso incontrarlo quando trasferirò il  FE nei PC degli altri
venditori in quanto dovrò aggiungere manualmente il nuovo campo IDvisita
nella tabella vendite e sperare che non abbiano tutti codici coincidenti.
Spero di essere stato chiaro.
Buona Serata.
Ph. Barnum


[CUT]

Non sono sicuro di aver capito tutte le tue obiezioni alla mia soluzione, ma
se il tuo problema è quello di aggiornare la struttura di una tabella da
codice senza dover intervenire personalmente sui database presenti nei PC
degli altri venditori, anche questo non è un problema: puoi farlo in diverse
maniere; un esempio di come farlo lo trovi sul Sito Comune (link qui sotto),
nella Sezione Tables, nella FAQ di Enrico Oemi intitolata "Modificare la
struttura dati del BE via codice, direttamente dal FE.".
In alternativa, sull'help, dai un'occhiata all'Istruzione ALTER TABLE.


 ha scritto nel messaggio
news:TI4Rb.278654$vO5.11...@twister1.libero.it...

Conosco quell'articolo sull'aggiornamento del BE dal FE ciò già messo mano
qualche tempo fa, anche se poi l'esigenza è cessata e non ho più
apprfondito.
Invece il codice che mi hai suggerito
Update Vendita set Vendita.idvisita =Val(dLookUp("idvisita", &"Visite",
"[n°=]"&[n°]))   (eliminando il campo controcod per semplicità)
Mi da errore di sintassi:
operando o operatore ,mancante, carattere o virgola non valida oppure testo
immesso non racchiuso tra vrgolette.
 Spero sia l'ultima volta che ti distrubo.
Devo scappare in ufficio (dove non ho ancora intenet abilitata in postazine)
A stasera
Ph. BArnum

 ha scritto nel messaggio
news:SinRb.150634$VW.61...@news3.tin.it...

C'è solamente una & (e commerciale) di troppo, che è scappata dalla mia
tastiera. :(
Hai inoltre sbagliato a posizionare una parentesi quadra.
Se il campo n° è numerico prova con:
Update Vendita set Vendita.idvisita = Val(dLookUp("idvisita", "Visite",
"[n°]=" & [n°]))
Se invece n° è di tipo testo prova così:
Update Vendita set Vendita.idvisita = Val(dLookUp("idvisita", "Visite",
"[n°]='" & [n°] & "'"))


 --
Allora la stringa
Update Vendita set Vendita.idvisita = Val(dLookUp("idvisita", "Visite",
"[n°]=" & [n°]))
Mi da errore di sintassi:
operando o operatore ,mancante, carattere o virgola non valida oppure
 testo  immesso non racchiuso tra vrgolette.
ed il cursore si posiziona sulla virgola: ("idvisita",        .
Ricapitolando da 0.
1) Apro nuova query seleziono le due tabelle visite e vendite che compaiono
con lo lore relazioni .
2)scelgo "query di aggiornamento"
3) dopo di che seleziono e porto sulla struttura il campo da aggiornare( tab
vendite campo idvisita)
4) sul campo "aggiorna a:" (ma il risulato noncambia se lo lascio vuoto
seleziono il sottostante "criteri") riporto l'espressione suddetta et voilà
l'errore :(
Domande??:)
Ph. Barnum

 Ph. Barnum



Sigh1
Non c'è errore e nenache risultato (colonna vuota idvisita).
Ti ringrazio per la tua profonda disponibilità e pazienza, perderò un pò di
tempo cercando in giro per la rete ed il NG.
Grazie infinite
Ph. Barnum

 ha scritto nel messaggio
news:NFQRb.157629$VW.63...@news3.tin.it...

Provando in pratica quello che ti ho suggerito ho scoperto che la funzione
DLookup non accetta un campo chiamato N° (ovvero nel cui nome c'è il
carattere speciale ° ).
Ho cambiato il nome del campo da N° a Num e tutto mi ha funzionato.
Il codice SQL della query di aggiornamento é:
UPDATE Vendita SET Vendita.IDVisita = Val(DLookUp("idvisite", "visite",
"Num=" & [Num]));
se il campo Num è di tipo Numerico, oppure:
UPDATE Vendita SET Vendita.IDVisita = Val(DLookUp("idvisite", "visite",
"Num='" & [Num] & "'"));
se il campo Num è di tipo testo.
Visto che ora a me funziona, penso che dovrebbe funzionare anche a te.
Mi dispiace, sapevo che alcuni caratteri speciali non dovevano essere usati
nei nomi  degli oggetti Access, ma non mi ricordavo che il carattere ° fosse
uno di quelli da non usare.
