Unable to bind to field: 'item' (Error 545)

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

Unable to bind to field: 'item' (Error 545)

Сообщение shady » 27.03.2008 (Чт) 14:59

Прошу помощи у коллективного разума в решении моей проблемы.

Есть некая программа которая работает с БД и которую юзают более 30 человек. Но у 2х имеется сабжевая проблема.
Google не рулит. MSDN (http://msdn2.microsoft.com/en-us/library/aa267016.aspx) тоже :(

На чем же может возникать такая проблема ?! Да вроде бы на том месте, где ее не должно быть.:
[code="vb"]Set txtN.DataSource = rst
txtN.DataField = "Field"
[/code]
Рекордсет объявлен в форме где и используется:
Public WithEvents rst As ADODB.Recordset (открываю его асинхронно)

Можно конечно (наверное) делать txtN.Text = rst("Field"), но тогда надо будет проверять на isnull. А так как текстбоксов почти 2 десятка, то всё это дело подтормаживает.

На этой же форме есть грида у которой DataSource = rst. Данные в ней отображаются нормально.

Из всего вышеперечисленного я сделал вывод что есть какая-то проблема с "биндингом" текстбокса и рекордсета. По идее за этот "биндинг" должна отвечать какая-нить библиотека типа MSBIND.DLL.

Кто-нить сталкивался с таким?

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

Сообщение alibek » 27.03.2008 (Чт) 15:11

Что насчет патчей?
Lasciate ogni speranza, voi ch'entrate.

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 27.03.2008 (Чт) 15:16

alibek писал(а):Что насчет патчей?

Каких именно патчей?
Windows на машинах пользователей XP Pro SP 2

+
Сейчас лишний раз убедился что с рекордсетом все нормально

Код: Выделить всё
    App.StartLogging App.Path & "" & App.Title & ".log", vbLogToFile

    App.LogEvent "Всего полей в рекордсете: " & rst.Fields.Count, vbLogEventTypeInformation
    Dim i As Long
    For i = 0 To rst.Fields.Count - 1
        App.LogEvent "Поле " & i & " " & rst.Fields(i).Name, vbLogEventTypeInformation
    Next

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

Сообщение alibek » 27.03.2008 (Чт) 15:29

Шестой сервис-пак на студию и патч для runtime.
Lasciate ogni speranza, voi ch'entrate.

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 27.03.2008 (Чт) 15:45

Шестой сервис пак стоит. А вот патч для runtime :( сомневаюсь. Не припоминаю чтобы я его ставил. Попроую поискать и скачать.

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 27.03.2008 (Чт) 15:58

Патч для Runtime я так понял вот этот ? :
http://www.microsoft.com/downloads/deta ... laylang=en

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

Сообщение alibek » 27.03.2008 (Чт) 16:09

Да.
Lasciate ogni speranza, voi ch'entrate.

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 27.03.2008 (Чт) 16:17

Тогда не помогло :(.
И сейчас еще на одном компе поставил программу та же фигня. Значит прецедентов уже 3.

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 28.03.2008 (Пт) 9:04

Решил сделать все-таки по второму пути через iif(isnull(..)... Конечно хотелось бы докопаться до истины, но к сожалению не могу на долго занимать компьютеры пользователей.

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

Сообщение alibek » 28.03.2008 (Пт) 10:12

Можно и так: Text1.Text = "" & rst!Field
Lasciate ogni speranza, voi ch'entrate.

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 28.03.2008 (Пт) 12:59

alibek, действительно! Минус 2 лишние функции. Спасибо!

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

Сообщение alibek » 28.03.2008 (Пт) 13:21

Разумеется, это годится только для текстовых полей.
Но вообще сабж -- это какой-то глюк. И я бы впервую очередь избавлялся от причины, а не искал способы обхода.
Lasciate ogni speranza, voi ch'entrate.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 28.03.2008 (Пт) 13:30

alibek писал(а):Можно и так: Text1.Text = "" & rst!Field
А быстрее так:
Код: Выделить всё
Public Function CString(ByVal sValue) As String
    If Not IsNull(sValue) Then CString = CStr(sValue)
End Function
Лучший способ понять что-то самому — объяснить это другому.

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

Сообщение alibek » 28.03.2008 (Пт) 14:04

Ты думаешь, что вызов функции с передачей аргумента по значению будет быстрее, чем конкатенция?
Если же речь идет о читабельности, то я давно такую функцию включаю в проекты, связанные с БД:
Код: Выделить всё
Function IfNull(Value, Optional NullValue = Empty)
If IsObject(Value) Then
  If Value Is Nothing Then
    If IsEmpty(NullValue) Then
      Set IfNull = Nothing
    Else
      Set IfNull = NullValue
    End If
  Else
    Set IfNull = Value
  End If
Else
  If IsNull(Value) Then
    Let IfNull = NullValue
  Else
    Let IfNull = Value
  End If
End If
End Function
Lasciate ogni speranza, voi ch'entrate.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 28.03.2008 (Пт) 15:16

ByVal не я вписал, скопипастил и не заметил. А вообще да, думал конкатенация медленнее. Оказалось быстрее даже чем с ByRef.
Лучший способ понять что-то самому — объяснить это другому.

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 16.04.2008 (Ср) 15:33

alibek писал(а):Разумеется, это годится только для текстовых полей.
Но вообще сабж -- это какой-то глюк. И я бы впервую очередь избавлялся от причины (ибо такие глюки появляются на машинах с ), а не искал способы обхода.

Подниму тему, так как решил все-таки найти причину глюков.
Что проделано на данный момент.
Методом проб и ошибок удалось таки выявить виновника этой страннй и необъяснимой ошибки. Во всем виноват MSBIND.DLL. И еще какие-то файлы. Какие, выяснить пока не удалось. С достоверностью 100% могу сказать, что на компе Win XP SP2 + Долбаный Open Offce получаю сообщение об ошибке. Стоит только накатить сверху Microsoft Office, ошибки как и небывало.
Осталось узнать какие именно файлы, критичные для меня, заменяет Open Office.


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

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

Сейчас этот форум просматривают: Yandex-бот и гости: 19

    TopList