Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Работа с данными

Страница: 1 |

 

  Вопрос: Вопрос про select max Добавлено: 16.08.11 20:18  

Автор вопроса:  Vitalysan®
Доброго времени суток!
Есть access бд с именем IZVES. В таблице есть поле ID, в котором записываются цифры от 1 до 10. Следующий код
Private rs As ADODB.Recordset
Private connect As ADODB.Connection

Private Sub sConnect(sPath As String)
    Set connect = New ADODB.Connection
    connect.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & sPath & ";" & "Persist Security Info=True"
    connect.Open
    Set rs = New ADODB.Recordset
End Sub

Private Sub Command1_Click()
    Call sConnect("c:\izveshenie.mdb")
    rs.Open "Select Max(ID) as [ID] from IZVES", connect, adOpenStatic, adLockOptimistic
    If IsNull(rs!ID) = False Then MsgBox rs!ID
    rs.Close
    connect.Close
End Sub
выдаёт, что мах = 9. Возможно я неправильно делаю запрос. Может кто объяснит, где ошибка?
Заранее благодарен.

Ответить

  Ответы Всего ответов: 9  

Номер ответа: 1
Автор ответа:
 Ким Чен Ир



Вопросов: 0
Ответов: 140
 Профиль | | #1 Добавлено: 16.08.11 21:08
Причина в том, что в твоей базе поле ID имеет текстовый тип данных, а не числовой.
Поэтому функция MAX сравнивает строки, начиная с первого символа. А строка "9" больше чем "10"

Ответить

Номер ответа: 2
Автор ответа:
 Vitalysan®



Вопросов: 25
Ответов: 61
 Профиль | | #2 Добавлено: 16.08.11 21:21
Точно! Благодарю! Тема закрыта.

Ответить

Номер ответа: 3
Автор ответа:
 Vitalysan®



Вопросов: 25
Ответов: 61
 Профиль | | #3 Добавлено: 16.08.11 21:51
Рано обрадовался(((
  1. .Open "SELECT * FROM IZVES WHERE [ID] IN ('" & lngCurrentIndex & "')", connect
lngCurrentIndex - соответственно Long. Пробовал разные варианты размера поля, формата поля, число десятичных знаков....на выходе ошибка "несоответсвие типов данных в выражении условия отбора". Как быть?
Заранее благодарен.

Ответить

Номер ответа: 4
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #4 Добавлено: 16.08.11 21:57
SELECT DOES NOT BRAKE

Ответить

Номер ответа: 5
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #5 Добавлено: 16.08.11 21:57
Кавычи лишние похоже, он не может строку с числом почему-то сравнить

  1. .Open "SELECT * FROM IZVES WHERE [ID] IN (" & lngCurrentIndex & ")", connect

вот так попробуй

Ответить

Номер ответа: 6
Автор ответа:
 Vitalysan®



Вопросов: 25
Ответов: 61
 Профиль | | #6 Добавлено: 16.08.11 22:10
  1. .Open "SELECT * FROM IZVES WHERE [ID] IN (' & lngCurrentIndex & ')", connect
та же ошибка

Ответить

Номер ответа: 7
Автор ответа:
 Vitalysan®



Вопросов: 25
Ответов: 61
 Профиль | | #7 Добавлено: 16.08.11 22:18
пока разобрался , что IN не нужен.

Ответить

Номер ответа: 8
Автор ответа:
 Vitalysan®



Вопросов: 25
Ответов: 61
 Профиль | | #8 Добавлено: 16.08.11 22:38
  1. .Open "SELECT * FROM IZVES WHERE [ID] = " & lngCurrentIndex & "", connect
пока работает...может ещё какие проблемы вылезут ;-)

Ответить

Номер ответа: 9
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #9 Добавлено: 17.08.11 09:56
Ты в 6-м примере не те кавычки кторые надо было поменял. У тебя там полная ерунда получилась.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам