Newsgroup: it.comp.appl.access
Titolo: Problemi nell'aggiornare dati in una query

Ciao a tutti.Ho due tabelle : "Articoli" e "Distinta base".Le due
tabelle sono relazionate tra loro uno a molti e con integrita'
referenziale.Inoltre ho abilitato il flag "aggiorna campi campi
correlati a catena".Ovviamente se ad esempio modifico l'articolo "Art
1" e questo articolo e' presente in distinta base,si aggiornera'
automaticamente.
Il problema nasce quando io nella tab, "Articoli" vado ad inserire lo
stesso articolo acquistato da un altro fornitore.
Cioe' io vorrei aggiornare la Distinta base con il nuovo articolo
inserito.Esempio in distinta base ho Art1 con data 16/03/10 e prezzo €
45,00.Se nella tab articoli inserisco un nuovo record "Art1" con data
18/03/10 e prezzo € 40,00 questo nuovo "Art1" dovrebbe sostituirsi al
precedente.
come posso fare????
Grazie in anticipo Dino

 ha scritto nel messaggio 
news:c2534c51-ab56-4020...@u9g2000yqb.googlegroups.com...

Evita di aggiungere un nuovo articolo se il nome è già presente.
Ad esempio puoi utilizzare il metodo .FindRecord
in questo modo se scrivi lo stesso nome dell'articolo si posizionerà 
direttamente sulla riga dell'articolo per poterlo modificare.
Nel campo articolo metti la proprietà indicizzato a Sì, duplicati non 
ammessi in questo modi ti sarà impossibile inserire un articolo doppio.
Ciao
-- 
Roberto da Parma 

 - Mostra testo citato -
ciao Roby e grazie per la risp.Io sono obbligato ad inserire lo stesso
articolo ma di un fornitore diverso.Ho gia' impostato il codice in
modo tale che se per caso inserisco lo stesso articolo dello stesso
fornitore il programma l'ho impedisce.Se invece come ripeto lo stesso
articolo viene acquistato da un altro fornitore "giustamente" il sw mi
salva il record.Al cliente in definitiva non interessa (solo in
distinta base) sapere da chi e' stato acquistato l'articolo vuole
pero' automaticamente che il vecchio articolo indistinta base venga
sostituito automaticamente con il nuovo.
Questo io riesco gia a farlo con gli articoli gia inseriti. tramite
"aggiorna record correlati a catena".dovrei poter fare un operazione
simile anche con i nuovi.
Dino

 ha scritto nel messaggio 
news:ff6dc3db-9c10-4d95...@u9g2000yqb.googlegroups.com...

Sull'evento prima di aggiungere fai un controllo...controlli articolo e 
fornitore e se vuoi anche data di inserimento
se (query selezione):
articolo1 = articolo2
fornitore1 = fornitore2
data1 > data2
se ti restituisce il record allora vai a modificare i dati e aggiungi il 
record.
Fai tutto con i recordset
dim rst
set  rst = currentdb.openrecordset ("SELECT .... WHERE ... ")
With rst
    .MoveFirst
    If .EOF Then
        .Fields("prezzo1") = Form("prezzo2")
        ....
    end if
    .close
end with
ricordati però che poi questo valore si andrà a sostituire ai vecchi valori 
se hai le tabelle collegate...se invece il record della tabella articoli lo 
"aggiungi" alla tua tabella distinta allora puoi mantenere entrambi i dati 
(storico).


 ha scritto nel messaggionews:ff6dc3db-9c10-4d95...@u9g2000yqb.googlegroups.com...

Ciao Roby e grazie per la risp.
Nel form ins articoli sull'evento "prima di aggiornare" del campo
"Codice art fornitore" ho inserito il seguente codice:
If Not IsNull(DLookup("[Codice art fornitore]", "Articoli", _
    "[Codice art fornitore] = " & Chr$(34) & Me.Codice_art_fornitore &
Chr$(34))) _
    And Me.Codice_art_fornitore <>
Nz(Me.Codice_art_fornitore.OldValue) Then
  MsgBox Me.Codice_art_fornitore & " e' gia'esistente.", vbOKOnly,
"Duplicazione vietata!"
  Cancel = True
Il campo "Codice art fornitore" e' poi abbinato (attraverso gli
indici) al campo IDfornitore. Cioe' se io inserisco l'articolo
chiamato "Art1" del fornitore "Rossi" una seconda volta lui mi da
errore e mi dice che gia' esiste.Se incece  inserisco lo stesso
articolo a nome Verdi (cioe' un altro fornitore) me l'ho accetta e
così via.
Se non ho capito male il codice che tu mi hai postato mi consigli di
inserirlo nella query del form in esame (cioe' la maschera dove vedo
gli articoli in distinta base per un prodotto) o nel form stesso????
Dino
NB:SE ti puo' servire ti posto il codice SQL della mia query
SELECT Articoli.IDart, Articoli.[Data listino], Articoli.Descrizione,
Articoli_Distinta_base.IDDistinta, Articoli_Distinta_base.IDArticoloD,
Articoli_Distinta_base.IDescrizione, Articoli.IDfornitore, Articoli.
[Unita' di misura], Articoli.Peso, Articoli_Distinta_base.[Lunghezza
Mt], Articoli_Distinta_base.[Altezza Mt], Articoli_Distinta_base.
[Profondita' Mt], Articoli_Distinta_base.[Quantita'],
Articoli_Distinta_base.Mt, Articoli_Distinta_base.[Descrizione note],
Articoli_Distinta_base.[N° pezzi], [Prefissoarticolo] & "" & [Codice
art fornitore] AS [Codice int articolo], IIf(IsNull([Incremento in %])
And IsNull([Decremento in %]),[Pz_netto3],IIf(Nz([Incremento in %])>0
And IsNull([Decremento in %]),[Pz_netto3]*(1+Nz([Incremento in %])/
100),IIf(Nz([Decremento in %])>0 And IsNull([Incremento in %]),
[Pz_netto3]*(1-Nz([Decremento in %]/100))))) AS Pz_def, [Pz_netto2]*(1-
Nz([Sconto3]/100)) AS Pz_netto3, [Tabella clienti].Prefissoarticolo,
[Pz_netto1]*(1-Nz([Sconto2]/100)) AS Pz_netto2, [Prezzo listino]*(1-
Nz([Sconto1]/100)) AS Pz_netto1, IIf(IsNull([Altezza Mt]),[Lunghezza
Mt]*[Profondita' Mt],[Altezza Mt]*[Lunghezza Mt]*[Profondita' Mt]) AS
Area, IIf([Unita' di misura]="Kg/MT2",([Area]*[Peso]),IIf([Unita' di
misura]="Kg/MT",([Mt]*[Peso]),IIf([Unita' di misura]="Kg/MT3",
([Area]*[Peso]),0))) AS Peso_tot, IIf([Unita' di misura]="g",[N°
pezzi]*[Pz_def],IIf([Unita' di misura]="N°",[Pz_def]*[N°
pezzi],IIf([Unita' di misura]="L",[Pz_def]*[N° pezzi],IIf([Unita' di
misura]="Min",[Pz_def]*[N° pezzi],IIf([Unita' di misura]="Kg/MT",
([Pz_def]*[Peso_tot])*[N° pezzi],IIf([Unita' di misura]="M",
([Pz_def]*[Mt])*[N° pezzi],IIf([Unita' di misura]="Kg",[Pz_def]*[N°
pezzi],IIf([Unita' di misura]="M2",([Area]*[Pz_def])*[N°
pezzi],IIf([Unita' di misura]="M3",([Area]*[Pz_def])*[N°
pezzi],IIf([Unita' di misura]="Kg/MT2",([Pz_def]*[Peso_tot])*[N°
pezzi],IIf([Unita' di misura]="Kg/MT3",([Pz_def]*[Peso_tot])*[N°
pezzi],0))))))))))) AS Costo, Articoli.Sconto1, Articoli.Sconto2,
Articoli.Sconto3
FROM ([Tabella clienti] INNER JOIN Articoli ON [Tabella
clienti].Cliente = Articoli.IDfornitore) INNER JOIN
Articoli_Distinta_base ON Articoli.IDArticolo =
Articoli_Distinta_base.IDescrizione
ORDER BY Articoli_Distinta_base.IDArticoloD;

 ha scritto nel messaggio 
news:5cf17646-1414-4124...@r1g2000yqj.googlegroups.com...

c

Dipende se usi un form diverso per l'inserimento dei dati o meno.
Se supponiamo che tu usi una maschera form1 che ha come origine dei dati la 
tua tabella articoli...
dove hai messo questo codice
[CUT]
If Not IsNull(DLookup("[Codice art fornitore]", "Articoli", _
   "[Codice art fornitore] = " & Chr$(34) & Me.Codice_art_fornitore &
Chr$(34))) _
   And Me.Codice_art_fornitore <>
Nz(Me.Codice_art_fornitore.OldValue) Then
MsgBox Me.Codice_art_fornitore & " e' gia'esistente.", vbOKOnly,
"Duplicazione vietata!"
Cancel = True
[CUT]
dim rst
set  rst = currentdb.openrecordset ("SELECT articoli.* FROM articoli WHERE 
articoli.[Codice art fornitore]= " & Me.Codice_art_fornitore & " AND 
articoli.[idfornitore] = " & me.idfornitore)
With rst
    .MoveFirst
    If .EOF Then
        .ADDNEW
        .Fileds("idfornitore") = Form("idfornitore")
        .Fields("prezzo1") = Form("prezzo2")
        ....
        .UPDATE
    else
    MsgBox Me.Codice_art_fornitore & " e' gia'esistente.", vbOKOnly, 
"Duplicazione vietata!"
    end if
    .close
end with
Presto fatto....
ciao
-- 
Roberto da Parma 

 ha scritto nel messaggionews:5cf17646-1414-4124...@r1g2000yqj.googlegroups.com...

Grandissimo Roby.Questo codice l'ho posso anche inserire anche nel
form che visualizza i dati della distinta base?? Il "form si chiama
"Fm_carico_art_in_distinta".
In questo caso l'ho inserirei nell'evento "allapertura" o su
"Corrente".
Grazie ancora
Dino

 ha scritto nel messaggio 
news:073a94f7-a2ac-49e5...@30g2000yqi.googlegroups.com...

Beh, questo controlla che il record non sia duplicato e nel caso 
aggiunge/modifica il record.
puoi comunque adattarlo a tutte le esigenze che vuoi...
Ti sconsiglierei di metterlo su corrente perchè rischieresti di entrare in 
un loop infinito oppure di eseguire il codice in maniera inutile.
Pensa quando devi eseguire il codice e scegli l'evento di conseguenza.


 ha scritto nel messaggionews:073a94f7-a2ac-49e5...@30g2000yqi.googlegroups.com...

Ok provo e ti faccio sapere.
tieni d'occhio il post.
Dino

 - Mostra testo citato -
Ciao Roby.Mi da questo errore. "Errore di sintassi : operatore
mancante" e mi segnala questa riga di codice:
Set rst = CurrentDb.openrecordset("SELECT articoli.* FROM articoli
WHERE articoli.[Codice art fornitore]= " & Me.[Codice art fornitore] &
" And articoli.[IDfornitore] = " & Me.IDfornitore)
Non vorrei che il problema fosse il fatto che nel form non ci sono i
due articoli uguali.Ne abbiamo solo uno.Il compito del tuo codice
sarebbe di sostituirlo con quello appena inserito nel form articoli.
Dino.
NB:Dai gentilmente un occhio anche all'altro post "Filtraggio dati
query" ti ho fatto un esempio di come vorrei il tutto.
Grazie mille Dino

 ha scritto nel messaggio 
news:3d5811d7-fd9d-4a28...@d27g2000yqf.googlegroups.com...

Fai un debug e controlla che la sintassi sia corretta.
Esistono i campi idfornitore e [codice art fornitore] in tabella articoli?
sono di tipo numerico?
diversamente li devi trattare come testo...e aggiungere gli apici prima e 
dopo il campo.
cerca di capire la sintassi e non di copiare/incollare....
il set fissa un recordset che poi vai ad aprire con il relativo comando 
quindi quello che restituisce è una select, per cui anche se dovesse essere 
vuota gira lo stesso ma è in stato di EOF (end of file).
se ti restituisce un errore è prechè è sbagliata in qualche modo la sintassi 
per cui non riesce ad eseguire l'openrecordset.
cerca di ragionarci un pò su...l'help ti viene incontro con molti 
esempi...usalo!


 ha scritto nel messaggionews:3d5811d7-fd9d-4a28...@d27g2000yqf.googlegroups.com...

OK lungi da me il voler solo copiare ed incollare.
domani mattina se puoi controlla il post che ti do notizie in merito.
Ancora grazie Dino

 ha scritto nel messaggio 
news:d9764d16-d0de-4735...@z35g2000yqd.googlegroups.com...

Giro spesso da ste parti :-)


 - Mostra testo citato -
Sto' purtroppo uscendo ci sentiamo (ci "postiamo") in serata.due cose:
Sto' cercando di ragionare (tu dirai "e ora")  questo codice,
correggimi se sbaglio dovrebbe se trova un articolo gia' esistente
sostituirlo con quello piu' aggiornato a livello di data????Sì perche'
avendo fatto io le relazioni "aggiorna campi correlati a catena" nel
momento che vario il prezzo di un articolo la distinta base si
aggiorna automaticamente.Ma nel momento che io inserisco lo stesso
articolo acquistato da un altro fornitore il codice dovrebbe fare lo
stesso.
Forse nel codice bisogna inserieancge il "campo data listino" ???
La seconda cosa e' solo che volevo avvisarti (come vedrai dal post)
che ho risolto il problema del raggruppamento bolle in SQL così
SELECT DISTINCTROW [Num doc], [Tabella bolle prodotti].[ID Cliente],
[Tabella bolle prodotti].[Data doc], [Tabella bolle prodotti].
[Aggiungi]
FROM [Tabella bolle prodotti]
WHERE ((([Tabella bolle prodotti].[ID Cliente])=[Forms]![Maschera
inserimento fatture]![ID Cliente]));
Grazie ancora per i tuoi consigli  e ci "POSTIAMO" stasera
Dino