используйте этот код
$(document).ready(function() {
$('.category>div' ).on('click', function(){
$('.wrapper').toggle();
})
});
и добавьте этот CSS, чтобы скрыть div в начале
.wrapper{
display:none
}
Я сделал такого рода вещь в коде многие, много раз, главным образом в случаях, где локальный MDB должен был иметь обновления, относился к оттянутому из данных, ввел в веб-сайт. В одном случае веб-сайт управлялся MDB в других, это была база данных MySQL. Для MDB мы просто загрузили его для MySQL, мы запустили скрипты на веб-сайте для экспорта и текстовые файлы FTP.
Теперь, основной момент - то, что мы хотели сравнить данные в локальном MDB к данным, загруженным с веб-сайта и обновить локальный MDB для отражения изменений, внесенных на веб-сайте (не, не было возможно использовать единственный источник данных - это была первая вещь, которую я предложил, но это не было выполнимо).
Давайте назовем MDB Вашей локальной базой данных и MDB B тот, который Вы загружаете для сравнения. То, на что необходимо проверить:
записи, которые существуют в MDB A, но не в MDB B. Они могут или не могут быть кандидатами на удаление (это будет зависеть от Ваших конкретных данных).
записи, которые существуют в MDB B, но не в MDB A. Они Вы добавите от MDB B к MDB A.
записи, которые существуют в обоих, которые должны будут быть сравненным полем полем.
Шаги № 1 и № 2 довольно легко выполняются с запросами, которые используют внешнее объединение для нахождения недостающих записей. Шаг 3 требует некоторого кода.
Принцип позади кода - то, что структура всех таблиц в обоих MDBs идентична. Так, Вы применяете ДАО, чтобы обойти набор TableDefs, открыть recordset и обойти полевой набор для выполнения SQL-оператора на каждом столбце каждой таблицы, которая или обновляет данные или производит список различий.
Базовая структура позади кода:
Set rs = db.OpenRecordset("[SQL statement with the fields you want compared]")
For Each fld In rs.Fields
' Write a SQL string to update all the records in this column
' where the data doesn't match
strSQL = "[constructed SQL here]"
db.Execute strSQL, dbFailOnError
Next fld
Теперь, главная сложность здесь - то, что Ваш оператор Where для каждого поля должен отличаться - текстовые поля нужно рассматривать по-другому по сравнению с числовыми и полями данных. Таким образом, Вы, вероятно, захотите ИЗБРАННЫЙ СЛУЧАЙ, который пишет Ваш оператор Where на основе типа поля:
Select Case fld.Type
Case dbText, dbMemo
Case Else
End Select
Вы захотите использовать Nz () для сравнения текстовых полей, но Вы использовали бы Nz (TextField'') для этого, при использовании Nz (NumericField, 0) для числовых полей или полей даты.
Мой пример кода на самом деле не использует структуру выше для определения оператора Where, потому что это ограничено полями, которые работают, очень хорошо выдерживая сравнение связанный с ZLS (текстовые поля). То, что ниже, довольно сложно для прочтения, но это - в основном расширение на вышеупомянутой структуре.
Это было записано для эффективности обновлений, так как это выполняет ОБНОВЛЕНИЕ SQL для каждого поля таблицы, которая намного более эффективна, чем выполнение ОБНОВЛЕНИЯ SQL для каждой строки. Если с другой стороны, Вы не хотите делать обновление, но хотеть список различий, Вы могли бы рассматривать все это по-другому. Но это становится довольно сложным в зависимости от вывода,
Если все, что Вы хотите знать, - то, если бы два MDBs идентичны, Вы сначала проверили бы количество записей в каждой таблице сначала, и если у Вас есть одно несоответствие, Вы выходите и говорите пользователю, что MDBs не являются тем же. Если recordcounts являются тем же, то необходимо проверить поле полем, которому я верю, лучше всего выполняется со столбцом столбцом SQL, записанный динамично - как только один из получающегося SQL ВЫБИРАЕТ возвраты 1 или более записей, Вы прерываете и говорите Вашему пользователю, что MDBs не идентичны.
Сложная часть - то, если бы Вы хотите записать различия и сообщить пользователю, но вход, который сделал бы это уже бесконечное сообщение еще дольше!
То, что следует, является просто частью кода от большей подпрограммы, которая обновляет сохраненный запрос qdfOldMembers (от MDB A) с данными из qdfNewMembers (от MDB B). Первым аргументом, strSQL, является оператор SELECT, который ограничен полями, которые Вы хотите сравнить, в то время как strTmpDB является путем/именем файла другого MDB (MDB B в нашем примере). Код предполагает, что strTmpDB имеет qdfNewMembers, и qdfOldMembers уже создал (исходный код пишет сохраненный QueryDef на лету). Это могли так же, как легко быть прямые имена таблиц (единственная причина, я использую сохраненный запрос, то, потому что имена полей не соответствуют точно между двумя MDBs, которые это было записано для).
Public Sub ImportMembers(strSQL As String, strTmpDB As String)
Const STR_QUOTE = """"
Dim db As Database
Dim rsSource As Recordset '
Dim fld As Field
Dim strUpdateField As String
Dim strZLS As String
Dim strSet As String
Dim strWhere As String
' EXTENSIVE CODE LEFT OUT HERE
Set db = Application.DBEngine(0).OpenDatabase(strTmpDB)
' UPDATE EXISTING RECORDS
Set rsSource = db.OpenRecordset(strSQL)
strSQL = "UPDATE qdfNewMembers INNER JOIN qdfOldMembers ON "
strSQL = strSQL & "qdfNewMembers.EntityID = qdfOldMembers.EntityID IN '" _
& strTmpDB & "'"
If rsSource.RecordCount <> 0 Then
For Each fld In rsSource.Fields
strUpdateField = fld.Name
'Debug.Print strUpdateField
If InStr(strUpdateField, "ID") = 0 Then
If fld.Type = dbText Then
strZLS = " & ''"
Else
strZLS = vbNullString
End If
strSet = " SET qdfOldMembers." & strUpdateField _
& " = varZLStoNull(qdfNewMembers." & strUpdateField & ")"
strWhere = " WHERE " & "qdfOldMembers." & strUpdateField & strZLS _
& "<>" & "qdfNewMembers." & strUpdateField & strZLS _
& " OR (IsNull(qdfOldMembers." & strUpdateField _
& ")<>IsNull(varZLStoNull(qdfNewMembers." _
& strUpdateField & ")));"
db.Execute strSQL & strSet & strWhere, dbFailOnError
'Debug.Print strSQL & strSet & strWhere
End If
Next fld
End If
End Sub
Код для функции varZLSToNull ():
Public Function varZLStoNull(varInput As Variant) As Variant
If Len(varInput) = 0 Then
varZLStoNull = Null
Else
varZLStoNull = varInput
End If
End Function
Я не знаю, слишком ли это сложно, чтобы иметь смысл, но возможно он поможет кому-то.
Возьмите текстовые дампы таблиц базы данных и просто сравните выведенное использование текстовых файлов BeyondCompare (или любой другой текстовый инструмент сравнения). Сырая нефть, но может работать!
У меня есть очень хороший опыт с Компаратором перекрестной Базы данных. Это может сравнить структуру и/или данные.
Если Вы хотите знать, идентичны ли файлы затем
fc file1.mdb file2.mdb
на строке команды DOS.
Если бы файлы не идентичны, но Вы подозреваете, что они содержат те же таблицы, и записывает затем самый легкий путь, была бы быстро запись маленькая утилита, которая открывает и базы данных и циклы через таблицы обоих выполнения неоднородного запроса для извлечения Разности между этими двумя файлами.
Существуют некоторые инструменты там, которые сделают это для Вас, но они все, кажется, условно-бесплатное программное обеспечение.
См. Раздел «Сравнить базы данных Access» на сторонних утилитах, продуктах, инструментах, модулях и т. Д. Microsoft Access на моем сайте.