Jag har en kodifiera [att fästas] som tar två bordlägger i sänder från databaser för en ta fram, jämför värderar för varje ror, och kolonnen och, om den finner några skillnader, den anmäler till user. Unfortunately som den blir långsammare, och långsammare, som databasen grow.
I önskar egentligen den, fasta och mig vet inte vad för att göra. bör jag, använder dragning. Jag har fäst allmänheten för code
Anthony
fungerar showDifferences (ByVal ds som stränger, ByVal co som System.Data.OleDb.OleDbConnection) som Boolean dunkelt z som Integer dunkelt v, p, vname som String
z- = för 0
showDifferences = False 'där är flera bordlägger och väljer en på ett time- dem är i bordläggatblRecords 'jämför e.g. värderar bordlägger in [styra], mot de bordlägger in [
för vmaster] för t som Long = 0 till tblRecords.Rows.Count - för 1 Application.DoEvents () ”uteslutar dessa tables om sectionsToEculude (tblRecords. Columns (”recname" ) .ColumnName) = True fortsätter därefter For om klippning (mainver). Längden = 0 Then tstr = ”VÄLJER * FRÅN [” & tblRecords.Rows (t) (”recname”) &”] ”& tstr för ds Else = ”VÄLJER * FRÅN [” & mainver & tblRecords.Rows (t) (”recname”) &”] ”, & ds avslutar If
cm = ny OleDb.OleDbCommand cm.CommandText = tstr cm. Anslutnings- = för co dr = cm.ExecuteReader , om dr.HasRows Then fördriver dren. Read kriterier = "" tankeskapelse för ”sql-kriterierna för varje mitt-, kriterier = klippning för table ((ds, 1, ds. Längd - 1)) &” och ” för I som Int16 = 1 till för tblRecords.Rows (t) (”nid”), om inte IsDBNull (dren (tblRecords.Rows (t) (”ID” & (I - 1) .ToString))) Then , om inte IsNumeric (dren (tblRecords.Rows (t) (”ID-" & (I - 1) .ToString))) Then kriterier = kriterier & tblRecords.Rows (t) (”ID” & I - 1) & ”=”” & dren (tblRecords.Rows (t) (”ID-" & (I - 1) .ToString)) &”” och ”kriterier för Else = kriterier & tblRecords.Rows (t) (”ID” & I - 1) & ”=” & dren (tblRecords.Rows (t) (”ID " & (I - 1) .ToString)) &” och ” avslutar If Else kriterier = kriterier, & tblRecords.Rows (t) (”ID” & I - 1) &” är ogiltigt, och ” avslutar If Next kriterier = mitt- (kriterier, 1, kriterier. Längd - 5)
om klippning (mainver). Längden = 0 Then tstr = ”VÄLJER * FRÅN [v” & tblRecords.Rows (t) (”recname”) &”] ”& kriterier &”; ”tstr för Else = ”VÄLJER * FRÅN [” & tblRecords.Rows (t) (”recname”) &”] ”& kriterier &”; ” avslutar If
, 'nu som jag har det hela SQL-meddelandet och kriterierna som fästas till cmd för it.
= ny OleDb.OleDbCommand cmd.CommandText = cmd för tstr . Anslutning = co
ddr = cmd.ExecuteReader , om tblRecords.Rows (t) (”recname”) = ”ledar-” därefter recordExists = den falska 'inte i avläsaren för verification '[dr] är hållande, värderar för bordlägger [styra], , 'avläsaren [ddr] är som hållande värderar för bordlägger [vmaster] for example
om recordExists för ddr.HasRows Then = dup2.Clear för True 'kontrollduplicates dup1.Clear () () -/>stunder ddr. Read 'jämför sätter in värderar sätter in by värderar för rapporten för true för ', om någon är olik [showDifferences] är 'för f som Int16 = idNames.Count till dr.FieldCount - vname för 1 = för dr.GetName (f), om IsDBNull (dr (f)) Därefter: v = ingenting: Annars: v = klippning (dr (f)) : Avsluta If , om IsDBNull (ddr (vname)) Därefter: p = ingenting: Annars: p = klippning (ddr (vname)) : Avsluta If om inte variablesToExclude (vname) Then om showDifferences för v-<> p Then = True ddr. Nära () ddr = Nothing cmd. Ordna () går ut Function avslutar If avslutar If Next avslutar While
Else 'berättar användaren, om rekordet inte finnas i [ för vmaster], om tblRecords.Rows (t) (”recname”) = ”ledar-” därefter recordExists = False avslutar If ddr. Nära () ddr = Nothing cmd. Ordna () för Application.DoEvents () avslutar While
avslutar den If dren. Nära () dr för = Nothing cm. Ordna () cmd för Next . Ordna () avslutar Function
" klar "
|