LinkedTables e Recordset troncati

di il
9 risposte

LinkedTables e Recordset troncati

Ciao
Da mesi uso Access come Frontend e SQL server come backend.
Fino ad oggi tutto funzionava correttamente ma ad un certo punto Access ha cominciato a crashare.
Ho individuato il punto in cui si verificano problemi:
SQL = "SELECT * from dbo_ReportMini where id=540"
Set rs = CurrentDb.OpenRecordset(SQL)
x = rs.Fields("Name").Value 'Riga incriminata

Me.RecordSource = SQL
Quando imposto il valore di x, il valore restituito dal recordset e' nullo.
Ma nella form Me in cui ho una textbox con origine controllo uguale a Name il valore e' restituito correttamente.
Anche se apro direttamente la tabella dbo_ReportMini i record vengono visualizzati correttamente.
In realtà non e' una tabella ma e' una vista su sqlserver.
Inoltre originariamente la vista aveva una trentina di campi e solo i primi 3 restituivano un valore usando rs.Fields("...").Value gli altri o restituivano "" oppure qualcosa tipo ?????????s??? poi ho modificato la vista a 2 campi per testare ma riscontro sempre problemi.
Sto lavorando in VPN, mentre chi lavora nella stessa LAN non ha questo problema.

Cose che ho già fatto
1 Nuovo file access
2 Nuovo DSN
3 Nuova LinkedTable
4 Nuovo codice vba
5 Nuova query semplificata lato SQLServer

E' tutto il pomeriggio che ci sto dietro ma non ne vengo fuori

Non vorrei fosse un problema di VPN ma intanto provo a chiedere qui se qualcuno ha qualche asso nella manica

9 Risposte

  • Re: LinkedTables e Recordset troncati

    Name è un testo riservato... devi cambiare nome...
  • Re: LinkedTables e Recordset troncati

    Name e' un esempio
  • Re: LinkedTables e Recordset troncati

    Se usi esempi fallaci... noi pensiamo tu possa aver commesso errore... usa magari esempi coerenti con la buona tecnica e perdiamo meno tempo.

    Non ci sono elementi sufficienti per darti suggerimenti... non spieghi se testi la coerenza del recordset... non dici se analizzi lato server la chiamata e se questa viene correttamente elaborata... mi pare che oltre all'esempio, anomalo, tu abbia fatto poche verifiche. .
  • Re: LinkedTables e Recordset troncati

    Tu cosa faresti?
    E' un vista sul server che viene collegata come LinkedTable in access. Quali controlli faresti?
    Ho solo bisogno di leggerla per rappresentare il valore in una form. Non devo modificare niente.
    Non so cosa fare lato server visto che lato server non ho problemi. Con ssms i valori vengono restituiti correttamente.
    Ho provato anche un semplice Debug.Print in vba ciclando tutti i fields del recordset e quando il ciclo arriva al campo incriminato Access crasha.
    Ho inserito il codice in un blocco on error goto e non viene intercettato nessun errore, il programma crasha e basta.

    E' possibile che ci sia qualche problema lato server, non lo escludo ma non ne ho evidenza.
    Se qualcuno avesse avuto un problema analogo magari poteva riportare la sua esperienza come esempio. Non cerco una soluzione già pronta ma solo un eventuale spunto su quali cose controllare o quali test poter eseguire per non far crashare il programma.

    La vista e' in produzione da mesi e non ho mai riscontrato nessun problema.
    Mi domando quali siano i presupposti per far crashare Access semplicemente leggendo un campo di un record.

    Il codice che ho postato e' il minimo che serve per leggere il record. Ho ripulito e semplificato tutto quello che c'era di contorno e che di fatto ai fini di questo post era superfluo visto che il problema si presenta lo stesso.
  • Re: LinkedTables e Recordset troncati

    2 osservazioni:
    1) la vista è se mai [dbo_ReportMini] ma il recordset non apre tutta la vista, passa un parametro... e con gli strumenti di managment puoi analizzare la richiesta al server e capire se viene interpretata correttamente.

    2) apri la tabella linkata e verifica se li i dati ci sono... se già la linked non mostra nulla è evidente che il recordset non possa funzionare...

    Devi conoscere gli strumenti diagnostici ed usarli in conseguenza ad un ragionamento funzionale, ed il primo è discriminare l'origine...

    Purtroppo molto la da l'esperienza e questa traspare spesso anche da come si approccia il problema...
  • Re: LinkedTables e Recordset troncati

    Lasciando perdere la vista sono ripartito dalla base.
    Ho creato una nuova tabella in SQLServer con campi: testo (nvarchar(MAX)), intero (int) ,Decimale (decimal(10,2)), Giorno (datetime), Punto (bit)
    Ho popolato 2 record con valori opportuni ed analizzato il risultato del recordset rs ottenuto
    
    SQL = "select * from dbo_tTestLinkedTable where idTest=1"
    Set rs = CurrentDb.OpenRecordset(SQL, dbOpenDynaset, dbSeeChanges)
    x = rs.Fields("[Decimale]").Value
    
    Tutti i campi restituiscono il rispettivo valore eccetto il campo [Decimale] - in sqlserver Decimal(10,2).
    x dovrebbe essere 9,99 invece e' vuoto

    Mi viene da pensare che possa essere un problema di driver.
    Lavorando in VPN riscontro questo problema, lavorando in rete locale no.

    @Alex
    Aprendo la vista (o da ora la tabella di test ) linkata, direttamente in Access (doppio click e si apre la "grid") vedo tutti i valori di tutti i campi. Qui non ho mai riscontrato problemi.
    Creando una maschera, ed impostando a mano il RecordSource, tutti i controlli vengono popolati correttamente.
    Ovvero con questo codice tutto funziona:
    SQL = "select * from dbo_tTestLinkedTable where idTest=1"
    Me.RecordSource = SQL
    Se in Variabili Locali analizzo Me.Recordset tutti i Fields hanno il valore corretto eccetto il campo [Decimale] che e' vuoto.
    Il problema del crash avviene se ho due campi decimal di seguito.

    Ho una 50ina di tabelle e non so quante viste. Il problema non era solo sulla view iniziale ma ora vedo che e' ovunque io abbia un campo decimal.
    Solo che, nel caso una maschera abbia il recordsource impostato il problema non si pone.
    Il problema si verifica solo quando apro un recordset e cerco il valore di un Field decimal.

    Fino a ieri mattina questo problema non esisteva, poi ad un certo punto e' successo qualcosa ma non so cosa.
  • Re: LinkedTables e Recordset troncati

    Credo di aver risolto alla "vecchia".
    Disinstallato e reinstallato Access tutto ha ripreso a funzionare.

    Grazie comunque
  • Re: LinkedTables e Recordset troncati

    Ovviamente non poteva durare.
    Oggi il problema si e' ripresentato.

    Indagando ulteriormente ho scoperto che Access non riesce a gestire i campi decimal correttamente.
    Ho trasformato una LinkedTable che contiene campi decimal in un una tabella locale.
    Ciclando i campi per ottenerne il valore ho visto che Access crasha quando incontra un campo decimal.
    Modificando il type del campo da decimal a precisione doppia, l'errore sparisce per quel campo ma si ripresenta per il prossimo campo decimal.

    Cosa posso fare?
    Nel db originale su sqlserver praticamente tutte le tabelle hanno campi decimal. Non vorrei dover metter mano a tutte le tabelle e tutte le query se possibile.

    Qualche suggerimento?
  • Re: LinkedTables e Recordset troncati

    Il problema si e' ripresentato dopo un aggiornamento.

    Sembra che MS ne sia a conoscenza e sembra che abbia intenzione di risolvere presto

    https://www.devhut.net/2020/06/08/access-version-2005-build-no-12827-20268-causing-problems/

    Quindi, non aggiornate Access per ora se usate campi decimal.
Devi accedere o registrarti per scrivere nel forum
9 risposte