Помогите разобраться с чтением записей типизованных файлов

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Помогите разобраться с чтением записей типизованных файлов

Сообщение Ruslan Demidow » 15.04.2004 (Чт) 17:03

Подскажите, плиз, чайнику. :)
имеется файл (типизованный). В нем находятся записи (все одинаковой длины). Длина известна 562 байта.
Записи содержат в себе поля с данными разных типов.
Тип такой:
Public Type AreaRecord
Index As Long
StructLen As Long
Stattus As Long
Description As String * 129
Echotag As String * 101
Filename As String * 128
LastRead As Long
Hheader As Long
Hmessage As Long
AKA As String * 21
Uplink As String * 31
Group As String * 11
PurgeAgeCreate As Integer
PurgeAgeRecipt As Integer
PurgeMaxNum As Integer
PurgeFlagCreate As Integer
PurgeFlagAgeRecipt As Integer
PurgeFlagNrmails As Integer
NumberOfMails As Integer
NumberOfAlreadyRead As Integer
LocalMail As Long
AdditionalDays As Integer
AreaCreationDate As Long
NoName As String * 68
NextAreaIndex As Long
End Type
С описанием разобрались. Теперь я хочу открыть этот файл на чтение и загнать эти записи в массив.
Массив я объявляю так:
arrAreas() as AreaRecord
Объявляю промежуточную переменную
AreaRec as AreaRecord
Объявляю переменные
RecNum, i as Integer
AreasFile, fil as Variant
После получения доступа к файлу, я узнаю его размер и делю его на 562.
Таким образом я узнаю сколько записей в файле.
Переопределяю размер массива и открываю файл на чтение

AreasFile = FreeFile
Set fil = fso.GetFile("C:\user\work\msgbase\areas.wwd")
RecNum = fil.Size / 562
ReDim arrAreas(RecNum)
Open fil For Random As #AreasFile Len = 562
For i = 1 To RecNum
Get #AreasFile,i, AreaRec
arrAreas(i) = AreaRec
'Я загоняю поля Echotag записей в комбобокс
ConfList.AddItem AreaRec.Echotag
Next
После этого я могу обращаться к элементам массива.
и при выборе из списка вывожу соответствующие данные на форму
Но...
при выводе данных на форму в Label'ы поля типа String выводятся нормально. А вот вместо данных содержащихся в полях других типов (Long, Integer) я вижу одни нули.
Подскажите плиз, что я не правильно делаю? :cry:

Ilya Vasilyev
Постоялец
Постоялец
 
Сообщения: 820
Зарегистрирован: 06.08.2002 (Вт) 5:36
Откуда: Russia, Omsk

Сообщение Ilya Vasilyev » 16.04.2004 (Пт) 7:54

1. Замечание:
Объявляю переменные
Код: Выделить всё
RecNum, i as Integer
AreasFile, fil as Variant


Здесь RecNum и AreasFile объявлены как Variant, надо так
Код: Выделить всё
RecNum as Integer, i as Integer
AreasFile as Variant, fil as Variant


2. Приведи код - как ты выводить значения числовых переменных
Изображение
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Сообщение Vi » 16.04.2004 (Пт) 12:17

В нем находятся записи (все одинаковой длины). Длина известна 562 байта.

Поставь-ка такой код:
Код: Выделить всё
  Debug.Print Len(AreaRec)

У меня получается 543, а не 562. Что, структура не такая?
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 16.04.2004 (Пт) 13:30

Ilya Vasilyev писал(а):2. Приведи код - как ты выводить значения числовых переменных[/b]


Private Sub ConfList_Click()
Dim CurrentArea As AreaRecord
Dim intIndexArea As Integer
intIndexArea = ConfList.ListIndex + 1
lblBodyText.Caption = "Имя конференции: " & Trim(arrAreas(intIndexArea).Echotag)
Label2.Caption = "Описание: " & Trim(arrAreas(intIndexArea).Description)
Label3.Caption = "Количество писем :" & arrAreas(intIndexArea).NumberOfMails
Label4.Caption = "Имя файла заголовков :" & Trim(arrAreas(intIndexArea).Filename)
End Sub

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 16.04.2004 (Пт) 13:50

Vi писал(а):
В нем находятся записи (все одинаковой длины). Длина известна 562 байта.

Поставь-ка такой код:
Код: Выделить всё
  Debug.Print Len(AreaRec)

У меня получается 543, а не 562. Что, структура не такая?


Вот как описан формат данного файла
===== Begin clipboard ================
Файл такого формата представлен в виде массива структур. Каждая структура имеет длину 562 байта.
Тип поля =|= Смещение поля от начала структуры =|= Длина поля,байт =|= Мнемоническое имя поля =|= Краткое описание поля
Long |0 | 4 | Index | Порядковый номер области в списке (уникален)
Long | 4 | 4 | StructLen | Длина структуры (в настоящей версии должно быть равно 562 (десятичное)
Long | 8 | 4 | Status | Информация об области (статус)
129 char | 12 | 129 | Description | Описание области
101 char | 141 | 101 | Echotag | Название области
128 char | 242 | 128 | Filename | Имя файла без расширения файлов заголовка и базы писем описываем области
Long | 370 | 4 | LastRead | Номер последнего прочитанного письма в области
Hadle | 374 | 4 | Hheader | Указатель на файл заголовков (используется во время работы программы)
Handle | 378 | 4 | Hmessage | Указатель на файл базы писем (используется во время работы программы)
21 char | 382 | 21 | Aka | Ваш АКА для этой области
31 char | 403 | 31 | Uplink | Ваш аплинк для этой области
11 char | 434 | 11 | Group | Группа, к которой относится эта область
Int | 445 | 4 | PurgeAgeCreate | Данные, используемые пуржером при работе
Int | 449 | 4 | PurgeAgeRecipt
Int | 453 | 4 | PurgeMaxNum
Int | 457 | 4 | PurgeFlagCreate
Int | 461 | 4 | PurgeFlagAgeRecipt
Int | 465 | 4 | PurgeFlagNrmails
Int | 469 | 4 | NumberOfMails | Число сообщений в базе писем этой области
Int | 473 | 4 | NumberOfAlreadyRead | Число уже прочитанных сообщений
Long | 477 | 4 | LocalMail | Флаг неэкспортируемой области
Int | 481 | 4 | AdditionalDays | Дополнительное число дней для непрочитанных писем, используемое пуржером для автоматической чистки базы
Long | 485 | 4 | AreaCreationDate | Дата создания области
| 489 | 68 | - | Внутренние неспользуемые данные
Long | 562 | 4 | Index | Порядковый номер следующей области в списке (уникален)
========= End Clipboard ==========

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Сообщение Vi » 16.04.2004 (Пт) 15:30

Те поля, которые Integer, имеют размер не 4, а 2. Их нужно сделать как Long.

PS
VB-шный Integer соотвествуют C-шному short int.
VB-шный Long - C-шному int или long int.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 16.04.2004 (Пт) 15:52

Vi писал(а):Те поля, которые Integer, имеют размер не 4, а 2. Их нужно сделать как Long.

PS
VB-шный Integer соотвествуют C-шному short int.
VB-шный Long - C-шному int или long int.


В тексте описания написано следующее:
Для описания форматов буду использовать обозначения, принятые в языке программирования С/С++.
Long – целое 4-х байтное число.

Скорей всего вот это меня и сбило с толку.
Т.е. чтобы получить данные описанные как Long мне надо что?...
В определении типа переменной AreaRec все типы полей Integer поменять на Long. Чтобы получать их уже явно как Long?
Я правильно понял? Или опять туплю? :?

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Сообщение Vi » 16.04.2004 (Пт) 16:16

В определении типа переменной AreaRec все типы полей Integer поменять на Long. Чтобы получать их уже явно как Long?

Да.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 16.04.2004 (Пт) 16:27

Vi писал(а):
В определении типа переменной AreaRec все типы полей Integer поменять на Long. Чтобы получать их уже явно как Long?

Да.


Сделал.
И всё равно.
Делаю так:
Label3.Caption = arrAreas(intIndexArea).NumberOfMails
Выводит 0.
Делаю:
Label3.Caption = CInt(arrAreas(intIndexArea).NumberOfMails)
Тоже выводит 0.
=====================
Вот новый тип записи:
Public Type AreaRecord
Index As Long
StructLen As Long
Stattus As Long
Description As String * 129
Echotag As String * 101
Filename As String * 128
LastRead As Long
Hheader As Long
Hmessage As Long
AKA As String * 21
Uplink As String * 31
Group As String * 11
PurgeAgeCreate As Long
PurgeAgeRecipt As Long
PurgeMaxNum As Long
PurgeFlagCreate As Long
PurgeFlagAgeRecipt As Long
PurgeFlagNrmails As Long
NumberOfMails As Long
NumberOfAlreadyRead As Long
LocalMail As Long
AdditionalDays As Long
AreaCreationDate As Long
NoName As String * 68
NextAreaIndex As Long
End Type

Хотя стринговые поля получаю полностью, без потерь и перекосов.

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 19.04.2004 (Пн) 12:20

Ну так что, никто не поможет? Не объяснит мне?
Неужели так трудно дать пояснение? Или советы кончились?
Было бы у меня описание структуры файла на VB - я бы не спрашивал... :(

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Сообщение Vi » 19.04.2004 (Пн) 14:01

После того, как ты заменил Integer на Long, все должно было бы получиться. Если не получается, то показывай полностью код работы с файлом. Да и файл сам не помешал бы.

Есть, правда, нестыковочка. Len(AreaRec) равна 561, а не 562. Т.е. не хватает байта. Может, поле какое пропустил?
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 19.04.2004 (Пн) 14:30

Ок.
На форме только кнопка LoadAreas, Комбобокс ConfList и четыре лабела Label1, Label2, Label3, Label4

Код: Выделить всё
Модуль1.bas
===========================================================
Public Type SabjRecord
     Name As String * 72 'Тема письма
    DateTime As String * 20 'Время и дата
    ToName As String * 36 'Кому
    FromName As String * 36 'От кого
    StrucLen As Long 'размер структуры файла
    Status As Long ' статус письма
    MailID As Long ' идентификатор письма
    ReciptTime As Long 'дата и время тоссинга
    Offset As Long 'Смещение  первого символа текста
    TextLen As Long 'Длина текста
    Index As Long 'Порядковый номер письма
    Filler As Single '
    Attrib As Single
    Cost As Single
    OrigZone As Single
    OrigNet As Single
    OrigNode As Single
    OrigPoint As Single
    DestZone As Single
    DestNet As Single
    DestNode As Single
    DestPoint As Single
    ReplyID As Long
    NestLevel As Long
    UnixTime As Long
    ZoneNet As Long
    Node As Long
    MailText As Long
End Type

Public Type AreaRecord
    Index As Long
    StructLen As Long 'Длина записи (всегда равна 562)
    Stattus As Long 'Статус области
    Description As String * 129 'Описание области
    Echotag As String * 101 'Название области
    Filename As String * 128 'Имя файла заголовков и писем без расширения
    LastRead As Long 'Индекс последнего прочитанного письма
    Hheader As Long
    Hmessage As Long
    AKA As String * 21 'Aka для данной области
    Uplink As String * 31
    Group As String * 11
    PurgeAgeCreate As Long
    PurgeAgeRecipt As Long
    PurgeMaxNum As Long
    PurgeFlagCreate As Long
    PurgeFlagAgeRecipt As Long
    PurgeFlagNrmails As Long
    NumberOfMails As Long 'Количество писем в области
    NumberOfAlreadyRead As Long
    LocalMail As Long
    AdditionalDays As Long
    AreaCreationDate As Long
    NoName As String * 68
    NextAreaIndex As Long
    'Длина одной записи = 562
End Type

Public Rec As AreaRecord

Option Explicit
================================================================



Модуль формы
================================================================
Dim AreasFile
Private fso As New FileSystemObject
Dim arrAreas() As AreaRecord

Option Explicit

Private Sub ConfList_Click()
    Dim CurrentArea As AreaRecord
    Dim intIndexArea As Integer
    intIndexArea = ConfList.ListIndex + 1
    lblBodyText.Caption = "Имя конференции: " & Trim(arrAreas(intIndexArea).Echotag)
    Label2.Caption = "Описание: " & Trim(arrAreas(intIndexArea).Description)
    Label3.Caption = "Количество писем :" & arrAreas(intIndexArea).NumberOfMails
    Label4.Caption = "Имя файла заголовков :" & Trim(arrAreas(intIndexArea).Filename)
End Sub

Private Sub LoadAreas_Click()
Dim i As Integer
Dim Area As AreaRecord
Dim fil As File
Dim Fnum1, AreasFile
Dim intAreasCount As Integer

    ConfList.Clear
    AreasFile = FreeFile
    Set fil = fso.GetFile("C:\User\Work\msgbase\areas.wwd")
    intAreasCount = Int(fil.Size / 562)
    Open fil For Random As AreasFile Len = 562
ReDim arrAreas(1 To intAreasCount)
    For i = 1 To intAreasCount
        Get AreasFile, i, Rec
        ConfList.AddItem Rec.Echotag
        arrAreas(i) = Rec
    Next
Close AreasFile

End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
     If KeyCode = vbKeyEscape Then
        End
    End If
End Sub


Сам файл (размер в архиве 4.12 кб) лежит вот по этому адресу:

http://r-demidow.front.ru/AREAS.zip

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Сообщение Vi » 19.04.2004 (Пн) 14:53

Судя по файлу, Group As String * 11 должен быть Group As String * 12.

Т.е. проблема не в коде, а в виде записи. Неверный вид - неверный результат.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 19.04.2004 (Пн) 15:11

Vi писал(а):Судя по файлу, Group As String * 11 должен быть Group As String * 12.

Т.е. проблема не в коде, а в виде записи. Неверный вид - неверный результат.


Ок. Спасибо. Погляжу сегодня же.

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 20.04.2004 (Вт) 9:03

Оказывается в описании формата файла пропущено одно поле.
Оно находится в записи после Group As String *11.
Поле называется Membership и имеет тип Long.
С этим разобрался. Всем спасибо.
Но в связи с этим возник ламерский вопрос. :oops:
При выводе на форму в виде CInt(arrAreas(Index).NumberOfMails) имею ошибку переполнение. Что конечно естественно. Как мне получить привычное отображение количество писем?
Может какое-то ещё преобразование нужно сделать?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 20.04.2004 (Вт) 9:47

А зачем long конвертить в integer? Сразу выводи.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 20.04.2004 (Вт) 10:24

Я Long конвертирую в Integer потому, что я знаю, что писем в конференции например 1200 (эту цифру отображает родная программа, которая работает с этой базой), а на форме отображается 58312.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 20.04.2004 (Вт) 10:34

Уууу, батенька...
Так это endianess, что ли, повёрнута задом наперёд?
LOBYTE должен идти первым. Идёт?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 20.04.2004 (Вт) 10:39

GSerg писал(а):Уууу, батенька...
Так это endianess, что ли, повёрнута задом наперёд?
LOBYTE должен идти первым. Идёт?

Простите чайника, плиз. :oops:
Что такое LOBYTE?
Как посмотреть что идёт первым?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 20.04.2004 (Вт) 10:41

В общем, это... Приаттачь файл, содержащий пару целых записей.
И описание того, как они выглядят в исходной программе.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 20.04.2004 (Вт) 11:03

GSerg писал(а):В общем, это... Приаттачь файл, содержащий пару целых записей.
И описание того, как они выглядят в исходной программе.


Файл с записями лежит по адресу
http://r-demidow.front.ru/AREAS.zip

Описание формата по адресу
http://r-demidow.front.ru/BaseFormat.zip

А вот так количество отображается в родной программе
Изображение

Так вот, на той же RU.VISUAL.BASIC.CHAINIK у меня отображает количество 293 888.
Не реально. Там по определению может быть не больше 32 000. Даже столько редко встречается. Хотя может быть.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 20.04.2004 (Вт) 11:40

Имеется ввиду, что байты идут в обратном порядке.
Так NumberOfMails должен быть Long (4 байте) или Integer (2 байта)?

[EDIT]
Ясно, Long.
Так вот тебе надо просто "перевернуть" байты. Самое простое - объявить не
Код: Выделить всё
...
NumberOfMails As Long
...

а
Код: Выделить всё
...
NOM1 As Byte
NOM2 As Byte
NOM3 As Byte
NOM4 As Byte
...

или
Код: Выделить всё
...
NumberOfMails(0 To 3) As Byte
...


Тогда количество будет считаться, как NOM1+NOM2*256+NOM3*65536+NOM4*16... (или наоборот :) )

Можно поступить по другому - считывать в Long и "переворачивать" сразу после считывания. Тебе понадобяться (для извлечения частей слова) API-функции LoByte/HiByte/LoWord/HiWord. С их помощью извлекаешь значения и "перепаковываешь" обратно.
Последний раз редактировалось alibek 20.04.2004 (Вт) 11:50, всего редактировалось 1 раз.
Lasciate ogni speranza, voi ch'entrate.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 20.04.2004 (Вт) 11:49

Нет, alibek... Там просто 1 байт потерялся в середине, и всё поплыло. Такая вот фигня.

Код: Выделить всё
Option Explicit

Private Type AreaRecord
  Index As Long
  StructLen As Long 'Длина записи (всегда равна 562)
  Stattus As Long 'Статус области
  Description As String * 129 'Описание области
  Echotag As String * 101 'Название области
  Filename As String * 128 'Имя файла заголовков и писем без расширения
  LastRead As Long 'Индекс последнего прочитанного письма
  Hheader As Long
  Hmessage As Long
  AKA As String * 21 'Aka для данной области
  Uplink As String * 31
  Group As String * 12
  Membership As Long
  PurgeAgeCreate As Long
  PurgeAgeRecipt As Long
  PurgeMaxNum As Long
  PurgeFlagCreate As Long
  PurgeFlagAgeRecipt As Long
  PurgeFlagNrmails As Long
  NumberOfMails As Long 'Количество писем в области
  NumberOfAlreadyRead As Long
  LocalMail As Long
  AdditionalDays As Long
  AreaCreationDate As Long
  NoName As String * 68
  'NextAreaIndex As Long
  'Длина одной записи = 562
End Type

Private Sub Command1_Click()
  Dim arrAreas() As AreaRecord
  Dim AreasFile As Long
  Dim i As Long
 
  ConfList.Clear
  AreasFile = FreeFile
  Open "c:\downloads\areas.wwd" For Binary Access Read As #AreasFile
  ReDim arrAreas(1 To 1)
  ReDim arrAreas(1 To LOF(AreasFile) \ Len(arrAreas(1)))
  Debug.Print Len(arrAreas(1))
 
  For i = LBound(arrAreas) To UBound(arrAreas)
    Get #AreasFile, , arrAreas(i)
    'ConfList.AddItem Trim$(arrAreas(i).Echotag)
    Debug.Print Trim$(arrAreas(i).Echotag) + " - " & arrAreas(i).NumberOfMails
  Next
 
  Close #AreasFile
End Sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 20.04.2004 (Вт) 14:55

Всё. Разобрался.
Списался с разработчиком родной программы - он мне указал что поле Group имеет длину не 11 байт, а 12. Отсюда и ошибка у меня.
Спасибо ребята за помощь.
Алибеку спасибо за пояснения по "перевёртышам". :)
GSerg'у спасибо за найденую ошибку.
Ещё раз всем спасибо.
Думаю тему можно считать закрытой.


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18

    TopList