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

Проблемы с DBGrid

16.06.2009, 22:29. Показов 6500. Ответов 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
0 / 0 / 0
Регистрация: 16.06.2009
Сообщений: 21
08.07.2009, 15:27  [ТС]
Студворк — интернет-сервис помощи студентам
ага, работает, только там немного по-другому
WHERE (spravochnik.Name = \"Стер\" OR \"Стер\" =\"\" OR spravochnik.Name like \"Стер*\")

Добавлено через 34 секунды
я чёт непонимаю(
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
08.07.2009, 17:43
stan, слушай, ты можешь скинуть свой проект, я погляжу на него вблизи... потому что я тоже чего-то не понимаю
0
0 / 0 / 0
Регистрация: 16.06.2009
Сообщений: 21
08.07.2009, 19:54  [ТС]
ок а куда кидать?
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
08.07.2009, 22:28
ну нажми расширенный режим, и там есть управление вложениями, прикрепишь к посту на форуме
1
0 / 0 / 0
Регистрация: 16.06.2009
Сообщений: 21
09.07.2009, 06:51  [ТС]
Вот, вложил проект, спасибо за помощь
Вложения
Тип файла: rar Anton-test3.rar (699.2 Кб, 17 просмотров)
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
09.07.2009, 11:32
озадачил ты меня, вот такой код работает:
C++
1
2
3
4
5
6
           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 + " Like '"+ searchname+"%' OR " + nametabl1 + "." + namefield1 + " = '"+ searchname+"')\
           AND " + nametabl1 + "." + namefield2 + " = " + searchgnumber + " ");
           Form2->ADOQuery1->SQL->Add("ORDER BY " + nametabl1 + "." + namefield1); break;}
но нужно указать в Query свойство CursorLocation = clUseClient
0
0 / 0 / 0
Регистрация: 16.06.2009
Сообщений: 21
09.07.2009, 14:55  [ТС]
этот запрос конечно работает, но в том случае, если в поиске не вводить код, т.е. оставлять пустую строку, то опять-таки выводится ошибка, и я так и не могу понять, почему, все это работает, для 1-й таблицы, а для второй нет??? А за подсказку с % спасибо огромное, что опять не могу понять, в мануале написано, что нужно ставить *
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
09.07.2009, 17:27
stan, я не работаю с адо... есть предположение, что в аксессе надо писать звездочку, она отказывается работать, а адо наслудет tdataset, а там надо процент, хотя я свято верил, что надо придерживаться стандартов базы при формировании запроса... могу и ошибаться... а на счет пустого поля - надо формировать запрос исходя из введенных параметров, так оно удобнее... т.е. если код н пустой, тогда добавляешь в запрос условие с ним, иначе пропускаешь
0
0 / 0 / 0
Регистрация: 16.06.2009
Сообщений: 21
09.07.2009, 21:58  [ТС]
Я кстати разобрался, моя ошибка, и как оно оказываетс, особенно важное правило и не только для новичков: "сначала структура, потом данные".
В этой таблице была пустая строка с пустым ключевым полем...
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
09.07.2009, 22:00
та что с 0? видел, думал, так и задумано
1
0 / 0 / 0
Регистрация: 16.06.2009
Сообщений: 21
09.07.2009, 22:00  [ТС]
По ходу написания этой программы опять возникают глупые вопросы, если не трудно:
1. Как определить ширину строки прокрутки
2. По поводу создания собственного навигатора, мне уже писали, но я так и немогу разобраться...
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
09.07.2009, 22:05
1) у грида я опытным путем находил, для 1024 на 768 это где-то 17-19 пикселов
2) а что не получается-то? там кнопки делаешь и вызываешь методы источника данных грида (не DataSource, а Table или Query)
0
0 / 0 / 0
Регистрация: 16.06.2009
Сообщений: 21
09.07.2009, 22:15  [ТС]
у меня в проекте нет Table, значит надо в хелпе смотреть методы (не ивенты) Query?
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
09.07.2009, 22:33
они почти что все одинаковые
0
0 / 0 / 0
Регистрация: 16.06.2009
Сообщений: 21
09.07.2009, 22:45  [ТС]
А может есть какой-нить пример?
P.S. спасибо за ответы...
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
09.07.2009, 22:51
ну кнопки перемещения - это методы Next, Prior, First, Last
добавить - Insert
удалить - Delete
редактировать - Edit
сохранить - Post
0
0 / 0 / 0
Регистрация: 16.06.2009
Сообщений: 21
10.07.2009, 10:04  [ТС]
Нет, вопрос видимо неправильно поставил.
К этому же проекту я приклепляю еще 1 форму, в нее прилепляю DBGrid, ADOConnection, ADOQuery, ADODataSource.
Все это лежит на форме...
Рдеактировать данные прямо в DBGrid, дважды щелкнув, вот теперь, думаю каким образом внести эти изменения в базу.
C++
1
ADOQuery->Post();
- неподходит, или ему надо передать, какие поля редактируются?
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
10.07.2009, 10:58
если делать свой навигатор, то по умолчанию надо редактирование грида прикрывать и только при нажатии кнопок редактирования его открывать, а по посту снова закрывать
0
0 / 0 / 0
Регистрация: 16.06.2009
Сообщений: 21
10.07.2009, 12:27  [ТС]
Извиняюсь опять за такие вопросы, но...
Вот к примеру что я пытаюсь сделать, на этой форме, где DBGrid, ADOConnection, ADOQuery, ADODataSource. Я пишу:
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
//---------------------------------------------------------------------------
void __fastcall TForm3::Button1Click(TObject *Sender)
{
 ADOQuery1->Active = false;
 ADOQuery1->SQL->Clear();
 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] ");
 ADOQuery1->SQL->Add("ORDER BY spravochnik.Name");
 ADOQuery1->Active = true;
 ADOQuery1->ExecSQL();
 
  int widcol;
 widcol = (DBGrid1->Width)/(DBGrid1->FieldCount);
 
 for(int i = 0; i < (DBGrid1->FieldCount); i++)
   {
    if(DBGrid1->Fields[i]->FullName == "SNumber")//выбор ширины колонки, в зависимости от названия колонки
     {
      DBGrid1->Columns->Items[i]->Width = 84;
     }
    else if (DBGrid1->Fields[i]->FullName == "GNumber")
     {
      DBGrid1->Columns->Items[i]->Width = 84;
     }
     else if (DBGrid1->Fields[i]->FullName == "CNumber")
     {
      DBGrid1->Columns->Items[i]->Width = 92;
     }
    else
    DBGrid1->Columns->Items[i]->Width = widcol;//присвоение ширины колонки
 
    AnsiString colname;    // строка имени колонки
    AnsiString collable;   // строка присвоения lable колонки на русском
    colname = DBGrid1->Fields[i]->FullName; // получения имени колонки
    if(colname == "Name") //Меняем lable колонки на русские названия
     {
      collable = "Фамилия";
     }
    else if (colname == "FName")
    {
      collable = "Имя";
    }
    else if (colname == "SName")
    {
      collable = "Отчество";
    }
    else if (colname == "Org")
    {
      collable = "Организация";
    }
    else if (colname == "GNumber")
    {
      collable = "Газовый номер";
    }
    else if (colname == "CNumber")
    {
      collable = "Городской номер";
    }
    else if (colname == "SNumber")
    {
      collable = "Сотовый номер";
    }
    else if (colname == "Cabinet")
    {
      collable = "Номер кабинета";
    }
    else if (colname == "Job")
    {
      collable = "Должность";
    }
    else if (colname == "Division")
    {
      collable = "Подразделение";
    }
    DBGrid1->Fields[i]->DisplayLabel = collable;
   }
 
}
//---------------------------------------------------------------------------
void __fastcall TForm3::Button2Click(TObject *Sender)
{
 ADOQuery1->Edit();
}
//---------------------------------------------------------------------------
void __fastcall TForm3::Button3Click(TObject *Sender)
{
 ADOQuery1->Post();       
}
//---------------------------------------------------------------------------
Как открывать редактирования грида еще не разобрался, по нажатии кнопки, которая отвечает за пост, мне программа выдает ошибку: "Недостаточно сведений ключевого поля для обновления".
Я видимло что-то неправильно делаю?
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
10.07.2009, 12:35
я вот точно не помню, но редактировать запросы с несколькими таблицами можно только, если присутствуют ключевые поля в выборке вроде бы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.07.2009, 12:35
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru