Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/32: Рейтинг темы: голосов - 32, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 16.06.2009
Сообщений: 21

Проблемы с DBGrid

16.06.2009, 22:29. Показов 6546. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, я новичок, у меня возникли следующие проблемки:
На форме имеются ADOConnection, ADOQuery, DataSource, DBGrid
Соответственно ADOConnection настраиваю на базу данных Access, ADOQuery на ADOConnection, а DataSource на ADOQury. Соответственно DBGrid на DataSource.
При создании формы, пишу запрос на вывод таблиц из Access:
C++
1
ADOQuery1->SQL->Add("SELECT spravochnik.[Name], spravochnik.[FName], spravochnik.[SName], spravochnik.[Org], data.[Job], data.[Division], data.[GNumber], data.[CNumber], data.[SNumber] FROM spravochnik LEFT JOIN data ON spravochnik.[GNumber]=data.[GNumber] ");
Таблица выводится, все хорошо, но вот только есть пара проблем:
1. Размер столбцов слишком большой, все столбцы не влезают в ширину окна...
2. Названия столбцов в Access'е я сделал на англ. языке, для более простого и корректного (в плане кодировки) написания запросов, и в DBGrid они отображаются тоже на англ. языке, хотелось бы на русском...
Если не составит труда, будьте добры, кто знает ответ...
P.S. Если необходимо могу отправить проект.
P.P.S. Заранее благодарю за ответ.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.06.2009, 22:29
Ответы с готовыми решениями:

Проблемы при выводе в DBgrid
У меня в Table1, цена выводится со знаком вопроса: Как сделать нормальный вывод? В Database Desktop формат стоит - $(Money)

Проблемы с DBGrid
Здравствуйте уважаемые программисты форума! Возникла проблема при написании курсового проекта. В программе DBGrid каждую строчку...

DBGrid. Проблемы со связью
Здравствуйте! никак не могу справиться с проблемой. курсовая "турфирма". Хочу, чтоб при выборе страны, и нажатии на кнопку "О...

40
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
16.06.2009, 22:46
1.
C++
1
TCustomDBGrid::Columns::Items[index]::Width
2.
C++
1
TField:DisplayLabel
и назначай что хочешь
1
0 / 0 / 0
Регистрация: 16.06.2009
Сообщений: 21
17.06.2009, 06:56  [ТС]
1. Я не могу понять, каким образом определить index, в самом DBGrid изначально отсутствуют столбцы, они появляются только после выполнения запроса SQl к базе Access.
C++
1
1 TCustomDBGrid::Columns::Items[index]::Width
Может быть после выполнения запроса, где-то появляются эти index?
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
17.06.2009, 09:02
stan, вообще структуру грида вы можете создать сами с помощью колонок, что-то вроде такого:
C++
1
2
3
4
5
6
7
8
9
10
void __fastcall TMainForm::SetField()
{
  TColumn *Column;
  for(int i = 0; i < DataSource1->DataSet->FieldCount - 4; i++){
    Column = DBGrid1->Columns->Add();
    Column->Field = DataSource1->DataSet->Fields->Fields[i];
    Column->Title->Caption = IInterface->GridInfo->Strings[i];
    Column->Alignment = taCenter;
  }
}
1
0 / 0 / 0
Регистрация: 16.06.2009
Сообщений: 21
17.06.2009, 15:04  [ТС]
С размерами столбцов, вроде разобрался, просто написал функцию, которая проверяет ширину DBGrid, и делит на количество столбцов:
C++
1
2
3
4
5
6
int widthcolumn;
widthcolumn = (DBGrid->Width)/(DBGrid->FieldCount);
for(int i = 0; i < (DBGrid->FieldCound); i++)
{
DBGrid->Columns->items[i]->Width = widcol;
}
По ширине столбцов, все становится вроде как нормально.
Только вот вопрос имен столбцов, остается открытым, имена переносятся из базы Access, а они там по-английски.
Пытался присвоить:
C++
1
DBGrid->Fields[1]->Name = "АБВГД";
Но билдер выдает ошибку.
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
17.06.2009, 15:11
так не имя же надо полю задавать, а либо колонке Caption, либо DisplayLabel для поля
1
0 / 0 / 0
Регистрация: 16.06.2009
Сообщений: 21
25.06.2009, 15:16  [ТС]
Извиняюсь, снова за вопрос, но в ходе работы возникла опять проблема, теперь я создал отдельную форму поместил на нее также DBGrid, DBNavigator, пытаюсь редактировать базу с его помощью. База состоит из 2-х связанных таблиц. При попытке изменения полей второй таблицы, билдер выдает ошибку: 'Недостаточно сведений ключевого поля для обновления'.
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
25.06.2009, 15:30
по моему скромному опыту скажу так: ну его в топку этот навигатор... проще свой создать, он хоть будет управляемый... на счет связанных таблиц, то редактировать можно те из них, у которых представлены ключевые поля в таблице (вроде бы так, точно не помню), но лучше все же по отдельности... проще всего и, кстати, быстрее всего редактировать запросами, но для этого я обычно создаю форму редактора... а там уже можно писать все, что угодно...
1
0 / 0 / 0
Регистрация: 16.06.2009
Сообщений: 21
25.06.2009, 17:44  [ТС]
извиняюсь опять за тупые вопросы:
1. создать самому навигатор - это хорошо, но к сожалению, я пока не знаю как...
2. можно хотябы один пример запроса редактирования, или же литературу, какую-нить...
Таблицы конечно связаны ключевыми полями
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
26.06.2009, 01:17
не про связку речь, а про их указание в select...
1) всего лишь почитайтие ман по TQuery и TTable, там все ответы
2) изучайте sql, желательно под свою базу, потому что стандарт единый, но в каждой из них есть свои особенности
0
0 / 0 / 0
Регистрация: 16.06.2009
Сообщений: 21
08.07.2009, 07:08  [ТС]
Доброго времени суток, все в ту же тему вопрос:
Делаю поиск по таблицам, в 1-й таблице пишу запрос:
C++
1
Form2->ADOQuery1->SQL->Add("WHERE (" + nametabl1 + "." + namefield1 + " = \"" + searchname + "\" OR \"" + searchname + "\" =\"\" OR " + nametabl1 + "." + namefield1 + " like \"" + searchname + "*\") AND (" + nametabl2 + "." + namefield6 + " = \"" + searchdivision + "\" OR \"" + searchdivision + "\" = \"\" OR " + nametabl2 + "." + namefield6 + " like \"" + searchdivision + "\") AND (Cstr(" + nametabl1 + "." + namefield7 + ") = \"" + searchgnumber + "\" OR \"" + searchgnumber + "\" = \"\" OR CStr(" + nametabl1 + "." + namefield7 + ") like \"" + searchgnumber + "\") ");
Поиск по этой таблице работает практически нормально, единственное, когда вводится, например неполное имя поиск ничего не выдает, хотя есть оператор "like".
А по другой таблице пишу:
C++
1
Form2->ADOQuery1->SQL->Add("WHERE(" + nametabl1 + "." + namefield1 + " = \"" + searchname + "\" OR \"" + searchname + "\" =\"\" OR " + nametabl1 + "." + namefield1 + " like \"" + searchname + "*\") AND (Cstr(" + nametabl1 + "." + namefield2 + ") = \"" + searchgnumber + "\")");
пишет: "Недопустимое использование Null".
P.S. Заранее благодарю за ответ...
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
08.07.2009, 09:58
а вы смотрели, какие данные туда попадают, все переменные заполнены? просто в режиме трассировки гляньте, какой вид имеет у вас запрос... в первом, например, не везде стоят звездочки в условиях с Like
0
0 / 0 / 0
Регистрация: 16.06.2009
Сообщений: 21
08.07.2009, 11:13  [ТС]
По поводу первого запроса добавил * в like, вывел эту же строку в ShowMessage(...), выдает нормальный запрос со звездочками, где надо, но к сожалению, все-равно не ищет неполные строки( Я новичок, а как посмотреть какой вид имеет запрос?
А по поводу второго, вместо всех этих переменных, пишу обычный запрос, просто как строку, ищет нормально, но опять-таки Like не работает...
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
08.07.2009, 11:24
а вы эти запросы проверяли в самом аксессе? они там нормально работают?
а все значения можно увидеть в режиме пошагового выполнения программы...
0
0 / 0 / 0
Регистрация: 16.06.2009
Сообщений: 21
08.07.2009, 12:20  [ТС]
режим пошагового запуска программы, запускается F7, а где посмотреть состояние запросов?
Первый запрос со всеми звездочками в access работает нормально, второй запрос тоже (но он выдает в билдере ошибку: Недопустимое использование Null).
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
08.07.2009, 12:30
stan, добавь breakpoint для AdoQuery->SQL->Text, только для своих запросов, и остановись после формирования самих запросов и глянь, что там храниться
0
0 / 0 / 0
Регистрация: 16.06.2009
Сообщений: 21
08.07.2009, 13:29  [ТС]
Вот, теперь получилось посмотреть, вроде все нормально, если чего не проглядел:
1.
SQL
1
2
3
4
5
6
"SELECT spravochnik.[Name], spravochnik.[FName], spravochnik.[SName], spravochnik.[Org], data.[Job], data.[Division], data.[GNumber], data.[CNumber], data.[SNumber] 
FROM spravochnik LEFT JOIN data ON spravochnik.[GNumber]=data.[GNumber] 
\r\nWHERE (spravochnik.Name = \"Стер\" OR \"Стер\" =\"\" OR spravochnik.Name like \"Стер*\") 
AND (data.Division = \"Ц\" OR \"Ц\" = \"\" OR data.Division like \"Ц*\") 
AND (Cstr(spravochnik.GNumber) = \"324\" OR \"324\" = \"\" OR CStr(spravochnik.GNumber) like \"324*\") 
\r\nORDER BY spravochnik.Name\r\n"
2.
SQL
1
2
3
"SELECT Directions.Direction, Directions.Kod, Directions.Lsr, Directions.Switch, Directions.Pbx, Directions.ICNum FROM Directions 
\r\nWHERE (Directions.Direction = \"Москва\" OR \"Москва\" =\"\" OR Directions.Direction like \"Москва*\") AND (Cstr(Directions.Kod) = \"700\")
\r\nORDER BY Directions.Direction\r\n"
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
08.07.2009, 13:44
у тебя точно рабочие запросы, потому что мне они что-то сильно глаза режут
0
0 / 0 / 0
Регистрация: 16.06.2009
Сообщений: 21
08.07.2009, 13:57  [ТС]
1-й запрос работает, но только вот с ним проблема с оператором like, он просто не работает...
А со вторым сложнее билдер выдает ошибку "Недопустимое использование NULL"
Вот полностью код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
void __fastcall TForm1::ASearchExecute(TObject *Sender)
{
 AnsiString nametabl1;
 AnsiString nametabl2;
 AnsiString namefield1;
 AnsiString namefield2;
 AnsiString namefield3;
 AnsiString namefield4;
 AnsiString namefield5;
 AnsiString namefield6;
 AnsiString namefield7;
 AnsiString namefield8;
 AnsiString namefield9;
 AnsiString searchname;
 AnsiString searchdivision;
 AnsiString searchgnumber;
 
 switch (PageControl1->ActivePageIndex){
 case 0 :{ nametabl1 = "spravochnik";
           nametabl2 = "data";
           namefield1 = "Name";
           namefield2 = "FName";
           namefield3 = "SName";
           namefield4 = "Org";
           namefield5 = "Job";
           namefield6 = "Division";
           namefield7 = "GNumber";
           namefield8 = "CNumber";
           namefield9 = "SNumber";
           searchname = Edit1->Text;
           searchdivision = Edit2->Text;
           searchgnumber = Edit3->Text;
           Form2->ADOQuery1->Active = false;
           Form2->ADOQuery1->SQL->Clear();
           Form2->ADOQuery1->SQL->Add("SELECT " + nametabl1 + ".[" + namefield1 + "], " + nametabl1 + ".[" + namefield2 + "], " + nametabl1 + ".[" + namefield3 + "], " + nametabl1 + ".[" + namefield4 + "], " + nametabl2 + ".[" + namefield5 + "], " + nametabl2 + ".[" + namefield6 + "], " + nametabl2 + ".[" + namefield7 + "], " + nametabl2 + ".[" + namefield8 + "], " + nametabl2 + ".[" + namefield9 + "] FROM " + nametabl1 + " LEFT JOIN " + nametabl2 + " ON " + nametabl1 + ".[" + namefield7 + "]=" + nametabl2 + ".[" + namefield7 + "] ");
           Form2->ADOQuery1->SQL->Add("WHERE (" + nametabl1 + "." + namefield1 + " = \"" + searchname + "\" OR \"" + searchname + "\" =\"\" OR " + nametabl1 + "." + namefield1 + " like \"" + searchname + "*\") AND (" + nametabl2 + "." + namefield6 + " = \"" + searchdivision + "\" OR \"" + searchdivision + "\" = \"\" OR " + nametabl2 + "." + namefield6 + " like \"" + searchdivision + "\") AND (Cstr(" + nametabl1 + "." + namefield7 + ") = \"" + searchgnumber + "\" OR \"" + searchgnumber + "\" = \"\" OR CStr(" + nametabl1 + "." + namefield7 + ") like \"" + searchgnumber + "\") ");
           Form2->ADOQuery1->SQL->Add("ORDER BY " + nametabl1 + "." + namefield1); break;}
 
 case 1 :{ nametabl1 = "Directions";
           namefield1 = "Direction";
           namefield2 = "Kod";
           namefield3 = "Lsr";
           namefield4 = "Switch";
           namefield5 = "Pbx";
           namefield6 = "ICNum";
           searchname = Edit4->Text;
           searchgnumber = Edit5->Text;
 
           Form2->ADOQuery1->Active = false;
           Form2->ADOQuery1->SQL->Clear();
           Form2->ADOQuery1->SQL->Add("SELECT " + nametabl1 + "." + namefield1 + ", " + nametabl1 + "." + namefield2 + ", " + nametabl1 + "." + namefield3 + ", " + nametabl1 + "." + namefield4 + ", " + nametabl1 + "." + namefield5 + ", " + nametabl1 + "." + namefield6 + " FROM " + nametabl1 + " ");
           Form2->ADOQuery1->SQL->Add("WHERE(" + nametabl1 + "." + namefield1 + " = \"" + searchname + "\" OR \"" + searchname + "\" =\"\" OR " + nametabl1 + "." + namefield1 + " like \"" + searchname + "*\") AND (Cstr(" + nametabl1 + "." + namefield2 + ") = \"" + searchgnumber + "\")");
           Form2->ADOQuery1->SQL->Add("ORDER BY " + nametabl1 + "." + namefield1); break;}
 }
 
 Form2->ADOQuery1->Active = true;
 Form2->ADOQuery1->ExecSQL();
 Form2->ShowModal();
}
Вот таким образом я ищу по таблицам, если не сожно, может кто увидит в чем проблема?
P.S. Заранее спасибо за ответ...
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
08.07.2009, 14:03
вот такое работает?
что-то свежее:
spravochnik.Name = \"Стер\" OR \"Стер\" =\"\" OR spravochnik.Name like \"Стер*\
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.07.2009, 14:03
Помогаю со студенческими работами здесь

проблемы с dbgrid и excel
Суть вопроса в чём:есть таблица в экселе,её я подключил через ado и вывел с помощью dbgrid,прогрумма запускается,все данные отлично...

Проблемы с заголовков в DBgrid
Доброго времени суток. Есть код, который выводит всю таблицу в excel, кроме заголовков. Они у меня почему-то становятся одинаковыми-т.е....

проблемы с DBGrid, фильтрами и окном поиска
Всем гуру от Дельфи -хелп ми. Имеется форма с компонентом DBCRTLGrid и подключенной через BDE базой basa.dbf (на форме значит есть...

Проблемы с кодировкой при выгрузке данные в dbGrid
Здравствуйте, столкнулся с проблемой: Я использую MyDac для подключения к БД MySql и выгружаю данные в dbGrid, ну так вот после выгрузке...

Запросы: для выбранного в DBGrid сотрудника отобразить информацию в другом DBGrid
Добрый вечер! Вот какой вопрос необходимо для выбранного сотрудника в DBGrid отобразить информацию в другом DBGrid допустим об образовании....


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru