Проблемы при компиляции кода. Help.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Проблемы при компиляции кода. Help.

Сообщение АндрейБ » 21.12.2004 (Вт) 14:33

Не так давно работаю с VB6, поэтому сталкиваюсь с некоторым не пониманием (до этого писал базы в Ассеsse с применением VBfA).
Сейчас пишу базу, и вроде нормально шло, но одна процедура начала глючить. В поле я забиваю код, после нажатия Ентер происходит обработка события.
В начале описываю переменные 4 Database, 8 Recordsetов, пару Интегер и один Лонг. Сейчас этот код имеет примерно под 100 строк.
Причем я рекордсеты использую не один раз (Set RS = ...).
По ходу пьесы все Databasы и Рекордсеты открыты. И начинаю писать последний поиск и происходит ГЛЮК. Я присваиваю RS7 - новое значение в DB4, база сначала не могла присвоить значение, ссылалась на то что условие (Where AAA = 'Гавно') - типа метод ошибочен. А потом стал писать что DB4 - типа база не описана (объект не найден).
Еще был до этого один глюк! Заключался он в том, что я добавлял в таблицу несколько записей, а потом хотел сделать сортировку, но почему то метод RS7.Sort "Subs" - не работал, то же выдавал какие -то ошибки! Я обошел эту проблему заново описан RS7 (с применением Order By Bus)!
Но теперь все встало.
У меня сиситема свежая, комп P4 - 2700 -512.
Объясните что я делаю не правильно? (может много опиcываю Рекордсетов?, в Акцесе вроде таких проблем не было)

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 21.12.2004 (Вт) 14:37

телепатов, как было ранее замечено, уже давно нет.
код в студию

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Re: Проблемы при компиляции кода. Help.

Сообщение codemaster » 21.12.2004 (Вт) 14:38

АндрейБ писал(а):В начале описываю переменные 4 Database, 8 Recordsetов, пару Интегер и один Лонг. Сейчас этот код имеет примерно под 100 строк.
Причем я рекордсеты использую не один раз (Set RS = ...).



Вопрос из зала: зачем 4 Database, 8 Recordsetов ?
Опиши подробнее задачу

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

В двух словах :)

Сообщение АндрейБ » 21.12.2004 (Вт) 17:04

Я понимаю что это некоторых покажеться веселым, но столько Database и Recordset - наверное я по другому не могу.
Ситуация такая, в поле формы заноситься код детали (это база по автозапчастям). После Ентер происходит обработка события. В таблицу заносятся все возможные варианты по этому коду (сам код, замены, дубликаты (неоригинальных запчастей) и т.д. + цены названия и многое другое). Это в двух словах о задаче.
Код ниже:
Поле куда вводим код детали называется Code
База имеет достаточно много таблиц - это необходимость!
Ошибка возникает ближе к концу кода (там пустые строки)

Private Sub Code_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Then 'Если ввели Enter
'Описываем переменные
Dim DB, DB2, DB3, DB4 As Database
Dim RS, RS2, RS3, RS4, RS5, RS6, RS7, RS8 As Recordset
Dim A, B As Integer
Dim C As Long
'Определяем настройки клиента
Set DB = OpenDatabase("Setup/Setup.mdb") 'База Setup
Set RS = DB.OpenRecordset("Select * From Setup;")
Set RS2 = DB.OpenRecordset("Select * From DM;")
'Настройка полей
MSFlexGrid1.Rows = 1
If RS![In] = 0 Then
MSFlexGrid1.Cols = 7
MSFlexGrid1.FormatString = "< |<Каталог|<Код детали|<Наименование детали|^Цена|^Доставка|^Срок поставки|<Поставка"
MSFlexGrid1.ColWidth(3) = 4010
MSFlexGrid1.ColWidth(4) = 900
MSFlexGrid1.ColWidth(5) = 900
MSFlexGrid1.ColWidth(6) = 1300
MSFlexGrid1.ColWidth(7) = 1100
Else
MSFlexGrid1.Cols = 8
MSFlexGrid1.FormatString = "< |<Каталог|<Код детали|<Наименование детали|^Цена|^ |^Доставка|^Срок поставки|<Поставка"
MSFlexGrid1.ColWidth(3) = 3100
MSFlexGrid1.ColWidth(4) = 900
MSFlexGrid1.ColWidth(5) = 900
MSFlexGrid1.ColWidth(6) = 900
MSFlexGrid1.ColWidth(7) = 1300
MSFlexGrid1.ColWidth(8) = 1100
End If
MSFlexGrid1.ColWidth(0) = 400
MSFlexGrid1.ColWidth(1) = 1000
MSFlexGrid1.ColWidth(2) = 1500
MSFlexGrid1.BackColorSel = &H80000013
MSFlexGrid1.ForeColorSel = &H0
MSFlexGrid1.BackColorBkg = &H80000009
'Заполняем таблицу с результатом поиска
Set DB2 = OpenDatabase("Setup/Search.mdb") 'База Search
Set RS3 = DB2.OpenRecordset("Select * From Search;")
If RS3.RecordCount > 0 Then
Do Until RS3.EOF 'Очистить таблицу со старым поиском
RS3.Delete
RS3.MoveNext
Loop
End If
'Добавляем записи номинала в таблицу
Set DB3 = OpenDatabase("Prices/" & N() & ".mdb") 'База по Make
Set RS4 = DB3.OpenRecordset("Select * From " & N() & ";")
Do Until RS4.EOF
Set RS5 = DB3.OpenRecordset("Select * From " & RS4![ML] & " Where Code = '" & Code & "';")
If RS5.RecordCount > 0 Then
RS3.AddNew
If RS3.RecordCount = 0 Then 'Заполняем только 1 строку
Set DB4 = OpenDatabase("Prices/Prices.mdb") 'База Prices
Set RS6 = DB4.OpenRecordset("Select * From Prices Where Make = '" & N() & "';")
RS3![0] = RS6!Code
RS3![1] = N()
RS3![2] = RS5![Code]
RS3![3] = RS5![Description]
End If
If RS![In] = 0 Then
RS3![4] = Coma(RS5![Price], 2)
RS2.FindFirst "ID = " & RS4!ID & ""
If RS![PD] = -1 Then RS3![4] = Coma(RS3![4] * (100 - RS2!D) / 100, 2)
If RS![OM] = -1 Then
If RS![PM] = -1 Then RS3![4] = Coma(RS3![4] * (100 + RS!M) / 100, 2)
Else
If RS![PM] = -1 Then RS3![4] = Coma(RS3![4] * (100 + RS2!M) / 100, 2)
End If
RS3![5] = RS4![PriceL]
RS3![6] = RS4![TimeL]
RS3![7] = RS4![ML]
Else
RS3![4] = Coma(RS5![Price], 2)
RS2.FindFirst "ID = " & RS4!ID & ""
If RS![PD] = -1 Then RS3![4] = Coma(RS3![4] * (100 - RS2!D) / 100, 2)
If RS![OM] = -1 Then
If RS![PM] = -1 Then RS3![4] = Coma(RS3![4] * (100 + RS!M) / 100, 2)
Else
If RS![PM] = -1 Then RS3![4] = Coma(RS3![4] * (100 + RS2!M) / 100, 2)
End If
RS3![5] = Coma(RS5![Price] * (100 - RS2!D) / 100, 2)
RS3![6] = RS4![PriceL]
RS3![7] = RS4![TimeL]
RS3![8] = RS4![ML]
End If
RS3.Update
End If
RS4.MoveNext
Loop
'Добавляем записи замен в таблицу
Set RS7 = DB2.OpenRecordset("Select * From Subs;")
Do Until RS7.EOF 'Очистим таблицу замен
RS7.Delete
RS7.MoveNext
Loop
RS4.MoveFirst 'Заполняем таблицу всех замен
Do Until RS4.EOF
Set RS5 = DB3.OpenRecordset("Select * From " & RS4![ML] & " Where Code = '" & Code & "';")
If RS5.RecordCount > 0 Then
If RS5!Subs > 0 Then
C = RS5!Subs 'Определяем ключ замены
Set RS8 = DB3.OpenRecordset("Select * From " & RS4![ML] & " Where Subs = " & C & " And Code <> '" & Code & "';")
If RS8.RecordCount > 0 Then 'Есть замены
Do Until RS8.EOF
RS7.FindFirst "Subs = '" & RS8!Code & "'"
If RS7.NoMatch Then
RS7.AddNew
RS7![Subs] = RS8!Code
RS7.Update
End If
RS8.MoveNext
Loop
End If
End If
End If
RS4.MoveNext
Loop
Set RS7 = DB2.OpenRecordset("Select Subs From Subs Order by Subs;") 'Сортируем замены по возрастанию
If RS7.RecordCount > 0 Then RS7.MoveFirst
Do Until RS7.EOF
RS3.MoveLast
A = RS3.AbsolutePosition
RS4.MoveFirst
Do Until RS4.EOF
Set RS5 = DB3.OpenRecordset("Select * From " & RS4![ML] & " Where Code = '" & RS7!Subs & "';")
If RS5.RecordCount > 0 Then
RS3.AddNew
If RS3.RecordCount = A + 1 Then 'Заполняем только 1 строку
RS3![0] = RS6!Code
RS3![1] = N()
RS3![2] = RS5!Code
RS3![3] = RS5![Description]
End If
If RS![In] = 0 Then
RS3![4] = Coma(RS5![Price], 2)
RS2.FindFirst "ID = " & RS4!ID & ""
If RS![PD] = -1 Then RS3![4] = Coma(RS3![4] * (100 - RS2!D) / 100, 2)
If RS![OM] = -1 Then
If RS![PM] = -1 Then RS3![4] = Coma(RS3![4] * (100 + RS!M) / 100, 2)
Else
If RS![PM] = -1 Then RS3![4] = Coma(RS3![4] * (100 + RS2!M) / 100, 2)
End If
RS3![5] = RS4![PriceL]
RS3![6] = RS4![TimeL]
RS3![7] = RS4![ML]
Else
RS3![4] = Coma(RS5![Price], 2)
RS2.FindFirst "ID = " & RS4!ID & ""
If RS![PD] = -1 Then RS3![4] = Coma(RS3![4] * (100 - RS2!D) / 100, 2)
If RS![OM] = -1 Then
If RS![PM] = -1 Then RS3![4] = Coma(RS3![4] * (100 + RS!M) / 100, 2)
Else
If RS![PM] = -1 Then RS3![4] = Coma(RS3![4] * (100 + RS2!M) / 100, 2)
End If
RS3![5] = Coma(RS5![Price] * (100 - RS2!D) / 100, 2)
RS3![6] = RS4![PriceL]
RS3![7] = RS4![TimeL]
RS3![8] = RS4![ML]
End If
RS3.Update
End If
RS4.MoveNext
Loop
RS7.MoveNext
Loop


'ОШИБКА ЗДЕСЬ!!!

'Добавляем дубликаты в таблицу
'Делаем цикл по таблицам дубликатов, если оригинал и надо смотреть дубликаты
If RS![DU] = -1 Then
If RS6![Description] = "Original" Then
Set RS7 = DB4.OpenDatabase("Select * Prices Where [Description] = 'Dublicat';") - - - ОШИБКА!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
If RS7.RecordCount > 0 Then
Do Until RS7.EOF
-
'Ищем в таблицe Сross код Дубликата по индексу и коду Оригинала
'открываем базы дубликатов
-
Добавляем данные
-
RS7.MoveNext
Loop
End If
End If
End If
Этот цикл еще не доделан, но суть не в этом!


'Выводим на экран
If RS3.RecordCount > 0 Then
MSFlexGrid1.Visible = True
RS3.MoveFirst
B = 1
MSFlexGrid1.Rows = RS3.RecordCount + 1
Do Until B > RS3.RecordCount
MSFlexGrid1.Row = B
A = 0
Do Until A > (IIf(RS![In] = 0, 7, 8))
MSFlexGrid1.Col = A
Select Case A
Case 0
MSFlexGrid1.Text = IIf(RS3![0] Like "?*", RS3![0], "")
Case 1
MSFlexGrid1.Text = IIf(RS3![1] Like "?*", RS3![1], "")
Case 2
MSFlexGrid1.Text = IIf(RS3![2] Like "?*", RS3![2], "")
Case 3
MSFlexGrid1.Text = IIf(RS3![3] Like "?*", RS3![3], "")
Case 4
MSFlexGrid1.Text = IIf(RS3![4] Like "?*", RS3![4], "")
Case 5
MSFlexGrid1.Text = IIf(RS3![5] Like "?*", RS3![5], "")
Case 6
MSFlexGrid1.Text = IIf(RS3![6] Like "?*", RS3![6], "")
Case 7
MSFlexGrid1.Text = IIf(RS3![7] Like "?*", RS3![7], "")
Case 8
MSFlexGrid1.Text = IIf(RS3![8] Like "?*", RS3![8], "")
End Select
A = A + 1
Loop
B = B + 1
RS3.MoveNext
Loop
Else
MSFlexGrid1.Visible = False
End If
End If
End Sub

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 21.12.2004 (Вт) 17:12

Код: Выделить всё
Dim DB, DB2, DB3, DB4 As Database
Dim RS, RS2, RS3, RS4, RS5, RS6, RS7, RS8 As Recordset


У тебя DB, DB2, DB3 и RS, RS2, RS3, RS4, RS5, RS6, RS7 не объявлены, т.е. это Variant

Исправь:
Код: Выделить всё
Dim DB as DAO.Database

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Re: В двух словах :)

Сообщение codemaster » 21.12.2004 (Вт) 17:28

АндрейБ писал(а):
'Добавляем дубликаты в таблицу
'Делаем цикл по таблицам дубликатов, если оригинал и надо смотреть дубликаты
If RS![DU] = -1 Then
If RS6![Description] = "Original" Then
Set RS7 = DB4.OpenDatabase("Select * Prices Where [Description] = 'Dublicat';") - - - ОШИБКА!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
If RS7.RecordCount > 0 Then
Do Until RS7.EOF
-


Если честно код - просто тихий ужас! :cry: :cry:
Ошибку я выделил
там наверное должно быть типа
Код: Выделить всё
DB4.OpenRecordset ......

АндрейБ
Бывалый
Бывалый
 
Сообщения: 276
Зарегистрирован: 18.12.2004 (Сб) 17:00
Откуда: Санкт-Петербург

Сообщение АндрейБ » 21.12.2004 (Вт) 18:13

Спасибо.
Самому стыдно. Заработался. У меня почему то ингода VB глючит.
Обычно когда ставишь точку, он выдает список с методами. А иногда почему то тормозит. Этот как раз был тот случай!

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 21.12.2004 (Вт) 18:33

да, код тот еще :o
поэтому я собственно его и не стал особо анализировать
у codemaster видно больше времени на работе есть :D

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

Сообщение Ruslan Demidow » 22.12.2004 (Ср) 12:14

АндрейБ писал(а):Спасибо.
Самому стыдно. Заработался. У меня почему то ингода VB глючит.
Обычно когда ставишь точку, он выдает список с методами. А иногда почему то тормозит. Этот как раз был тот случай!

Если DB4 объявлять без указания типа, то ни о каких методах в выпадающем списке и речи быть не может. Только если указать тип как подсказал Konst_One.
Это Ж-ж-ж-ж неспроста (с) Винни-Пух


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

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

Сейчас этот форум просматривают: Majestic-12 [Bot], SemrushBot и гости: 12

    TopList