Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Membro Junior
    Registrato dal
    Oct 2002
    Messaggi
    23

    VB6 problema per esperti (consiglio cmq di leggerlo x chi ancora non lo è)

    ciao ragazzi.....

    ho bisogno di aiuto da qualcuno che è veramente esperto di vb6 o che si è trovato davanti il mio stesso problema e che ha un pò di tempo per leggere tutto il tema che ho scritto per cercare di spiegare al meglio il problema.

    Sto progettando un SW su DB Access 97 che lavorerà in multitasking e in multiutenza in una rete.

    dato che vb fa schifo a gestire i db in rete (colpa anche di ACCESS), ho pensato di fare tutto a mano da solo direttamente dal codice.

    I database (che sono inizialmente 3 di cui 1 a generazione dinamica (quando si verificheranno determinate condizioni diventeranno 4, poi 5, poi n) vengono gestiti sempre attraverso le transazioni.

    :quote:

    Addirittura sono riuscito, quando lavoro su tabelle di tipo padre figlio (1->N) sulle quali l'utente lavora contemporaneamente, ad intercettare la transazione già aperta sul padre di modo che al primo errore generato o sul figlio o sul padre i dati fisicamente presenti sul db non vengono danneggiati.

    :quote:

    Quindi do una commit solo quando l'utente decide di salvare il padre. Di conseguenza anche il figlio sarà aggiornato nello stesso momento.

    Se sto modificando un record di una tabella senza relazioni, prima di dare la commit, apro un altra query indipendente dalla transazione e verifico che il record in questione non sia stato cancellato da altri utenti. Se un altro utente lo ha cancellato, chiedo all'utente se lo vuole reinserire come lui lo ha modificato.

    :quote:

    a livello di programmazione quindi ho una funzione che ritorna un valore booleano e che ha come parametri la stringa di connessione dell' adodb.connection,il nome della tabella da verificare e la chiave primaria del record in questione.
    AL suo interno apro la nuova connessione e un nuovo recordset con sql=select count(*) from [nome tabella] where [chiave].
    se count(*)>0 allora la funzione ritornerà True.
    e fin qui tutto bene.

    :quote:

    Se invece lavoro in una situazione padre figlio..... allora le cose cambiano:

    :master:

    Innanzitutto il controllo dovrà essere effettuato solo prima di effettuare la commit finale.
    Il problema è che, invece di dover controllare un singolo record, dovrò verificare un'intera tabella.
    Naturalmente è da escludere una select che esegue la differenza tra tabelle, in quanto le due tabelle sulle quali eseguo il confronto sono posizionate su due aree di memoria (RAM) differenti ed indipendenti quindi un istruzione sql non le vede contemporaneamente e di conseguenza devo intercettarle separatamente su due recordset differenti.
    Qualcuno avrà già pensato: "UN CICLO NO?" la risposta è no, perché sfido qualsiasi utente ad aspettare l'esito di un ciclo di 5-6-7 mila record su access, non gli passa mai.
    Non chiedetemi di cambiare database perché il programma ha un costo che se metto qualcosa di + potente il costo viene triplicato (che ne so....potevo mettere ORACLE o PostgreSQL o SQL server).

    Quindi le soluzioni che ho in mente sono due:

    1) verifico i due recordset come se fossero due variabili (ma if adors=adors2 ovviamente non funziona e non ho la + pallida idea di come fare in alternativa).



    2) collego le due aree di memoria in RAM (le connessioni ado) per permettere all'SQL di lavorare contemporaneamente sulle 2 tabelle (anche qui non so come riuscirci).

    Se qualcuno sa dirmi come eseguire la prima soluzione (confrontare due oggetti recordset come fossero variabili) o la seconda (collegare due connessioni ado per far vedere il contenuto della prima alla seconda) vi prego di farmelo sapere.

    Qualsiasi altra idea per risolvere questo problema sono ben accette. Tengo tuttavia presente che le transazioni, la gestione contemporanea delle tabelle padre figlio, il tipo di database e la relativa struttura non possono essere modificati.

    Anche qualsiasi genere di commento in questione può essermi di aiuto.

    Grazie.


  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    327
    Beh non ho capito molto ma se posso farti una critica il progetto mi sembra strutturato male.

    Per confrontare due recordset puoi controllarli campo per campo.


    codice:
    dim Diversi as boolean
    
    diversi=false
    
    for ind=0 to record1.fileds.count-1
      if record1(ind)<>record2(ind) thne
        diversi=true
        exit For
      end if
    next

  3. #3
    Membro Junior
    Registrato dal
    Oct 2002
    Messaggi
    23

    campo x campo?

    e te faresti scorrere campo x campo un recordset di 6000 record x 10 campi ciascuno?
    l'utente preme salva, poi esce va a cena fuori, torna e il salva non è stato ancora effettuato.......
    Comunque ti ringrazio ma ho già fatto tutto, ci sono già riuscito.

  4. #4
    Membro Junior
    Registrato dal
    Oct 2002
    Messaggi
    23

    vuoi sapere come?

    butto il recordset su una stringa e su un file txt, confronto la stringa con quella creata direttamente dal db.

    Se le stringhe sono diverse apro il recordset dal file txt e recupero i dati.......

    così ho risolto il problema ed è circa l'85% + veloce che scorrere tutto il recordset (senza contare il campo x campo).

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    327
    Ah pensavo fosse un recordset con un singolo record, scusa.

  6. #6
    Utente di HTML.it L'avatar di sebamix
    Registrato dal
    Aug 2000
    Messaggi
    1,028
    A parte che come ddies non ho capito quasi nulla della struttura del programma...

    Il tuo problema (era) il fatto di non riuscire a confrontare due recordset di due db differenti???

  7. #7
    Membro Junior
    Registrato dal
    Oct 2002
    Messaggi
    23
    già, ma su delle transazioni differenti da db a db.

    Comunque ho risolto......

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.