Выборка в базе MDB

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
HotIce
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 16.01.2004 (Пт) 11:17

Выборка в базе MDB

Сообщение HotIce » 16.01.2004 (Пт) 11:24

Вообщем у меня аналог телефонной записной книги, подскажите пожалуйста как мне зделать выборку из базы по параметрам какого либо поля, т.е. в поле тел. вводится 3 цифры и прога делает выборку всех записей где эти цифры в стрецаются в такой же последоват, или тоже самое только с именем или всё вместе.
Как я понял это команда Select = "" а в кавычках SQL синтаксис поиска.

Зарание благодарен

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 16.01.2004 (Пт) 12:09

запрос будет выглядеть примерно так:
Код: Выделить всё
SELECT * FROM [table] WHERE [field] LIKE "[string]"
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

HotIce
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 16.01.2004 (Пт) 11:17

что-то не идёт

Сообщение HotIce » 18.01.2004 (Вс) 11:35

Так ну я прилипил куcок кода но почему-то он выходит с ошибкой: Too few parameters. Expected 1. Посмотрите плз код и скажите что ни так.
Код: Выделить всё
Private Sub mnuFind_Click()
  Dim findname As String
  findname = InputBox("Введите группу букв имени или полное имя для поиска :", "Поиск нужных записей!!!", findname)
  MainBase.RecordSource = "Select * from phonebook where FirstName like [findname]"
  MainBase.Refresh
End Sub
[/i]

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 18.01.2004 (Вс) 14:20

исправь это
Код: Выделить всё
MainBase.RecordSource = "Select * from phonebook where FirstName like [findname]"

на это
Код: Выделить всё
MainBase.RecordSource = "Select * from phonebook where FirstName like '" & findname "'"
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

HotIce
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 16.01.2004 (Пт) 11:17

Я подставил...(((

Сообщение HotIce » 18.01.2004 (Вс) 22:02

Вообщем в программе без ошибок работает следующая строка
Код: Выделить всё
MainBase.RecordSource = "Select * from phonebook where FirstName like ' & findname ' "

но дело в том что выборку он не делает ((( Уменя VB 5.0 enterprise edition, может что подскажешь...

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 19.01.2004 (Пн) 7:16

блин... вот ведь болван (по совместительству Cyrax)
сори, я сам немного с кодом накосячил - пропустил один символ...
Код: Выделить всё
MainBase.RecordSource = "Select * from phonebook where FirstName like '" & findname & "'"
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

HotIce
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 16.01.2004 (Пт) 11:17

Всё равно не работает

Сообщение HotIce » 19.01.2004 (Пн) 23:01

Как не крути а двойные ковычки он не понимает...:(

Твою строку я вставил... но он не делает выборки посмотри код ещё раз плз может я чё забыл дописать...:)

Код: Выделить всё
Dim findname As String
  findname = InputBox("Введите группу букв имени или полное имя для поиска :", "Поиск нужных записей!!!", findname)
  MainBase.RecordSource = "Select * from phonebook where FirstName like ' & findname &' "
     MainBase.Refresh

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Re: Всё равно не работает

Сообщение Cyrax » 20.01.2004 (Вт) 5:41

HotIce писал(а):Как не крути а двойные ковычки он не понимает...:(

Твою строку я вставил... но он не делает выборки посмотри код ещё раз плз может я чё забыл дописать...:)

Код: Выделить всё
Dim findname As String
  findname = InputBox("Введите группу букв имени или полное имя для поиска :", "Поиск нужных записей!!!", findname)
  MainBase.RecordSource = "Select * from phonebook where FirstName like ' & findname &' "
     MainBase.Refresh

и как это называется? нет, я вас спрашиваю...
HotIce, ты повнимательней код-то посмотри.
MainBase.RecordSource = "Select * from phonebook where FirstName like ' & findname &' "
вот был твой код. и на мой код оно совсем не похоже... пропущены две двойных кавычки. одна закрывающая (после like '), вторая - открывающая (после findname &)
давай попробуем подругому
Код: Выделить всё
MainBase.RecordSource = "Select * from phonebook where FirstName like '"
MainBase.RecordSource = MainBase.RecordSource & findname
MainBase.RecordSource = MainBase.RecordSource & "'"

думаю теперь ты поймешь свою обшибку...
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

HotIce
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 16.01.2004 (Пт) 11:17

Вот так код идёт без ошибок

Сообщение HotIce » 20.01.2004 (Вт) 22:13

Ну как не стараюсь
возможно плохо стараюсь
всё равно он выборку не делает. Не показывает он записи почему-то хотя параметры встречаются хотя бы один раз...:(
мне это уже тоже надоело но дело в том что это очень надо...:)

.COM
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 18
Зарегистрирован: 11.07.2003 (Пт) 22:10
Откуда: Россия, Москва

Сообщение .COM » 21.01.2004 (Ср) 10:35

может так? => MainBase.RecordSource = "Select * from phonebook where FirstName like ' * " & findname & " * ' "

HotIce
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 16.01.2004 (Пт) 11:17

И это тоже не то...:(

Сообщение HotIce » 21.01.2004 (Ср) 22:03

Блин как всё надоело ...:(

Ктонить плз спасите... это очень важно если я не напишу этот модуль придётся придумать очень корявый код который хотябы частично что-то выполнит... просто я не хочу... надо шоб всё красивов было...:) :?

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 22.01.2004 (Чт) 10:59

Во-первых, кто такой MainBase? Рекордсет?
Во-вторых, не просто восклицай "почему не получается!?", а говори, что именно не получется.
Запрос тебе правильный написали. Проверь его прямо в mdb - напиши запрос - проверь, что он возвращает то, что нужно.
Не поленись запостить кусок кода - так ничего не понятно!

.COM
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 18
Зарегистрирован: 11.07.2003 (Пт) 22:10
Откуда: Россия, Москва

Сообщение .COM » 22.01.2004 (Чт) 11:00

...со звездочками работает на 100%... Проверял на VB6 и БД Access 2000...

MainBase.RecordSource = "Select * from phonebook where FirstName like ' * " & findname & " * ' "

HotIce
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 16.01.2004 (Пт) 11:17

Понял проверю...

Сообщение HotIce » 22.01.2004 (Чт) 16:26

Да MainBase - это рекордсет...:)

Запрос создам и проверю... :oops:

А не получается следующее:

после того как вставляю код, делаю запуск... нажимаю кнопочку... в месседже ввожу русскую букву "а", и после в окне проги в текстовых полях пусто... :x

Базу я создаю на основе MDB 7.0

В базе есть записи с искомой буквой и даже ни одна :)

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 22.01.2004 (Чт) 16:56

Ты что используешь ADO или DAO? Ты открыть-то рекордсет не забыл?
В ADO я бы делала так:

Это где-нибудь в глобальной инициализации типа Form_Load
Код: Выделить всё
Set cn = New Connection
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db1.mdb;Persist Security Info=False"
cn.Open


Это там, где используешь выборку:
Код: Выделить всё
Set rs = New Recordset
rs.Open "Select * from phonebook where FirstName like ' * " & findname & " * ' ", cn, adOpenKeyset, adLockReadOnly
-----
rs.Close


Это где-нибудь на глобальной деинициализации типа Form_Unload
Код: Выделить всё
cn.Close

HotIce
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 16.01.2004 (Пт) 11:17

Обьясните плз...

Сообщение HotIce » 22.01.2004 (Чт) 22:02

Как определить DAO или ADO??? простите мне мою не компетентность...

HotIce
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 16.01.2004 (Пт) 11:17

Так ... с начала...

Сообщение HotIce » 22.01.2004 (Чт) 22:23

Что значит не забыл ли я открыть рекордсет...???

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

Далее - я создал базу Microsoft Access > Version 7.0 MDB

и как мне создать запрос в MS Access 2000 > Данный запрос...
Код: Выделить всё
MainBase.RecordSource = "Select * from phonebook where FirstName like ' * " & findname & " * ' "

???

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Re: Обьясните плз...

Сообщение Rainbow » 23.01.2004 (Пт) 9:59

HotIce писал(а):Как определить DAO или ADO??? простите мне мою не компетентность...

Мама! Ладно, сейчас разберемся...

Вопрос номер 1:
ВНИМАНИЕ: где ты пишешь свою прогу? Если ты пишешь прямо в Access, то там по умолчанию используется DAO - соответственно, и хелп смотри по нему же.
если ты пишешь прогу на VB, то ты не мог пройти мимо того, чтобы не задаться вопросом, что тебе использовать. Потому что ссылку на ту или другую библиотеку надо ручками добавить через Project->Referencies. Если же ты все-таки каким-то образом пишешь на VB, то зайли плз туда и скажи, что у тебя подключено:
Microsoft ActiveX Data Objects или Microsoft DAO?

HotIce писал(а):Что значит не забыл ли я открыть рекордсет...???

Для того, чтобы данные оказались в рекордсете, его надо ОТКРЫТЬ - то есть попросить туда закачать данные из базы в соответствии с запросом. В ADO это метод Open, в DAO - OpenRecordset.

HotIce писал(а):Код процедуры был раньше или есть что-то ещё, после запуска программы в текстовых полях отображается первая запись базы данных...

Значит, кто-то все сделал когда-то правильно.


HotIce писал(а):Далее - я создал базу Microsoft Access > Version 7.0 MDB

Что такое версия 7.0? Access 2000 - это же 9. Как ты ее создал? - просто создал новую базу на диске? И зачем? Где данные-то у тебя?

HotIce писал(а):и как мне создать запрос в MS Access 2000 > Данный запрос...

1) Открываешь базу. Слева видишь - Tables, Queries, Forms... (или по-русски тоже самое).
2) Кликаешь слева на Queries. Потом на кнопку New.
3) Ok
У тебя открывается приглашение добавить таблицы в Design View. Отказываешься.
4) View->SQL view
5) Там пишешь запрос: "Select * from phonebook where FirstName like '*а*'"
6) View-> Datasheet view - исполнит запрос

И (это уже вошло в традицию :lol: ) предложу почитать
http://msdn.microsoft.com/library/defau ... topic5.asp

Да, и еще: будешь что-нибудь спрашивать - КОД СЮДА!

HotIce
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 16.01.2004 (Пт) 11:17

значит так...

Сообщение HotIce » 23.01.2004 (Пт) 20:07

Я использую Microsoft DAO 3.51(напротив него галочка стоит).

Где, когда и как нужно открыть рекордсет??
MainBase это полоса типа DATA.

Код моей процедуры выше написан полностью.

Базу я создал так VB > Add-In > Visual Data Manager... > Потом в появившемся окне File > New > Microsoft Access > Version 7.0 MDB

А запрос у меня не создаётся в созданной таким образом базе Access, в списке "запросы" клавиша "создать" не подсвечена :( В других базах данных, которые созданны непосредственно Access'ом, запрос создаётся и правильно работает...:)

Мне кажется что всё дело в БД которую я создаю.

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 26.01.2004 (Пн) 11:10

Ага... Теперь хоть что-то поняно...

Ты меняешь у своего контрола DataSource. Чтобы данные оказались в рекордсете, надо попросить их туда закачть. В твоем случае это надо сделать с помощью MainBase.Refresh. Тогда запрос отошлется в БД, там исполнится и результат вернется тебе и загрузится в контрол. У тебя, вроде, так и написано :roll: Тогда остается вопрос, к какой базе у тебя идет коннект. Что у тебя прописано в DatabaseName, Exclusive, ReadOnly и Connect свойствах твоего контрола?

И зачем тебе создавать БД через Add-In Manager? Данные-то у тебя в какой базе лежат? Если честно, то что ты сотворил с помощью Add-In Manager'а, мне не совсем понятно...

Мои замечания по поводу открытия рекодрсета относились к несколько другой технологии - когда создется объект Recordset и открывается. См. объект Recordset и метод OpenRecordset. В качестве одного из параметров OpenRecordset используется запрос. Подробности и примеры смотри в MSDN и в той статье по ссылке.

HotIce
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 16.01.2004 (Пт) 11:17

Вообщем так

Сообщение HotIce » 27.01.2004 (Вт) 22:16

Я понял, что дело всё тки в БД, если есть претложение как сделать лучше, то прошу ... мне об этом написать:)

Если нужно то могу весь код напечатать... :D

Так вот база данных стандартная база Access вот только при открытии самим Access запросы вообще не создаются, надпись "создать" просто неподсвеченна... :evil:

А что не понятно пишите вопросы...:)

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

Сообщение alibek » 28.01.2004 (Ср) 14:47

Причин может быть несколько.
Самое вероятное: версия базы данных отличается от версии Access. В подобных случаях Access при открытии БД предлагает ее открыть или конвертировать. Если не конвертировать, то изменение структуры объектов недоступно. Выход: создать БД в Access и импортировать в нее все объекты из твоей БД.
Второе: ты зашифровал БД (в .mde-файл). Диагноз и лечение те же.
Третье: "ой, Герасим, что-то ты не договариваешь..." :)
Lasciate ogni speranza, voi ch'entrate.


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

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

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

    TopList