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

Проблемы с DBGrid

16.06.2009, 22:29. Просмотров 4950. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.06.2009, 22:29
Ответы с готовыми решениями:

Проблемы при выводе в DBgrid
У меня в Table1, цена выводится со знаком вопроса: Как сделать нормальный...

[C++ builder XE] DBGrid. Удаление/добавление/изменение БД mysql через DBGrid
Здравствуйте! Возможно тема заезженная, но не чего путнего не нашел(может...

Добавление записи в DBGrid и получение записи в DBGrid Другой формы
К проекту подключена Access .mdb БД. Имеется 2 формы. На обоих формах есть...

DBGrid
Ребзя есть вопрос к вам!! Помогите как в DBGride Убрать вообще выделение...

DBGRID
НЕОБХОДИМО ЧТОБ ПРИ НАЖАТИИ НА ПОЛЕ ДБ ГРИД ИНФОРМАЦИЯ ЗАНПАСИЛАСЬ В ЭДИТ...

40
stan
0 / 0 / 0
Регистрация: 16.06.2009
Сообщений: 21
08.07.2009, 15:27  [ТС] 21
ага, работает, только там немного по-другому
WHERE (spravochnik.Name = \"Стер\" OR \"Стер\" =\"\" OR spravochnik.Name like \"Стер*\")

Добавлено через 34 секунды
я чёт непонимаю(
0
Lord_Voodoo
Супер-модератор
8609 / 2240 / 133
Регистрация: 07.03.2007
Сообщений: 10,829
Завершенные тесты: 1
08.07.2009, 17:43 22
stan, слушай, ты можешь скинуть свой проект, я погляжу на него вблизи... потому что я тоже чего-то не понимаю
0
stan
0 / 0 / 0
Регистрация: 16.06.2009
Сообщений: 21
08.07.2009, 19:54  [ТС] 23
ок а куда кидать?
0
Lord_Voodoo
Супер-модератор
8609 / 2240 / 133
Регистрация: 07.03.2007
Сообщений: 10,829
Завершенные тесты: 1
08.07.2009, 22:28 24
ну нажми расширенный режим, и там есть управление вложениями, прикрепишь к посту на форуме
1
stan
0 / 0 / 0
Регистрация: 16.06.2009
Сообщений: 21
09.07.2009, 06:51  [ТС] 25
Вот, вложил проект, спасибо за помощь
0
Вложения
Тип файла: rar Anton-test3.rar (699.2 Кб, 16 просмотров)
Lord_Voodoo
Супер-модератор
8609 / 2240 / 133
Регистрация: 07.03.2007
Сообщений: 10,829
Завершенные тесты: 1
09.07.2009, 11:32 26
озадачил ты меня, вот такой код работает:
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
stan
0 / 0 / 0
Регистрация: 16.06.2009
Сообщений: 21
09.07.2009, 14:55  [ТС] 27
этот запрос конечно работает, но в том случае, если в поиске не вводить код, т.е. оставлять пустую строку, то опять-таки выводится ошибка, и я так и не могу понять, почему, все это работает, для 1-й таблицы, а для второй нет??? А за подсказку с % спасибо огромное, что опять не могу понять, в мануале написано, что нужно ставить *
0
Lord_Voodoo
Супер-модератор
8609 / 2240 / 133
Регистрация: 07.03.2007
Сообщений: 10,829
Завершенные тесты: 1
09.07.2009, 17:27 28
stan, я не работаю с адо... есть предположение, что в аксессе надо писать звездочку, она отказывается работать, а адо наслудет tdataset, а там надо процент, хотя я свято верил, что надо придерживаться стандартов базы при формировании запроса... могу и ошибаться... а на счет пустого поля - надо формировать запрос исходя из введенных параметров, так оно удобнее... т.е. если код н пустой, тогда добавляешь в запрос условие с ним, иначе пропускаешь
0
stan
0 / 0 / 0
Регистрация: 16.06.2009
Сообщений: 21
09.07.2009, 21:58  [ТС] 29
Я кстати разобрался, моя ошибка, и как оно оказываетс, особенно важное правило и не только для новичков: "сначала структура, потом данные".
В этой таблице была пустая строка с пустым ключевым полем...
0
Lord_Voodoo
Супер-модератор
8609 / 2240 / 133
Регистрация: 07.03.2007
Сообщений: 10,829
Завершенные тесты: 1
09.07.2009, 22:00 30
та что с 0? видел, думал, так и задумано
1
stan
0 / 0 / 0
Регистрация: 16.06.2009
Сообщений: 21
09.07.2009, 22:00  [ТС] 31
По ходу написания этой программы опять возникают глупые вопросы, если не трудно:
1. Как определить ширину строки прокрутки
2. По поводу создания собственного навигатора, мне уже писали, но я так и немогу разобраться...
0
Lord_Voodoo
Супер-модератор
8609 / 2240 / 133
Регистрация: 07.03.2007
Сообщений: 10,829
Завершенные тесты: 1
09.07.2009, 22:05 32
1) у грида я опытным путем находил, для 1024 на 768 это где-то 17-19 пикселов
2) а что не получается-то? там кнопки делаешь и вызываешь методы источника данных грида (не DataSource, а Table или Query)
0
stan
0 / 0 / 0
Регистрация: 16.06.2009
Сообщений: 21
09.07.2009, 22:15  [ТС] 33
у меня в проекте нет Table, значит надо в хелпе смотреть методы (не ивенты) Query?
0
Lord_Voodoo
Супер-модератор
8609 / 2240 / 133
Регистрация: 07.03.2007
Сообщений: 10,829
Завершенные тесты: 1
09.07.2009, 22:33 34
они почти что все одинаковые
0
stan
0 / 0 / 0
Регистрация: 16.06.2009
Сообщений: 21
09.07.2009, 22:45  [ТС] 35
А может есть какой-нить пример?
P.S. спасибо за ответы...
0
Lord_Voodoo
Супер-модератор
8609 / 2240 / 133
Регистрация: 07.03.2007
Сообщений: 10,829
Завершенные тесты: 1
09.07.2009, 22:51 36
ну кнопки перемещения - это методы Next, Prior, First, Last
добавить - Insert
удалить - Delete
редактировать - Edit
сохранить - Post
0
stan
0 / 0 / 0
Регистрация: 16.06.2009
Сообщений: 21
10.07.2009, 10:04  [ТС] 37
Нет, вопрос видимо неправильно поставил.
К этому же проекту я приклепляю еще 1 форму, в нее прилепляю DBGrid, ADOConnection, ADOQuery, ADODataSource.
Все это лежит на форме...
Рдеактировать данные прямо в DBGrid, дважды щелкнув, вот теперь, думаю каким образом внести эти изменения в базу.
C++
1
ADOQuery->Post();
- неподходит, или ему надо передать, какие поля редактируются?
0
Lord_Voodoo
Супер-модератор
8609 / 2240 / 133
Регистрация: 07.03.2007
Сообщений: 10,829
Завершенные тесты: 1
10.07.2009, 10:58 38
если делать свой навигатор, то по умолчанию надо редактирование грида прикрывать и только при нажатии кнопок редактирования его открывать, а по посту снова закрывать
0
stan
0 / 0 / 0
Регистрация: 16.06.2009
Сообщений: 21
10.07.2009, 12:27  [ТС] 39
Извиняюсь опять за такие вопросы, но...
Вот к примеру что я пытаюсь сделать, на этой форме, где 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
Супер-модератор
8609 / 2240 / 133
Регистрация: 07.03.2007
Сообщений: 10,829
Завершенные тесты: 1
10.07.2009, 12:35 40
я вот точно не помню, но редактировать запросы с несколькими таблицами можно только, если присутствуют ключевые поля в выборке вроде бы
0
10.07.2009, 12:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2009, 12:35

Button,DbGrid
В общем на форме разместила кнопку Button и нужно сделать так чтобы по ее...

DBGrid не обновляется
Ребят, чего-то не могу разобраться в чем может быть проблема. На второй форме...

Работа с DBgrid
Привет всем! Ребят у меня такой вопрос: как в DBGrid изменить в столбце...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru