Помогите разобраться

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Алексей К.
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 12.05.2004 (Ср) 9:41
Откуда: Ульяновск

Помогите разобраться

Сообщение Алексей К. » 17.02.2005 (Чт) 14:25

Записываю структуру папок диска в ацевскую базу для последующего построения дерева по сведениям из базы (таблица каталоги - структура папок, в таблице файлы - список файлов).
Код: Выделить всё
Private Sub Структуру_в_базу(path As String, Optional where As Node)
DoEvents
ключ = ключ + 1
База = App.path + "\" + имя_базы + ".mdb"
таблица = "каталоги"
Dim ndx As Node
Set db = OpenDatabase(База, False)
Set rs = db.OpenRecordset(таблица)
Set fso = CreateObject("Scripting.FileSystemObject")
Set fsl = fso.getfolder(path & "\")
For Each fsl1 In fsl.SubFolders
    If where Is Nothing Then Set ndx = TreeView1.Nodes.Add(, tvwChild, ключ & "key ", fsl1.Name, 1, 3) Else Set ndx = TreeView1.Nodes.Add(where.Key, tvwChild, ключ & "key", fsl1.Name, 1, 3): ndx.EnsureVisible
    rs.AddNew
    If where Is Nothing Then
            rs.Fields("имя") = ndx.Text
            rs.Fields("ключ") = ndx.Key
            rs.Fields("родитель") = "корень"
            rs.Fields("счетчик") = ключ
            Else
            rs.Fields("имя") = ndx.Text
            rs.Fields("ключ") = ndx.Key
            rs.Fields("родитель") = where.Key
            rs.Fields("счетчик") = ключ
        End If
    rs.Update
    If fso.getfolder(fsl1.path).Files.Count <> 0 Then Call файл_в_базу(fsl1.Name, fsl1.path) 'сколько файлов в папке
    Call Структуру_в_базу(path & "\" & fsl1.Name, ndx)
Next fsl1
errhdl:
Select Case Err.Number
Case 76: MsgBox "Cannot read the drive ", vbCritical Or vbOKOnly, "Test"
End Select
Exit Sub

Call Структуру_в_базу(path & "\" & fsl1.Name, ndx) - записывает имена файлов текущей папки в базу. (таблица "файлы") .
Базу создаю так:
Код: Выделить всё
Private Sub создать_базу(имя_базы)
Kill App.path + "\" + имя_базы + ".mdb"
Set db = CreateDatabase(App.path + "\" + имя_базы + ".mdb", dbLangGeneral)
'-----------------таблица "каталоги"
Set td = db.CreateTableDef("каталоги")
Set fd = td.CreateField("имя", dbText, 255)
td.Fields.Append fd
Set fd = td.CreateField("ключ", dbText, 255)
td.Fields.Append fd
Set fd = td.CreateField("родитель", dbText, 255)
td.Fields.Append fd
Set fd = td.CreateField("счетчик", dbText, 255)
td.Fields.Append fd
db.TableDefs.Append td
'-----------------таблица "файлы"
Set td2 = db.CreateTableDef("файлы")
Set fd2 = td2.CreateField("имя", dbText, 255)
td2.Fields.Append fd2
Set fd2 = td2.CreateField("папка", dbText, 255)
td2.Fields.Append fd2
db.TableDefs.Append td2
db.Close
End Sub

Так вот врезультате, когда смотрю созданную базу в аце: записи в столбцах идут неподряд (отслеживаю по полю "счетчик")- сначала с 1 по 130, потом сразу 188-236, и только потом 131-187 и т.д.
Из-за чего так происходит, как-будто пересортировывается все.
Как сделать чтобы записи повозрастанию шли (а то при построении дерева не может найти родительский узел)Помогите!!!

Костя
Обычный пользователь
Обычный пользователь
 
Сообщения: 93
Зарегистрирован: 14.02.2005 (Пн) 6:45
Откуда: Новосибирск

Сообщение Костя » 17.02.2005 (Чт) 14:38

В ADO это делается следующим образом:
db.sort = "[счетчик]"
Всё бывает!

Алексей К.
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 12.05.2004 (Ср) 9:41
Откуда: Ульяновск

Сообщение Алексей К. » 17.02.2005 (Чт) 14:41

А как это реализовать через DAO?

Алексей К.
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 12.05.2004 (Ср) 9:41
Откуда: Ульяновск

Сообщение Алексей К. » 18.02.2005 (Пт) 9:49

Проблема решена, помогло введение в таблицу поля-счетчика (Long, autoincrfield) плюс сортировка при открытии:
Вариант сортировки (DAO)
Код: Выделить всё
запрос = "SELECT * FROM каталоги ORDER BY счетчик;"
Set rs = db.OpenRecordset(запрос)


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 86

    TopList