Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    adodb.recordset su directory condivisa

    Accedendo a una dbf tramite ado direttamente con un adodb.recordset ( con una semplice select che esegue
    una query per popolare una datagrid in vb6 ) tutto funziona bene e velocissimamente quando il dbf si trova sullo
    stesso computer ( pc1) da cui si lancia la query. ( es: c:\database su pc1 )

    Se invece eseguo la query da un pc ( pc2 ) in rete che fa parte dello stesso gruppo di pc1, puntando al dbf su una
    directory condivisa ( es: w:\ mappato a c:\database sul pc1 )
    la query diventa lentissima... come se dovesse scaricare da pc1 a pc2 l'intera tabella ... dbf.

    p.s: il recordset viene creato con
    rs1.open "SELECT TOP 10
    COGNOME,NOME,NATODOVE,IL,ETA,DATAVISIT,IDONEITA1,M EDIX,SPORT,SCORTANUME FROM "
    & archivio & " WHERE ( 1=1) order by DATAVISIT desc, SCORTANUME desc ", conn, adOpenForwardOnly,
    adLockReadOnly

    e poi disconnesso impostando la connection a nothing

    rs1.ActiveConnection = Nothing
    conn.Close

    Dove sbaglio?

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    1. Hai provato a connetterti utilizzando direttamente il percorso : "\\nomeserver\nomecondivisione" invece di mappare la cartella?

    2. che tipo di DBF usi e quale versione? (dBaseXXX, FoxPro,...)

    3. l'uso di WHERE (1=1) è proprio indispensabile ?

    Buone Feste

  3. #3
    grazie per la risposta velocissima

    a) usare l'UNC in visual basic 6 e' per me un enigma...infatti il programma letteralmente esce dai gangheri ...senza nemmeno dare un messaggio di errore, comunque sia anche senza utilizzare l'UNC e usando W: le cose funzionano solo che prima di riempire ll datagrid ci mette 1 minuto...e intanto scarica 200 Mbyte...cioe' piu' o meno lo spazio occupato su disco dal dbf ( dbase IV)

    b) la clausola where 1=1 dovrebbe essere delimitata comunque dalla TOP 10 che c'e' all'inizio della select e comunque il problema non cambia anche se inserisco clausole piu' restrittive ad es. se immetto cognome like "AZZOLINI" ...
    In conclusione ancora non mi spiego come mai funziona in modo istantaneo se uso un disco presente sul computer

    Forse puo' avere senso utilizzare la clausola adOpenStatic al posto di adforwardonly?
    Oppure serve un programma server attivato sul computer condiviso?
    Oppure bisogna eseguire il programma VB6 dal computer remoto con directory condivisa?

    Saluti

  4. #4
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Forse puo' avere senso utilizzare la clausola adOpenStatic al posto di adforwardonly?
    Ovviamente no.
    Se usi adOpenStatic peggiori ulteriormente situazione e tempi (e di molto!)
    Invece dovresti aggiungere l'opzione adCmdText per dire ad ADO come deve interpretare il comando:
    rs1.Open sSQL, conn, adOpenForwardOnly, adLockReadOnly, adCmdText

    Oppure serve un programma server attivato sul computer condiviso?
    No capisco bene cosa intendi tu per 'programma server attivato', nel senso che non mi pare che tu abbia creato un'applicazione Client/Server che usa componenti Client e componenti Server che dialogano tra loro. Se fosse così l'avresti detto, o no?

    Oppure bisogna eseguire il programma VB6 dal computer remoto con directory condivisa?
    Il programma DEVE sempre essere installato sul Server, MAI nei singoli client.
    Su questi ultimi vanno installati solo i componenti come DLL, OCX, driver, ecc. perchè l'applicazione sarà sempre eseguita in locale (anche se l'exe è avviato dal Server).
    Solo in questo modo sei sicuro al 100% che gli utenti usino sempre la stessa versione del programma, e non hai nessun problema negli aggiornamenti.

    Piuttosto, mostra il codice completo con cui dichiari e poi imposti le proprietà della connessione e quelle del recordset.

    Buone Feste

  5. #5
    Eseguendo il programma su un server, l'avvio e' di una lentezza penosa...lo splash screen si pianta... (non so,forse ho fatto uso di funzioni (api) che gli danno fastidio) ... inoltre il problema persisterebbe se dal server chiamassi una directory condivisa.

    Insomma: io installo e lancio il programma da (ogni) cliente e come ripeto, funziona benissimo su IIS (qualsiasi sia, internet o intranet) oppure in locale, dove la risposta e' immediatissima.

    Insomma il problema dipende dal fatto che se chiamo una directory condivisa, ad ogni query mi scarica sul locale tutto il dbf; cosa che mi pare davvero assurda e priva di senso....
    a proposito se mi azzardo ad utilizzare la clausola aduseServer ( che forse potrebbe aver senso per evitare di scaricare il dbf) ... il programma esce senza dare nessun messaggio.

    Nessuna differenza con adopenstatic, ne' con adcmdtext
    Non ho provato con l' "Optimize"

    Function getlocal(archivio, checosa, checosa1, Optional direc As String = "a", Optional stringaf = "a", Optional conditio = "a", Optional indice = "SCORTANUME") As ADODB.Recordset
    Dim ladata As String
    Dim laselexione
    Dim usecosa
    Dim trasformadata
    Dim locktype
    Dim opentyp

    Set rs1 = New ADODB.Recordset
    Set conn = New ADODB.Connection
    usecosa = adUseClient
    locktype = adOpenStatic
    opentyp = adLockOptimistic

    If direc = "a" Then
    direc = remotepath
    End If
    If fileexists(direc & archivio) Then
    Else
    Call filecopy1(EXEPATH & "vuotarch.dbf", direc & archivio)
    End If

    conn.ConnectionString = stringaconnette & direc
    conn.CursorLocation = usecosa 'adUseClient
    conn.open
    rs1.CursorLocation = usecosa 'adUseClient
    rs1.ActiveConnection = conn
    With rs1
    If .State = adStateOpen Then .Close
    .CursorLocation = usecosa 'adUseClient
    End With
    Debug.Print "da getlocal"; Time(); "checosa="; checosa
    Select Case checosa
    Case "reporttrim"
    laselexione = "SELECT " & stringaf & _
    " FROM " & archivio & _
    " WHERE " & conditio & _
    " ORDER BY " & indice
    rs1.open laselexione, conn, opentyp, locktype, adCmdText 'adOpenForwardOnly, adLockReadOnly

    Case "" 'locale da formstart
    rs1.open "SELECT COGNOME,NOME,NATODOVE,IL,ETA,DATAVISIT,IDONEITA1,M EDIX,SPORT,SCORTANUME FROM " & archivio & " WHERE 1=1 ORDER BY DATAVISIT desc, SCORTANUME ", conn, opentyp, locktype, adCmdText 'adOpenForwardOnly, adLockReadOnly
    Case "VUOTO2"

    rs1.open "SELECT COGNOME,NOME,NATODOVE,IL,ETA,DATAVISIT,IDONEITA1,M EDIX,SPORT,SCORTANUME FROM " & archivio & " WHERE 1=0 ", conn, opentyp, locktype, adCmdText 'adOpenForwardOnly, adLockReadOnly
    Case "MIALISTA"

    laselexione = "SELECT " & stringaf & _
    " FROM " & archivio & _
    " WHERE " & conditio & _
    " ORDER BY " & indice
    rs1.open laselexione, conn, opentyp, locktype, adCmdText 'adOpenForwardOnly, adLockReadOnly

    Case Else

    If checosa1 = "" Then
    If checosa = "_" Then
    rs1.open "SELECT TOP 10 COGNOME,NOME,NATODOVE,IL,ETA,DATAVISIT,IDONEITA1,M EDIX,SPORT,SCORTANUME FROM " & archivio & " WHERE ( 1=1) order by DATAVISIT desc, SCORTANUME desc ", conn, opentyp, locktype, adCmdText 'adOpenForwardOnly, adLockReadOnly

    Else
    rs1.open "SELECT top 50 COGNOME,NOME,NATODOVE,IL,ETA,DATAVISIT,IDONEITA1,M EDIX,SPORT,SCORTANUME FROM " & archivio & " WHERE ( COGNOME like '" & checosa & "%') order by COGNOME,NOME,il,natodove,DATAVISIT desc", conn, opentyp, locktype, adCmdText 'adOpenForwardOnly, adLockReadOnly
    End If
    Else
    If senzabuffer Then
    rs1.open "SELECT COGNOME,NOME,NATODOVE,IL,ETA,DATAVISIT,IDONEITA1,M EDIX,SPORT,SCORTANUME " & _
    " FROM " & archivio & " WHERE " & _
    " (( COGNOME like '" & checosa & "') AND ( NOME like '" & checosa1 & "')) order by COGNOME,NOME,il,natodove,DATAVISIT desc", conn, opentyp, locktype, adCmdText 'adOpenForwardOnly, adLockReadOnly
    Else
    trasformadata = Format(rsbuffer.Fields("natoil"), "\#yyyy\-MM\-dd\#")

    rs1.open "SELECT COGNOME,NOME,NATODOVE,IL,ETA,DATAVISIT,IDONEITA1,M EDIX,SPORT,SCORTANUME " & _
    " FROM " & archivio & " WHERE " & _
    " ( ( IL = " & trasformadata & ") AND ( natodove like '" & rsbuffer.Fields("NATOa") & "') AND ( COGNOME like '" & checosa & "') AND ( NOME like '" & checosa1 & "')) order by COGNOME,NOME,il,natodove,DATAVISIT desc", conn, opentyp, locktype, adCmdText 'adOpenForwardOnly, adLockReadOnly
    End If

    End If
    End Select
    rs1.ActiveConnection = Nothing
    conn.Close
    Set getlocal = rs1

    End Function

  6. #6
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    A parte che:
    - non hai formattato il codice (per questo va usato il pulsantino # sulla barra) ed è difficile da leggere
    - usi nomi descrittivi molto fantasiosi (trasformadata, usecosa, ...)
    - non hai tipizzato le dichiarazioni, quindi risultano tutte Variant!!! Orribile... VVoVe:
    - stai usando: locktype = adOpenStatic e opentyp = adLockOptimistic invece di adOpenForwardOnly, adLockReadOnly

    Mi spieghi cosa c'entra IIS ?

    Non vorrei che fossero i DBF ad avere problemi con la rete.
    Non puoi cambiare database?

    Perchè non provi a fare un esperimento con un MDB di Access?
    Ci metti un attimo ad importarti tutte le tabelle DBF, sempre che siano in un formato compatibile. Se sono dBase IV non ci sono problemi.

    Ciao

  7. #7
    codix orribilis e' vero!
    Comunque sono prove e anche adopenstatic e' solo l'ultima prova rimasta e come ti dicevo non fa' differenza alcuna.

    comunque questa e' la stringa di connessione...

    codice:
    stringaconnette = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=dBase IV;Data Source="
    a cui va aggiunta la directory virtuale IIS ad es. http://remotedb/

    per cui la stringaconnette diventa...

    codice:
    stringaconnette = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=dBase IV;Data Source=http://remotedb/"
    su quella directory c'e' il database DBF IV e i file .asp che eseguono le query..funzionanti
    sotto IIS appunto

    ma....
    cercando in rete ho visto che esiste un provider specifico per aprire i dbf in remote e che si chiama MS REMOTE

    ad es...per una connessione ad access....

    codice:
    oConn.Open "Provider=MS Remote;" & _ 
               "Remote Server=http://myServerName;" & _
               "Remote Provider=Microsoft.Jet.OLEDB.4.0;" & _
               "Data Source=c:\somepath\mydb.mdb", _
                "admin", ""
    Assomiglia molto alla stringa da me utilizzata a parte il DBF e il remote provider.

    Mi sorge il dubbio che il problema sorga proprio da una cosa del genere ma non conoscendo assolutamente il "mondo" delle stringhe di connessione preferisco non avventurarmi oltre, anche se la curiosita' permane.

    In ogni caso, da vecchio programmatore credo che con ADO abbiano fatto una buona cosa (ma anche)...una bella confusione con le stringhe di connessione.

    Ciao
    Lorenzo

  8. #8
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da azzolini
    a cui va aggiunta la directory virtuale IIS ad es. http://remotedb/
    per cui la stringaconnette diventa...
    codice:
    stringaconnette = 
    "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=dBase IV;Data Source=http://remotedb/"
    su quella directory c'e' il database DBF IV e i file .asp che eseguono le query..funzionanti
    sotto IIS appunto
    Caspita! Hai omesso un dettaglio non da poco.
    Ma allora il tuo codice dovrebbe essere eseguito in una pagina ASP.


    Originariamente inviato da azzolini
    Mi sorge il dubbio che il problema sorga proprio da una cosa del genere ma non conoscendo assolutamente il "mondo" delle stringhe di connessione preferisco non avventurarmi oltre, anche se la curiosita' permane.

    In ogni caso, da vecchio programmatore credo che con ADO abbiano fatto una buona cosa (ma anche)...una bella confusione con le stringhe di connessione.
    Cosa c'entra ADO? Mica dipende da lui se ogni Database ha una SUA stringa di connessione e relative Proprietà.

    Secondo me, invece, il problema sono proprio i DBF, perchè a quanto mi risulta non sono nati per il web.

    In ogni modo qui trovi tutte le stringhe di connessione possibili
    http://www.connectionstrings.com/



    Ciao

  9. #9

    ok risolto

    Grazie a una tua domanda..cosa c'entra IIS? ho capito....

    Non si deve utilizzare il drive condiviso...es W: come facevo io, ma il suo nome UNC

    Per cui in intranet, se chiamo una directory condivisa denominata W: che corrisponde a //toshiba/c/
    nella connessione devo immettere http://toshiba/c/

    e non w:

    Avevo provato in precedenza a usare l'UNC nel formato //toshiba/c/ ma non funziona se si omette http:

    Grazie per il grande aiuto e la pazienza

    Ciao
    Lorenzo

  10. #10

    sorry correggo

    Mi sono sbagliato ho preso un abbaglio enorme... infatti il programma funziona perche' se l'intestazione e' http: si va a cercare gli asp ... insomma...come non detto.

    Nel frattempo ho provato a usare il nome del computer \\toshiba al posto di W: ... il risultato e' identico...si scarica tutto il dbf in locale...

    Scusa per la comunicazione erronea

    Ciao Lorenzo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.