|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Jun 2008
Messaggi: 10
|
Microsoft Access
Ciao a tutti.
Chiedo una info a chi mi può aiutare. Sto creando un semplice data base con access dove mi effettua un conteggio di valori su una macchina che conta dei pezzi tramite il PLC. Cerco di essere più caro!!!!! Ho creato una interfaccia Access che mi fa visualizzare il conteggio minuto per minuto dei pezzi che entrano in una macchina che sceglie le Piastrelle tramite una fotocellula collegata ad un PLC. Pertanto io prendo i valori dal PLC tramite un programma e li vado a lavorare con Ms Access come file allegato . Quello che devo fare ora creare un'altra finestra accanto a quella del valore che mi visualizza la differenza tra il record2 e il record 1 , cioè ho bisogno che lui in automatico per ogni conteggio che fa mi calcola il record 2 meno il record 1 in modo da sapere un totale dei pezzi lavorati. Mi auguro di non essere stato troppo contorto Grazie a chi mi risponde. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Cioè, in pratica vorresti un "trigger" in Access...
Ad ogni nuovo inserimento Access dovrebbe mettere nella stessa tabella o in una nuova la differenza di "VALORE", ossia ultimo_inserimento - penultimo_inserimento... Right ? |
![]() |
![]() |
![]() |
#3 |
Junior Member
Iscritto dal: Jun 2008
Messaggi: 10
|
Ciao
Intanto grazie per la risposta. Io non uso molto access ma un trigger si intendono delle relazioni? In pratica a me interessa che ad ogni valore che aumenta come illustarto in foto di conseguenza accanto fa il calcolo del valore successivo meno quello precedente. per intenderci se il record2 dovrà essere dato da record 3 meno il record 2 ecc..... Spero di essermi spiegato!!!! |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
![]() Cmq, un trigger è un'operazione che scatta in un RDBMS al verificarsi di un certo evento, come ad esempio l'insert di un nuovo record. Access non supporta i trigger, purtroppo, perciò bisognerebbe capire anzitutto che tipo di accesso hai al programma che scrive sul DB ( puoi leggerne / modificarne il codice ? ). Se, come penso, non puoi mettere mano al codice del programma, e puoi solo modificare il DB stesso, hai 2 strade : 1. Access può supportare i triggers, che io sappia, una volta convertito in applicazione ADP ( credo serva SQL Server per farlo... ) : http://office.microsoft.com/it-it/ac...854151040.aspx Non ho mai provato a creare un "ADP" da un .mdb e lavorarci sopra, perciò non garantisco... 2. Cercare di aggirare il problema con le semplici funzioni di Access, visto che il codice VBA ( come una Public Function, ad esempio, che risolverebbe subito... ) non è accessibile dai campi calcolati... Ma la vedo davvero dura ! A proposito di questo punto, sono molto curioso di vedere se qualcuno qui del Forum ce la fa ! ![]() |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Feb 2004
Città: TREVISO
Messaggi: 902
|
è una sfida?
![]() ...dai non dirmi così altrimenti non faccio più le cose per cui sono pagato e mi butto solo su questo ![]() La prima soluzione che mi viene in mente è questa: Assumendo che ci sia una tabella da cui il programma legge i dati, ci aggiungiamo un campo che conterrà la differenza di ogni record rispetto al record precedente. A quel punto sull'apertura della maschera ci mettiamo un algoritmo di questo tipo: Codice:
1) per ogni record nella maschera fai quanto segue: Inizializzo una variabile booleana di appoggio, tipo "controlla= true" 1.1) Se controlla=true allora sono sul record di cui devo memorizzare il valore del campo "valore" ad esempio in una variabile intera "campo_valore" 1.1.1) Metto controlla=false 1.2) se Controlla=false, allora siamo sul secondo record da in cui dobbiamo mettere la differenza, quindi: Me.Valore = Me.valore - campo_valore 1.2.1) Controlla = true 1.3) spostati sul record successivo questa è la prima soluzione in a grandi linee che mi è venuta in mente, l'ho scritto di getto quindi potrei aver sbagliato qualcosa...intanto è uno spunto ![]() EDIT: se fate avere il database penso di riuscire a mettere sta cosa...
__________________
![]() Ultima modifica di akyra : 19-06-2008 alle 10:09. |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Il nostro amico ha già un programma esterno al DB ( il cui linguaggio non è al momento noto, potrebbe essere VB6, .NET, C++ o chissà quale... ). Il programma scrive nella tabella dei dati che arrivano via PLC. Perciò ( da come l'ho inteso io ) visto che lui non può / non vuole modificare il sorgente del programma, vorrebbe che Access facesse tutto ogni volta che il programma esterno ( e quindi niente Forms o maschere di Access ) esegue una INSERT. Tu parli di maschera, ma non la puoi usare, e non puoi far riferimento a codice VBA o a Stored Query direttamente da un campo calcolato... Insomma quello che vuole è un classico trigger... |
|
![]() |
![]() |
![]() |
#7 |
Junior Member
Iscritto dal: Jun 2008
Messaggi: 10
|
Salve Ragazzi
Intanto vi ringrazio della vostra collaborazione. Vi cercherò di spiegarvi meglio il tutto: Io ho un file tipo quello che vi allego per ogni macchina, che mi viene generato dal software che interagisce con il PLC. A questo punto io non ho fatto altro che collegare questo file in access creando delle tabelle. Questi file essendo collegati in access non posso manipolarli e pertanto sto cercando di fare quello che posso. Ora mi sono fatto la mia maschera e fin qui tutto bene. Il problema che devo aggiuingere due cose importanti che sono: [b]Ricerca per data e ora ( devo effettuare una ricerca tipo dal giorno x al giorno y dalle ore x alle ore y) [b]Conteggio del record successivo con quello precedente (record 2 - record 1), questo mi serve per avere un riscontro più immediato di quanti pezzi lavora la macchina al minuto senza far perdere tempo all'operatore di fare i calcoli. Di nuovo grazie mille a tutti !!!!!!!!!!!!!!!!!!!!!!!!! |
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
PLC > Programmino > File txt > Access. Quindi nessuno ti vieta di aprire Access "a bocce ferme" ed eseguire Query e Macro come ti pare ? Non s'era capito, per questo pensavo che il programma scrivesse direttamente sul DB e mi ero posto il problema del trigger... Vabbè... Certo ragazzi, a volte vi esprimete proprio da cani ! ![]() ![]() |
|
![]() |
![]() |
![]() |
#9 |
Junior Member
Iscritto dal: Jun 2008
Messaggi: 10
|
![]() ![]() ![]() ![]() Si confermo sono stato un pò contorto all'inizio. Comunque pensi di potermi aiutare? Ciao Grazie |
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Intanto ho risolto il tuo primo ed unico quesito ( che ora è diventato il secondo... ), ossia il calcolo delle differenze : 1. Nella tabella Access, che io chiamo "T_PLC", dopo "data", "ora", "valore" aggiungi un campo numerico > "differenza". 2. Crea una Stored Query "Query_SEL" : Codice:
SELECT T_PLC.data, T_PLC.ora, T_PLC.valore FROM T_PLC; Codice:
UPDATE T_PLC SET T_PLC.differenza = [=differenza] WHERE (((T_PLC.data)=[=data]) AND ((T_PLC.ora)=[=ora])); Codice:
Dim QDSel As QueryDef Set QDSel = CurrentDb.QueryDefs("Query_SEL") Dim QDUpd As QueryDef Set QDUpd = CurrentDb.QueryDefs("Query_UPD") Dim RS As Recordset Set RS = QDSel.OpenRecordset Dim valPre As Long valPre = 0 Dim val As Long val = 0 RS.MoveFirst While Not RS.EOF valPre = RS("valore").Value RS.MoveNext On Error GoTo EX val = RS("valore").Value QDUpd.Parameters("=data") = RS("data").Value QDUpd.Parameters("=ora") = RS("ora").Value QDUpd.Parameters("=differenza") = val - valPre QDUpd.Execute Wend EX: RS.Close QDSel.Close QDUpd.Close Set RS = Nothing Set QDSel = Nothing Set QDUpd = Nothing ![]() |
|
![]() |
![]() |
![]() |
#11 |
Junior Member
Iscritto dal: Jun 2008
Messaggi: 10
|
Ciao
Ti ringrazio nuovamente per la cortesia della risposta, ma ti volevo chiedere che ho un problema con la modfica dei file collegati nella tabella cioè , essendo file collegati non possono essere modificati e non posso aggiungere il campo "differenza" come posso fare? ![]() ![]() ![]() ![]() ![]() Ciao Grazie mille!!!! |
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
Fossi in te : 1. Non userei alcun collegamento con il file txt. 2. Metto il mio "FILE.txt" nella stessa dir del DB .mdb. 3. Creo la tabella vuota "T_PLC" destinata a contenere i records del txt, con tutti i campi che mi pare >> in questo caso : data / ora / valore / differenza, come ti avevo già detto. 4. Semplicissima Stored Query parametrica "Query_TXT" : Codice:
INSERT INTO T_PLC ( data, ora, valore ) VALUES ([data], [ora], [valore]); Codice:
Dim nomeDB As String nomeDB = CurrentDb.Name Dim PercorsoDB As String PercorsoDB = nomeDB Do PercorsoDB = Mid(PercorsoDB, 1, Len(PercorsoDB) - 1) If Right(PercorsoDB, 1) = "\" Then Exit Do Loop Dim nFile As Integer nFile = FreeFile Dim strLinea As String Open PercorsoDB & "FILE.txt" For Input As nFile Dim QD As QueryDef Set QD = CurrentDb.QueryDefs("Query_TXT") Dim arrayLinea() As String Dim P_data As Date Dim P_ora As Date Dim P_valore As Long Dim i As Integer i = 0 Do While Not EOF(nFile) Line Input #nFile, strLinea arrayLinea = Split(strLinea, " ") MsgBox strLinea P_data = CDate(arrayLinea(0)) P_ora = CDate(arrayLinea(1)) P_valore = CLng(arrayLinea(2)) QD.Parameters("data") = P_data QD.Parameters("ora") = P_ora QD.Parameters("valore") = P_valore QD.Execute Loop QD.Close Set QD = Nothing Close nFile ![]() ![]() |
|
![]() |
![]() |
![]() |
#13 |
Junior Member
Iscritto dal: Jun 2008
Messaggi: 10
|
Scusami se sono scocciantema siccome non lo uso molto access mi tocca chiederti altre info.
Siccome il file è un file che conta di continuo poi viene aggiornato alla mia tabella? perciò lo avevo fatto collegato in modo tale si aggiornava di conseguenza anche nel DB. Inoltre se creo la TBL come mi hai indicato tu come faccio poi i miei valori della tbl a farli collegare ai file di testo. Grazie mille per la pazienza. |
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
![]() Ora, non capisco qual è il problema. Questa macchina lavora giorno/notte per 365 giorni all'anno ? Se rileggi i miei post precedenti : - ultimo post : ti spiego proprio come popolare la tabella da file txt. Lo puoi fare anche mentre il Plc/Programma sta girando, ma avrai sempre una "fotografia" del txt in quel momento lì, non so se mi spiego... - penultimo post : come calcolare le differenze. Nota : Se pensi di lanciare il mio codice più volte per eseguire la copia dati da txt a tabella sarà necessario modificarlo, in modo che non replichi n volte tutto il contenuto del txt stesso. Era per darti una soluzione alternativa alla tua, non ancora completa ma già funzionante e valida... Ma vedo che non ci capiamo... ![]() |
|
![]() |
![]() |
![]() |
#15 |
Junior Member
Iscritto dal: Jun 2008
Messaggi: 10
|
Ciao
Grazie per l'ennesiam risposta, purtroppo non è che non ci capiamo, è che come ti ho già detto non conosco un c.... di access e quindi per questo motivo ti faccio molte domande. Ti chiedo un'altra informazione se hai volgia di rispondermi ![]() ![]() Nella fase 6 che mi hai scritto del 20-06-2008 16:06 dove dici di inserire un pulsante carica txt per popolare la tabella. Domanda sicuramente stupida per te: dove devo inserire il pulsante in una maschera ??Cioè creare una maschera ed inserire il pulsante carica TXT . Immaggino di no ma siccome non so come fare se riesci oltre a quello che mi hai già inviato mi potresti guidare passo passo come fare il tutto? Scusa il fastidio e ti ringrazio anche se non puoi . Ciao Grazie ![]() ![]() ![]() |
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
|
![]() |
![]() |
![]() |
#17 |
Junior Member
Iscritto dal: Jun 2008
Messaggi: 10
|
Ciao
Grazie per la risposta. Purtroppo ho fatto tutte le prove ma non riesco ma di errori di continuo. Senti ti volevo chiedere una cortesia, se tu puoi me lo faresti tu e me lo invii tramite mail se hai lo possibilità, in quanto ho perso molto tempo e devo preparare questo db altrimenti rischio un lavoro. Magari mi fai le basi e poi lo sistemo io mi basta la ricerca per data e ora e il calcolo della differenza che esce per ogni record. Se puoi mi fai sapere. Altrimenti ti ringrazio comunque della tua disponibilità. Ciao Grazie |
![]() |
![]() |
![]() |
#18 | |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
E poi seguire alla lettera i miei esempi... Potrebbe anche essere dovuto alla versione di Access che usi ( io sto su Access 2003 )... Quando posto un codice è perchè l'ho provato, quindi posso dimostrare che da me funziona al 100 %. Non avrebbe senso venire qui sul Forum e postare codici a casaccio... Se non ho tempo evito proprio di rispondere. Se vuoi una consulenza completa... Beh, il periodo "Trial" termina qui... ![]() ![]() Comunque praticamente ti ho già fatto tutto io... |
|
![]() |
![]() |
![]() |
#19 |
Junior Member
Iscritto dal: Jun 2008
Messaggi: 10
|
Ciao
Grazie per la risposta. Ma tagliamo corto !!! Senza tanti controsensi cosa chiederesti ((economicamente)) per potermi fare questo DB. Ciao Grazie |
![]() |
![]() |
![]() |
#20 | |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Quote:
![]() Detto questo credo non sia corretto fare/ricevere offerte economiche "in chiaro" su questo Forum ( a parte il Mercatino ). Almeno usa il pvt. Se vogliamo parlare d'affari, ben volentieri, ma in privato, o via Mail... Sono disposto ad avere le specifiche esatte del programma/DB e poi vediamo... Infine, per quanto riguarda i "controsensi" ( o intendevi "doppi sensi"... ![]() ![]() |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:08.