n° 219
Novembre 2017
Dicembre 13, 2017, 07:08:10 *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia:
 
   Indice   Linux Windows Techassistance Gameassistance videogame hardware Aiuto Ricerca Agenda Downloads Accedi Registrati  


* Messaggi recenti
Messaggi recenti
Pagine: 1 [2]   Vai giù
  Stampa  
Autore Discussione: Creazione Database Acces da Codice  (Letto 4495 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
alex.75
invioattach
Full Member
***

Karma: +14/-4
Scollegato Scollegato

Messaggi: 357



Mostra profilo WWW
« Risposta #15 inserita:: Ottobre 24, 2016, 08:08:56 »

Utilizzerò Sql Server sia sul PC Principale che sui PC Replica.

Per sfruttare tutte le funzioni finora create vorrei comunque mantenere la possibilita di creare un DataBase Acces da zero per eseguire il backUp ma questa volta da utilizzare come file di scambio per eseguire una sincronizzazione tra i DB.

Ora mi si pone il problema che utilizzando un campo IDENTITY come chiave per l'identificazione dei nuovi record se viene inserito un nuovo record sia sul principale che sulla replica al momento della sincronizzazione mi ritrovero' con uno steso campo IDENTITY che fa riferimento però a due record distinti...

E' possibile indicare a Sql Server di utilizzare un determinato range alla generazione del nuovo valore del campo IDENTITY in base al fatto che venga eseguito sul pc principale o sul pc replica?


Sí, certo che si puó fare, ma a che ti serve?
Database A, next Id = N
Database B, next Id = M
A che ti serve impostare il database B per partire da N+1 o il database A per partire da M+1 ?
Il prossimo record inserito nei dei due database sará in conflitto con l'altro database.

Usare Access per lo scambio di dati tra due database SQL Server... é ... é... surreale ... ma vabbé, é un esercizio.
Le repliche sono una cosa differente dai backup, e hanno un differente scopo (non quello che serve a te).
Se usi SQL Express (come credo) non penso ci siano neanche.

Per farla breve, se vuoi una sincronizzazione in ambo i sensi ti suggerisco di nuovo di usare un campo GUID.
I campi Id di entrambi i database saranno indipendenti (anche in conflitto), questo campo GUID sará il vero identificatore univoco.
Quando l'applicazione B leggerá i dati da Access prenderá solo i record con un GUID che non possiede, ovvero quelli che sono stati generati da/per un altro database, e scrivendoli sul proprio database gli assegnerá un nuovo Id (ma manterrá il GUID).

A meno di non aver capito niente di quello che intendi fare non vedo altre soluzioni.

Ciao
Registrato
Mircosoft
Jr. Member
**

Karma: +0/-0
Scollegato Scollegato

Messaggi: 70


Mostra profilo
« Risposta #16 inserita:: Ottobre 26, 2016, 09:20:16 »

La Soluzione attraverso il Campo GUID e' decisamente quella che fa al caso mio...

In quanto in condizioni Normali (campo data creazione identico) riesco ad identificare che si tratta di un aggiornamento dei dati e attraverso il campo datamodifica riesco ad identificare quali sono i dati piu' recenti

In caso di data creazione differente devo identificare con quale dei due programmi e' stato creato e compiera un importazione differenziata...

Grazie Mille
Registrato
Mircosoft
Jr. Member
**

Karma: +0/-0
Scollegato Scollegato

Messaggi: 70


Mostra profilo
« Risposta #17 inserita:: Ottobre 27, 2016, 04:19:39 »

Analizzando meglio neppure il campo GUID fa al caso mio...

Si puo' ottenere un ID del motore SQL che ha generato il record e memorizzarlo come valore di default?

In questo caso sarei in grado di discriminare quale dei due programmi ha creato il record e decidere sul dafarsi....
Registrato
alex.75
invioattach
Full Member
***

Karma: +14/-4
Scollegato Scollegato

Messaggi: 357



Mostra profilo WWW
« Risposta #18 inserita:: Ottobre 27, 2016, 08:24:45 »

Citazione
Analizzando meglio neppure il campo GUID fa al caso mio...

Spiegati meglio.

Citazione
In questo caso sarei in grado di discriminare quale dei due programmi ha creato il record e decidere sul dafarsi....

A te non server sapere quale applicazione ha generato i dati. Ti serve sapere se li hai giá o meno.
Potresti ad esempio aggiornarti con i tuoi stessi dati se hai ripulito SQL Server, usando Access come una sorta di backup.
Perché non puoi usare il campo Guid per fare questa selezione?
Quando lanci la sinscronizzazione ed elabori i dati di Access,
se il Guid é giá presente (é generato dall'applicazione corrente che si sta sinscronizzando) lo ignori
altrimenti (é stato generato da un'altra applicazione) lo inserisci.

Citazione
Si puo' ottenere un ID del motore SQL che ha generato il record e memorizzarlo come valore di default?

Probabilmente sí, ma non so come. Il punto é che non mi pare abbia senso.
É l'applicazione che genera il dato, se lo vuoi "marcare" con una chiave/utente é questa che deve farlo. Non il database. Quest'ultimo deve essere visto solo come uno "storage", potresti usare un file di testo/XML/DropBox... o non sapere affatto dove vengano salvati i dati.
Non capisco perché tu voglia farlo, non ti é sufficiente valutare il Guid che trovi nei record recuperati in Access? Descrivi lo scenario dove pensi il Guid non sia uan soluzione sufficiente/corretta.


P.S. In tutto questo io non ho mai pensato a record cancellati, in caso l'applicazione lo preveda potrebbe essere sufficiente marcarli come "cancellati" ?

P.P.S. Se hai la tastiera UK (come me) basta premere AltGr+[aeiou] per scrivere le lettere accentate (per altri layout non so).

Ciao,

Alessandro
Registrato
Mircosoft
Jr. Member
**

Karma: +0/-0
Scollegato Scollegato

Messaggi: 70


Mostra profilo
« Risposta #19 inserita:: Ottobre 28, 2016, 02:28:16 »

Riassumo la mia situazione:

Ho intenzione di installare lo stesso programma in due location differenti
Il principale in magazzino dove non ho la connessione ad Internet
Il secondo in ufficio situato in un altro stabile

La mia tabella principale e' quella degli ARTICOLI
Tutte le altre tabelle hanno un campo ArticoloIDX per identificare a che articolo fanno riferimento

una volta allineati i due programmi su entrambi si potrà modificare i dati nelle tabelle per questo motivo ogni tabella e' dotata di due campi DataCreazione e DataModifica(questultima aggirnata attraverso un Trigger)

Saltuariamente e manualmente vorrei fare l'allineamento dei dati modificati
Per salvaguardare il formato dei dati pensavo ad access come database di trasporto dati (avevo provato via file CSV ma mi fido poco, qualcuno potrebbe modificarlo troppo facilemente)

Per l'allineamento pensavo di procedere nel seguente modo
Una volta letto il campo IDX della tabella da allineare cerco il corrispettivo record in SQL Server
#Caso 1: Non lo trovo
   Inserisco un nuovo record (forzando il campo IDENTITY)
#Caso 2: Lo trovo e DataCreazione dei due Database sono uguali
   Se il campo DataModifica di Acces e' piu recente di quello di SQL Server aggiorno SQL Server
#Caso 3: Lo trovo ma i campi DataCreazione sono differenti
   Questo e' il caso che mi da da fare perche' vuol dire che entrambi i programmi hanno aggiunto record
   Vorrei Avere la certezza che a crearlo sia stato il prgramma dell'ufficio
    per poi procedere nel seguentemodo:
             Nella tabella articoli eseguirei un semplice insert
             per poi salvarmi il valore IDENTITY creato in una lista NewIDX -> OldIDX
             da utilizzare nelle prossime tabelle che fanno riferimento al campo ArticoloIDX incriminato


   




   
Registrato
Max.Riservo
Global Moderator
Sr. Member
*****

Karma: +24/-0
Scollegato Scollegato

Messaggi: 850



Mostra profilo
« Risposta #20 inserita:: Ottobre 28, 2016, 06:10:33 »

Visto che già gestisci la data creazione e la data modifica del record ti consiglio di aggiungere anche l' utente che ha inserito il record e quello che lo ha modificato.
Se gli utenti tra l' ufficio e il magazzino sono diversi (nel senso che chi lavora in ufficio NON può modificare l' archivio del magazzino e viceversa) hai un metodo per discriminare il luogo dove è avvenuta la modifica.
Se tutti possono agire nelle diverse locazioni allora potresti inserire qualcosa che identifica il PC (tipo il nome del PC) .... che poi non mi sembra così tanto diverso dal' utilizzo di un campo GUID come già suggerito
Registrato

I Moderatori invitano tutti gli Utilizzatori del forum a prendere visione del REGOLAMENTO e a rispettarlo.
Pagine: 1 [2]   Vai su
  Stampa  
 
Vai a:  

Copyright © 2017 Edizioni Master SpA. p.iva : 02105820787

Tutti i diritti di proprietà letteraria e artistica riservati. - Privacy



powered by Simple Machines