Questione : aumentare la prestazione di accesso di base di dati - ms-access

Faccio [allegare] un codice che prende due tabelle alla volta dalle basi di dati di accesso, confronto i valori per ogni fila e colonna e se trova qualunque differenze che segnala al user.

Unfortunately diventa più lento e più lento mentre la base di dati grow.

I realmente lo vuole velocemente e non conosco che cosa fare. se usano la filettatura. Ho attaccato il code

Anthony

che gli showDifferences pubblici di funzione (ByVal ds come stringa, ByVal co come System.Data.OleDb.OleDbConnection) come Boolean
oscurano la z come Integer
v fioca, p, il vname come String

showDifferences di 0

= False
'là è parecchie tabelle e seleziona uno ad un time- è nel tblRecords
della tabella 'per esempio compara i valori in tabella [padrone] a quelli nel

della tabella [vmaster] per la t come lungamente = 0 a tblRecords.Rows.Count - il
di 1
Application.DoEvents () “esclude questo il tables
se sectionsToEculude (tblRecords. Columns (“recname" il ) .ColumnName) = allinea allora continua For
se la disposizione (mainver). La lunghezza = 0 tstr di Then
= “SELEZIONA * A PARTIRE [„ & tblRecords.Rows (t) (“recname„) &„] “& il tstr del ds
Else
= “SELEZIONA * A PARTIRE [„ & mainver & tblRecords.Rows (t) (“recname„) &„] “& estremità If

del ds
cm = nuovo OleDb.OleDbCommand
cm.CommandText = tstr
cm. Dott. del co
= cm.ExecuteReader
se dr.HasRows Then
mentre Dott. Test di verifica di Read
= "" costruzione del
“i test di verifica di sql per ogni i test di verifica = la disposizione del table
(metà di (ds, 1, ds. Lunghezza - 1)) &„ e “
per la i come Int16 = 1 a tblRecords.Rows (t) (“nid„)
se non IsDBNull (Dott. (tblRecords.Rows (t) (“identificazione„ & (i - 1).ToString))) Then
se non IsNumeric (Dott. (tblRecords.Rows (t) ( “di identificazione " & (i - 1).ToString))) Test di verifica di Then
= test di verifica & tblRecords.Rows (t) (“identificazione„ & i - 1) & “=„„ & Dott. (tblRecords.Rows (t) ( “di identificazione " & (i - 1).ToString)) &„„ e “test di verifica del
Else
= test di verifica & tblRecords.Rows (t) (“identificazione„ & i - 1) & “=„ & Dott. (tblRecords.Rows (t) (“identificazione " & (i - 1).ToString)) &„ e “test di verifica di If
Else
di conclusione del
= test di verifica & tblRecords.Rows (t) (“identificazione„ & i - 1) &„ è test di verifica del
di conclusione di If
Next
= metà di (test di verifica, 1, test di verifica. Lunghezza - 5)

se disposizione (mainver). La lunghezza = 0 tstr di Then
= “SELEZIONA * A PARTIRE [v„ & tblRecords.Rows (t) (“recname„) &„] “& test di verifica &„; “il tstr del
Else
= “SELEZIONA * A PARTIRE [„ & tblRecords.Rows (t) (“recname„) &„] “& test di verifica &„; “estremità If

del
'ora ho l'intera dichiarazione di SQL ed i test di verifica allegati al cmd di it.

= nuovo OleDb.OleDbCommand
cmd.CommandText = cmd del tstr
. Il collegamento = il co

la RDT = cmd.ExecuteReader
se tblRecords.Rows (t) (“recname„) = i recordExists “del padrone„ allora = 'non il lettore falso del verification
'[Dott.] è i valori della tenuta per il
del
dup2.Clear del duplicates
dup1.Clear del controllo del
'lettore [RDT] è i valori della tenuta per il

della tabella [vmaster] per esempio se recordExists di ddr.HasRows Then
= True
'della tabella () ()                        Mentre la RDT. Read
'confronta il valore del campo dal
di rapporto del true
del
di valore del campo 'se c'è ne è differente [showDifferences] è 'per la f come Int16 = idNames.Count a dr.FieldCount - vname di 1
= dr.GetName (f)
se IsDBNull (Dott. (f)) allora: v = niente: Altrimenti: v = disposizione (Dott. (f)): Estremità If
se IsDBNull (RDT (vname)) Allora: p = niente: Altrimenti: p = disposizione (RDT (vname)) : variablesToExclude di If
di conclusione se non (vname) Then
se showDifferences del <> p Then
di v = True
RDT. Chiudere () il
la RDT = cmd di Nothing
. Disporre () l'estremità While

Else
di If
Next
di conclusione di If
di conclusione di Function
dell'uscita del
'dicono ad utente se l'annotazione non è trovata nel
[del vmaster] se tblRecords.Rows (t) (“recname„) = recordExists “del padrone„ allora = estremità If
RDT di False
. Chiudere () il
la RDT = cmd di Nothing
. Disporre () l'estremità di While

di conclusione del
del
Application.DoEvents () Dott. di If
. Chiudere () il Dott. del
= Nothing
cm. Disporre () il cmd del
Next
. Disporre () l'estremità Function
del
class= del

Risposta : aumentare la prestazione di accesso di base di dati - ms-access

Aaaaahh… giusto il problema è che non dovete fornire l'elemento di dati… tutto che facciate siate al procide il nome della funzione.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:

	
		
	
	
		
	
	
	
	
	
	
		
			
		
	


Altre soluzioni  
 
programming4us programming4us