Навигация в рекордсете. Помощь новичку.

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 949
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Навигация в рекордсете. Помощь новичку.

Сообщение kibernetics » 03.10.2006 (Вт) 10:05

Приведите пример пожалуйста, как из VB подключённой к базе по ADODB.Connection вывести в TextBox на форме значение из первой записи второй колонки моей таблицы:
Изображение

т.е. в данном случае нужно вывести слово Hello в TextBox на моей форме в VB.

Пока у меня есть такой код:
Код: Выделить всё
Dim myConn As ADODB.Connection
    Dim myComm As String
    Dim myConRst As ADODB.Recordset
    Dim myKeyRst As ADODB.Recordset
    Dim sConnection As String
    sConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=e:\Temp\db1.mdb"
   
    Set myConn = New ADODB.Connection
    Set myKeyRst = New ADODB.Recordset
   
    myConn.Open sConnection


Спасибо.

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Сообщение HandKot » 03.10.2006 (Вт) 11:10

Способ 1

Код: Выделить всё
myKeyRst.Open "SELECT Text1 FROM Table WHERE Count = 1", myConn

TextBox.Text = myKeyRst.Fields("Text1")


Способ 2
у текстбокса выставить св-ва DataSource и DataField и потом просто открыть рекордсет. Перемещаясь по рекордсету в текстбоксе инфа будет соответствовать текущей записи

вроде так

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 03.10.2006 (Вт) 11:13

Код: Выделить всё
    myKeyRst.CursorLocation = adUseClient       'Клиентский курсор
    'Открытие рекордсета
    myKeyRst.Open "select * from TableName", myConn, adOpenStatic, adLockReadOnly
    Set DataGrid1.DataSource = myKeyRst         'Вывод в Датагрид
    myKeyRst.MoveFirst                          'Перемещение на первую запись
    Textbox1.Text = myKeyRst.Fields(1).Value    'Чтение значения второй колонки
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 949
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 03.10.2006 (Вт) 12:03

Большое спасибо. Работает. Однако если у HandKot в способе 1, указать
Код: Выделить всё
TextBox.Text = myKeyRst.Fields("Text2")

то ничего не отображает из второй колонки, выкидывает ошибку, хотя с первой отображает. Наверное потому, что курсор куда-то уходит.

VVitafresh
А что означает строчка:
Код: Выделить всё
Set DataGrid1.DataSource = myKeyRst         'Вывод в Датагрид

зачем она нужна? или она необязательна?

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

Сообщение shady » 03.10.2006 (Вт) 13:32

Наверное потому, что курсор куда-то уходит.

Курсор никуда не уходит. Скорее всего в таблице, из которой делается выборка, нет поля с именем Text2, либо не присутствует в перечислении SELECTa (если не используется *).

Код: Выделить всё
Set DataGrid1.DataSource = myKeyRst         'Вывод в Датагрид

То и означает, что элемент DataGrid отобразит весь рекордсет (просмотр результата запроса в виде таблицы)

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 949
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 27.11.2006 (Пн) 12:41

извините, у меня вопрос в студию...
а вот допустим, у меня есть поля в базе по которым тоже нужно ориентироваться на запрос.
например, у меня есть поле в базе active тип boolean, я делаю так:

Код: Выделить всё
myKeyRst.Open "SELECT * FROM [tbdT]" & "WHERE active = True", myConn, adOpenStatic, adLockReadOnly


а если у меня много полей, по которым нужно "пройтись" фильтром, как их тоже перечислить? ведь, длина запроса может быть через чур длинная.
нельзя ли как-то делать, чтоли, перечислением, или еще как-то..., типа блоком:
Код: Выделить всё
myKeyRst.Open "SELECT * FROM [tbdT]"
"WHERR active = True"
"WHERE Param1 = >5"
"WHERE Param2 = Today"
"WHERE Param3 = True"
"WHERE Param4 = Like "date""
...
myConn, adOpenStatic, adLockReadOnly

?

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

Сообщение GSerg » 27.11.2006 (Пн) 12:46

Даже не смешно.
AND, kibernetics.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 949
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 27.11.2006 (Пн) 17:58

GSerg
благодарю Вас!

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 949
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 04.12.2006 (Пн) 17:50

Господа, взываю о помощи...
Допустим, я открыл базу из ВБ так:
Код: Выделить всё
myKeyRst.Open "SELECT * FROM [tbdT]", myConn, adOpenStatic, adLockReadOnly


потом я хочу применить фильтр:
Код: Выделить всё
myKeyRst.Open "SELECT * FROM [tbdT]" & "WHERE active = True", myConn, adOpenStatic, adLockReadOnly


но ВБ ругается, что операция не допускается, если объект открыт. как применять условия, если база уже подключена и открыта?


П.С. И вообще, как правильно всё это называется? АДО, БД или еще как-то... если справку искать, то по каким критериям? Где можно почитать, про все эти запросы? Или адрес скажите пжлста.
Последний раз редактировалось kibernetics 04.12.2006 (Пн) 17:55, всего редактировалось 1 раз.

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

Сообщение GSerg » 04.12.2006 (Пн) 17:53

Если тебе говорят, что операция не допускается, когда объект открыт, на какие мысли это наводит?..
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 949
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 04.12.2006 (Пн) 17:57

GSerg
наваодит, что нельзя использовать [].Open[]
но, вот как его неиспользовать, в этом то и вопрос...

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

Сообщение Konst_One » 04.12.2006 (Пн) 17:59

Код: Выделить всё
myKeyRst.Filter = "active=True"

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 04.12.2006 (Пн) 18:05

kibernetics писал(а):GSerg
наваодит, что нельзя использовать [].Open[]
но, вот как его неиспользовать, в этом то и вопрос...

Открыть другой?
Изображение

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 949
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 04.12.2006 (Пн) 18:24

tyomitch
открыть другой, в смысле другой курсор?

Konst_One
а как сделать фильтр по слову?
ставлю:
Код: Выделить всё
myKeyRst.Open "SELECT * FROM [tbdT]", myConn, adOpenStatic, adLockReadOnly

...
'some code
...

myKeyRst.Filter = "AdresName Like system" ' тут мне нужно, чтоб была навигация только в тех рекордсетах, где в столбце AdresName есть слово system


но опять же имею ошибку:
"Аргументы имеют неверный тип, выходят за пределы, или вступают в конфликт друг с другом"

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 04.12.2006 (Пн) 18:26

kibernetics писал(а):открыть другой, в смысле другой курсор?

Ну естественно. Один запрос -- один курсор.

kibernetics писал(а):а как сделать фильтр по слову?

Наверное, заключить его в кавычки?
Изображение

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 949
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 04.12.2006 (Пн) 18:44

tyomitch
не могу заключить кавычки в кавычки. т.е.:
Код: Выделить всё
ownKeyRst.Open "SELECT * FROM [tbdT]" & "WHERE AdresName Like ""btnClose"", myConn, adOpenStatic, adLockReadOnly

не работает.

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

Сообщение GSerg » 04.12.2006 (Пн) 18:46

Нды...
Я-то думал, что если тебе говорят, что операция не допускается, когда объект открыт, то это наведёт на мысли, что сначала объект надо закрыть...
Не навело. Жаль.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 949
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 04.12.2006 (Пн) 18:56

tyomitch
а если курсор(запрос) к примеру открыт, но потом нигде не используется. можно ли его переоткрыть?
например так:
Код: Выделить всё
myKeyRst.Open "SELECT * FROM [tbdT]", myConn, adOpenStatic, adLockReadOnly
...
'some code
...
myKeyRst.Close
myKeyRst.Open "SELECT * FROM [tbdT]" & "WHERE ...", myConn, adOpenStatic,

или так неграмотно?

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 949
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 04.12.2006 (Пн) 19:01

GSerg
дошло уже потом, как я задал последний вопрос. получается, что так и нужно работать.
сделал запрос, выполнил задачу. закрыл запрос. открыл запрос с новыми параметрами, что нужно сделал, закрыл запрос. открыл запрос ... и т.д....

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 949
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 05.12.2006 (Вт) 10:30

а на вопрос по синтаксису никто и не ответил.
у меня еррор на записи:
Код: Выделить всё
ownKeyRst.Open "SELECT * FROM [tbdT]" & "WHERE AdresName Like ""system"", myConn, adOpenStatic, adLockReadOnly


как правильно поисковое слово "system" в поле AdresName указать?

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 05.12.2006 (Вт) 10:36

Код: Выделить всё
ownKeyRst.Open "SELECT * FROM [tbdT] WHERE AdresName Like 'system'", myConn, adOpenStatic, adLockReadOnly

Ы?

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 949
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 05.12.2006 (Вт) 11:13

Ennor
большое вам человеческое спасибо :)

и чтобы я делал без этого форума?
страшно подумать...
всем большущее спасибо за отклики

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 949
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 11.12.2006 (Пн) 13:05

порекомендуйте плиз, как передать переменную вместо 'system' здесь:

Код: Выделить всё
ownKeyRst.Open "SELECT * FROM [tbdT] WHERE AdresName Like 'system'", myConn, adOpenStatic, adLockReadOnly

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

Сообщение Konst_One » 11.12.2006 (Пн) 13:22

Код: Выделить всё
ownKeyRst.Open "SELECT * FROM [tbdT] WHERE AdresName Like '" & MyValue & "'", myConn, adOpenStatic, adLockReadOnly

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 949
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 11.12.2006 (Пн) 13:33

мдяяя...
туплю.
бигсенкс

AntonGV
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 24.05.2006 (Ср) 12:10
Откуда: г. Пермь

Сообщение AntonGV » 15.12.2006 (Пт) 15:08

Как проверить существует ли определенная запись в таблице
Код: Выделить всё
myKeyRst.Open "SELECT Name, Password FROM Users WHERE Name LIKE '"  + tmp(1) + "'", myConn
  If myKeyRst.Fields("Name") <> "" Then   'нужно проверить существует ли такая запись
    If myKeyRst.Fields("Password") = tmp(2) Then
      UpdStatus tmp(1) + " подключен", Normal
      ServerSendData "OK"
    Else
      ServerSendData "No Pass"
    End If
  Else
    ServerSendData "No User"
  End If
myKeyRst.Close
Если долго мучиться, что-нибудь получится


Вернуться в Базы данных

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

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

    TopList