С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/22: Рейтинг темы: голосов - 22, средняя оценка - 4.64
 Аватар для xopkep
0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 17

Вопросы по ADO, ADOQuery, DBGrid, ComboBox

12.05.2011, 19:41. Показов 4611. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравья, господа и дамы.
Я в C++ пока еще совсем зелен, но стараюсь... И вот у меня возикли вопросики.
Я делаю некий телефонно-технический справочник и соответственно работаю с базами.
Выбор пал на ADO+MDB (MS Access), так как его советуют для большей совместимости и простоты юза на разных машинах.
В связи этим, вот:
1. Список таблиц выводится в ComboBox:
C++
1
2
3
4
5
void __fastcall TForm1::FormCreate(TObject *Sender)
{
        DMod1->ADOConnection1->GetTableNames(ComboBox1->Items);
        ComboBox1->ItemIndex=0;
}
Вопрос: как при смене (выборе) таблицы в ComboBox, изменить содержимое DBGrid1?
2. Я пыался сделать поиск через ADOQuery примерно так:
C++
1
2
3
4
5
6
7
                ADOQuery1->SQL->Add("SELECT * FROM ");
                ADOQuery1->SQL->Add("\047" + ListBox1->Items->Strings[ListBox1->ItemIndex] + "\047;");
//                ADOQuery1->SQL->Add(" WHERE (");
//                ADOQuery1->SQL->Add(Form1->ComboBox2->Text + " = " + Form1->Edit1->Text + ")");
                ShowMessage (">> " + ADOQuery1->SQL->Text + " <<" );
//                ADOQuery1->ExecSQL();
                ADOQuery1->Open();
(Закомментированые строки - некоторые попытки)
Но получал вот такую ошибку:
Project NAMEPROJECT.exe raised exception class EOleException with message 'Синтаксическая ошибка в запросе. Неполное предложение запроса'.
Такая ошибка присутствует даже при запросе
SELECT * FROM 'tablename'
Отсюда несколько вопросов: Может ли такая ошибка быть из-за того, что у меня таблицы названы по-русски? Где искать документацию по составлению запросов? Я SQL знаю довольно прилично, но что-то это не помогает с этим ADOQuery...
3. Почему кнопки DBNavigator не активны, а изменения вносятся спокойно?
4. Как привязать базу к относительному пути? Т.е. чтобы искала программа ее в своей папке. Хотя это так, могу и сам нагуглить ;)

P.S. Первая попытка была с BDE и там почти всё получилось. Однако потом я вычитал, что слишком много мороки с BDE на пользовательских машинах (где нет билдера) и стал юзать ADO.
P.P.S. Прошу ткнуть носом в документацию, где написано что может то или иное существо, по типу ADOQuery1->блабла... и DBGrid1->блабла... Например требуется аналог Table->Close(), типа DBGrid->Close(), но такого нет и не знаю шо юзать :(
С Уважением, хоря.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.05.2011, 19:41
Ответы с готовыми решениями:

Показать в DBGrid сортировку из Combobox и 2х ADOQuery
Есть форма. На ней 2 datatimepicker, кнопка выбор и combobox в котором отображаются записи из Adoquery. При выборе интервала дат и...

DBGrid и ADOQuery
Ситуация такая: есть DBGrid в который выводится информация из БД (Access). Этот DBGrid подключен к ADOQuery, который в свою очередь...

вопросы по ADO
1. недавно начал изучать компоненты ADO, заметил что многие используют ADODataSet или ADOQuery вместе с ADOCommand, вот теперь возник...

18
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
12.05.2011, 22:22
1) нужно подменить имя таблицы в свойстве TableName класса таблицы, либо в тексте запроса класса sql-запроса
2) какой тип данных поля, по которому идет поиск(для строковых и дат нужно обрамлять значение одинарными кавычками)
3) навигатор только предоставляет инструментарий для манипуляций данными, больше он никак на TDBGrid не влияет
4) Application->ExeName (полный путь к исполняемому файлу)
1
 Аватар для xopkep
0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 17
12.05.2011, 22:36  [ТС]
Цитата Сообщение от Lord_Voodoo Посмотреть сообщение
2) какой тип данных поля, по которому идет поиск(для строковых и дат нужно обрамлять значение одинарными кавычками)
Так оно обрамлено - \047 и все равно ошибка. Я пробовал и двойной кавычкой и апострофом. тип данных... varchar собсна.
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
12.05.2011, 22:40
xopkep, в вашем коде обрамлено имя таблицы, а не значение искомого поля... а вообще в базе самой пробовали ваш запрос выполнять?
0
 Аватар для xopkep
0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 17
13.05.2011, 06:26  [ТС]
Lord_Voodoo, таблицу я тоже оборачиваю в кавычки, там русские имена с пробелами. естественно что и запрос будет обернут ибо в нем могут быть пробелы. в самой базе запрос SELECT * FROM 'tablename' выдает то, что ожидается, т.е. все записи таблицы, в программе выдает синтаксическую ошибку
0
 Аватар для xopkep
0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 17
15.05.2011, 16:21  [ТС]
Обрамление нифига не помогает. в упор не делается селект никакой.

Lord_Voodoo, А за 1) и 4) спасибо, сделал.

C++
1
ADOTable1->TableName = ListBox1->Items->Strings[ListBox1->ItemIndex];
(Поменял выбор таблицы в комбобоксе на выбор в листбоксе)
C++
1
2
3
4
        String WayToBase=ExtractFilePath(Application->ExeName)+"data.db";
        ADOConnection1->Connected = false;
        ADOConnection1->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin;Data Source="+WayToBase+";Mode=ReadWrite;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False";
        ADOConnection1->Connected = true;
Так выглядит поиск базы в текущей папке и задание ConnectionString...

Кстати DBNafigator убрал совсем ибо не нужен. Осталась проблема с поиском (ака SQL-запросом)
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
15.05.2011, 16:40
Тебе надо через Edit совершить поиск? в любой таблице?
0
 Аватар для xopkep
0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 17
15.05.2011, 16:46  [ТС]
Ну грубо говоря да. Но у меня не получается выборку сделать даже в одной таблице.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
15.05.2011, 16:52
Вот тебе пример переделай под себя
C++
1
2
3
4
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("Select * from Glavnaya WHERE  Number_in_Lan LIKE '"+Edit1->Text+"'");
ADOQuery1->Open();
0
 Аватар для xopkep
0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 17
15.05.2011, 17:12  [ТС]
C++
1
2
3
4
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("Select * from 'Магистраль М-1' WHERE pairs LIKE '"+Edit1->Text+"'");
ADOQuery1->Open();
На скрине привычный уже ответ: "Синтаксическая ошибка в запросе. Неполное предложение запроса"
Миниатюры
Вопросы по ADO, ADOQuery, DBGrid, ComboBox  
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
15.05.2011, 17:55
Во-первых убери одинарные кавычки.
Во-вторых убери пробел между Магистраль и М-1;
В-третьих переименую имя таблицы на латинницу.
В твоём случае рабочий вариант будет такой, но только тогда, когда переименуешь имя таблицы
C++
1
2
3
4
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("Select * from Magistral_M-1 WHERE pairs LIKE '"+Edit1->Text+"'");
ADOQuery1->Open();
1
 Аватар для xopkep
0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 17
15.05.2011, 20:30  [ТС]
Все это гребанный аксес... таблицу надо брать в [скобки]. уже переименовал в ангельские (только теперь придется ще гуглить как алиасы для листбокс\комбобокс писать), однако если взять таблицу в [], то и с русскими работает.
Теперь проблема в том, что "11" != "1/11", но наверное это уже вопрос к аксесу а не в эту ветку.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
15.05.2011, 23:28
Цитата Сообщение от xopkep Посмотреть сообщение
Теперь проблема в том, что "11" != "1/11", но наверное это уже вопрос к аксесу а не в эту ветку.
Что это за условие?
1
 Аватар для xopkep
0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 17
16.05.2011, 06:33  [ТС]
Если я ищу 11 пару первой магистрали, там получается типа так:
SQL
1
2
3
SELECT *
FROM [magistral-m1]
WHERE pairs LIKE "%11%"
А в базе забито 1/11, что не совпадает с 11, *11* или %11%.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
16.05.2011, 09:05
А так?
C++
1
WHERE pairs LIKE "1%"
или так
C++
1
WHERE pairs LIKE "1*"
1
 Аватар для xopkep
0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 17
16.05.2011, 19:30  [ТС]
"1%" ищет и находит все 1* , но... 11 оно уже не найдет же.
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
17.05.2011, 09:39
перебирайте условия кляузами or:
aaa like '%11%' or aaa like '_/%' и т.д.
0
 Аватар для xopkep
0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 17
17.05.2011, 20:01  [ТС]
Кляузами я не уметь, сделал через OR и на этом пока остановился. Есть несколько других заморочек, которые надо активно гуглить или создавать темку здесь
0
 Аватар для xopkep
0 / 0 / 0
Регистрация: 28.07.2009
Сообщений: 17
21.05.2011, 12:16  [ТС]
Подведем итог для закрытия темы
1. Список таблиц выводится в ComboBox:
C++
1
2
        DMod1->ADOConnection1->GetTableNames(ComboBox1->Items);
        ComboBox1->ItemIndex=0;
Содержимое DBGrid1 меняется примерно так:
C++
1
ADOTable1->TableName = ComboBox1->Items->Strings[ComboBox1->ItemIndex];
2. Затык в поиске через SQL-запросы, оказался в синтаксисе самого SQL для MSAccess. Это все же к аксесу вопросы уже.

3. ХЗ. Удалил нафик этот нафигатор.

4. Привязка к относительному пути у меня получилась такая:
C++
1
2
3
4
        String WTBase=ExtractFilePath(Application->ExeName)+"data.db";
        Form1->ADOConnection1->Connected = false;
        Form1->ADOConnection1->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin;Data Source="+WTBase+";Mode=ReadWrite;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False";
        Form1->ADOConnection1->Connected = true;
База ищется в папке программы.
Всем спасибо, тема закрыта. (все свободны )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.05.2011, 12:16
Помогаю со студенческими работами здесь

Dbgrid adoquery sql
Доброго времени суток. Не понимаю как сделать (ведомость к оплате по заданому цеху с подсчетом общей суммы) тоесть я ввожу цех программа...

Запросы в ADOQuery и DBGrid
Привет, подскажите как сделать правильно, ибо уже перерылись все книги бестолку( У меня есть edit в который вводит пользователь номер...

Delphi7+ADOQuery+Access+DbGrid
Добрый день господа! Помогите решить проблемку. Есть таблица ADOBankBank: Key_b NDnja Rasxod Prixod KDnja Выведена в DbGrid. Как...

DBGrid, ADOQuery и запрос с Edit
Простите за простой вопрос, но полдня поисков не дало нужного результата. У меня не выводит данные запроса, введенный в Edit, в таблицу...

Привязать dbGrid к разным ADOQuery
На форме есть 2-DBGrid, 2-ADOQuery, 1-ADOConection, 1-DataSourse. Одна база данных .mdb. В базе данных 2е таблицы table1 и table2....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru