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

Вывод в DBGrid из нескольких таблиц

18.09.2012, 15:19. Показов 4930. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Подскажите пожалуйста есть База данных SQL в ней 2 таблицы. В одной таблице хранится вся информация, а в другой вспомогательная инфа. Например:
1-я таблица id,name,item_id,tel
2-я таблица id,item

Как можно вывести в DBGrid данные из первой таблицы, но в зависимости от того какой указан item.

Например если выбирается в ComboBox из списка который туда попадает после выполнения запроса к таблице item

Заранее благодарен.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.09.2012, 15:19
Ответы с готовыми решениями:

Вывод нескольких таблиц из БД в разные DBGrid
Собственно, есть программа, в которой необходимо вывести три таблицы из БД в DBGrid'ы. Всё уже сделал (почти), но, конечно же, в каждый...

Одинаковые записи таблиц DBGrid
В общем нужно создать такое условие, чтобы при попытке добавить запись из первой таблицы во вторую, проверялось наличие этой записи во...

Редактирование нескольких записей в DbGrid
Добрый день. Необходимо сделать проверку на совпадение текста в ячейке BDGrid'е и в Edit'е, и если они совпадают заменить в BDGrid'е на...

14
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
18.09.2012, 17:50
1) Я бы создал виртуальную таблицу и заполнял бы её в соответствии с нужными требованиями, а уж её бы привязывал к DBGrid.

2) Ещё можно фильтровать данные в первой таблице по каким-то критериям взятым из 2-й таблицы, соответственно DBGrid привязывается к 1-й таблице, но если нужно объединить отображаемые данные в DBGrid из 2-х таблиц, то 1-й вариант лучше... на мой взгляд.
1
5 / 5 / 0
Регистрация: 06.09.2011
Сообщений: 50
19.09.2012, 13:57  [ТС]
Добрый день. Что бы не плодить новых тем решил спросить в этой же теме.
Есть форма добавления данных в БД. Привожу код обработчика.
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "conn.h"
#include "New_Hotels.h"
 
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "sEdit"
#pragma link "sLabel"
#pragma link "sComboBox"
#pragma link "sBitBtn"
#pragma resource "*.dfm"
TNewHotels *NewHotels;
//---------------------------------------------------------------------------
__fastcall TNewHotels::TNewHotels(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TNewHotels::FormCreate(TObject *Sender)
{
    Form2->ADOSity->Close();
    Form2->ADOSity->SQL->Clear();
    Form2->ADOSity->SQL->Add("SELECT Sity FROM sity");
 
    /* from sity WHERE Sity LIKE '%"+sComboBox1->Text+"'");
 
                                        */
 
    Form2->ADOSity->Open();
       while (!Form2->ADOSity->Eof)
  {
  sSity->Items->Add(Form2->ADOSity->FieldByName("Sity")->AsString);
  Form2->ADOSity->Next();
 
  }
  Form2->ADOSity->Close();
}
//---------------------------------------------------------------------------
void __fastcall TNewHotels::sBitBtnAddClick(TObject *Sender)
{
 
 
// Form2->ADOSity->Active;
Form2->ADOSity->Close();
Form2->ADOSity->SQL->Clear();
AnsiString sity_id1;
 
Form2->ADOSity->SQL->Add("SELECT sity_id FROM Sity WHERE Sity LIKE '%"+sSity->Text+"%'");
Form2->ADOSity->Open();
sity_id1=Form2->ADOSity->FieldByName("sity_id")->AsInteger;
Form2->ADOSity->Close();
 
  sLabel->Caption=sity_id1;
  try
  {
//Form2->ADOHotels->Active;
Form2->ADOHotels->Close();
Form2->ADOHotels->SQL->Clear();
AnsiString queryadd;
queryadd="INSERT INTO hotels (name,sity_id,1_sum_net,1_sum_story,2_sum_net,2_sum_story,adress,e_mail,supplier,tel) VALUES ('"+sName->Text+"','sity_id1','"+s1_sum_net->Text+"','"+s1_sum_story->Text+"','"+s2_sum_net->Text+"','"+s2_sum_story->Text+"','"+sAdress->Text+"','"+sE_mail->Text+"','"+ssupplier->Text+"','"+sTel->Text+"')";
Form2->ADOHotels->SQL->Add(queryadd);
Form2->ADOHotels->Open();
  }
 catch (EDatabaseError&)
  {
Form2->ADOHotels->ExecSQL();
  }
Form2->ADOHotels->Close();
}
//---------------------------------------------------------------------------
И при выполнении кода выдает ошибку

Line 1: incorrect syntax near '1'

Не как не могу понять в чем моя ошибка.
Заранее благодарен.
0
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
19.09.2012, 15:39
если при выполнении, то можно отладчиком отловить в какой строке ошибка синтаксиса возникает. Я думаю что в одной из этих строк ошибка:
C++
1
Form2->ADOSity->SQL->Add("SELECT sity_id FROM Sity WHERE Sity LIKE '%"+sSity->Text+"%'");
или
C++
1
2
3
AnsiString queryadd;
queryadd="INSERT INTO hotels (name,sity_id,1_sum_net,1_sum_story,2_sum_net,2_sum_story,adress,e_mail,supplier,tel) VALUES ('"+sName->Text+"','sity_id1','"+s1_sum_net->Text+"','"+s1_sum_story->Text+"','"+s2_sum_net->Text+"','"+s2_sum_story->Text+"','"+sAdress->Text+"','"+sE_mail->Text+"','"+ssupplier->Text+"','"+sTel->Text+"')";
Form2->ADOHotels->SQL->Add(queryadd);
0
5 / 5 / 0
Регистрация: 06.09.2011
Сообщений: 50
19.09.2012, 16:28  [ТС]
Если отключить именно добавления записи то ошибка не возникает я это уже пробовал.

Ошибка именно при выполнении запроса на добавления данных. Вот только не пойму из-за чего именно. Вроде бы запрос написан корректно.
0
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
19.09.2012, 16:33
ошибка в текстовых строках - синтаксис запроса.
0
5 / 5 / 0
Регистрация: 06.09.2011
Сообщений: 50
19.09.2012, 17:10  [ТС]
В этих '"+sName->Text+"'
0
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
19.09.2012, 17:13
может быть символы '% не проходят...
0
5 / 5 / 0
Регистрация: 06.09.2011
Сообщений: 50
19.09.2012, 17:28  [ТС]
C++
1
Form2->ADOSity->SQL->Add("SELECT sity_id FROM Sity WHERE Sity LIKE '%"+sSity->Text+"%'");
Этот запрос обрабатывается корректно.

А вот при включении этого возникает ошибка.

C++
1
Form2->ADOHotels->SQL->Text = "INSERT INTO hotels (name,sity_id,adress,tel,1_sum_net,1_sum_story,2_sum_net,2_sum_story,e_mail,supplier) VALUES ('"+sName->Text+"','"+sLabel->Caption+"','"+sAdress->Text+"','"+sTel->Text+"','"+s1_sum_net->Text+"','"+s1_sum_story->Text+"','"+s2_sum_net->Text+"','"+s2_sum_story->Text+"','"+sE_mail->Text+"','"+ssupplier->Text+"')";
Вот я не как и не пойму из-за чего, что именно ему не нравиться.

Пробовал даже вот такой запрос та же ошибка.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Form2->ADOHotels->Close();
      Form2->ADOHotels->SQL->Clear();
      Form2->ADOHotels->SQL->Add("Insert Into hotels (name,sity_id,adress,tel,1_sum_net,1_sum_story,2_sum_net,2_sum_story,e_mail,supplier) Values (:a2,:a3,:a4,:a5,:a6,:a7,:a8,:a9,:a10,:a11)");
      Form2->ADOHotels->Parameters->ParamByName("a2")->Value=sName->Text;
      Form2->ADOHotels->Parameters->ParamByName("a3")->Value=StrToInt(sity_id);
      Form2->ADOHotels->Parameters->ParamByName("a4")->Value=sAdress->Text;
      Form2->ADOHotels->Parameters->ParamByName("a5")->Value=sTel->Text;
      Form2->ADOHotels->Parameters->ParamByName("a6")->Value=s1_sum_net->Text;
      Form2->ADOHotels->Parameters->ParamByName("a7")->Value=s1_sum_story;
      Form2->ADOHotels->Parameters->ParamByName("a8")->Value=s2_sum_net->Text;
      Form2->ADOHotels->Parameters->ParamByName("a9")->Value=s2_sum_story->Text;
      Form2->ADOHotels->Parameters->ParamByName("a10")->Value=sE_mail->Text;
      Form2->ADOHotels->Parameters->ParamByName("a11")->Value=ssupplier->Text;
      Form2->ADOHotels->ExecSQL();
Начинает выдавать приложение использует для текущей операции значения неверного типа
0
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
19.09.2012, 17:31
в какой конкретно строке из приведённых выше ?
0
5 / 5 / 0
Регистрация: 06.09.2011
Сообщений: 50
19.09.2012, 17:35  [ТС]
Цитата Сообщение от Kabak Посмотреть сообщение
в какой конкретно строке из приведённых выше ?
Я так и не смог понять.
0
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
19.09.2012, 17:40
а в отладчике нет возможности по строкам пройти ?
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
20.09.2012, 02:26
nmaryan,
Цитата Сообщение от nmaryan Посмотреть сообщение
А вот при включении этого возникает ошибка.
А какая именно ошибка возникает?
Line 1: incorrect syntax near '1'
- все время вот такая?

Попробуйте имена полей таблицы поместить в квадратные скобки, и переименовать поле "1_sum_net" на "FirstSumNet". Сообщите на что будет ругаться.
1
11 / 12 / 3
Регистрация: 11.06.2012
Сообщений: 189
20.09.2012, 18:32
Form2->ADOHotels->SQL->Add(queryadd);
Form2->ADOHotels->Open();

Попробуй вместо Open(); ExecSql();
0
5 / 5 / 0
Регистрация: 06.09.2011
Сообщений: 50
21.09.2012, 16:21  [ТС]
Цитата Сообщение от The_Immortal Посмотреть сообщение
nmaryan,

А какая именно ошибка возникает?
- все время вот такая?

Попробуйте имена полей таблицы поместить в квадратные скобки, и переименовать поле "1_sum_net" на "FirstSumNet". Сообщите на что будет ругаться.
Да.

Попробую так

Добавлено через 1 час 52 минуты
Спасибо. Переименования полей начинающихся с цифр действительно помогло.

Появился еще один вопрос, если тип поля varchar, то все записывается, а если Money то нет.
А как преобразовать данные. если в таблице SQL тип поля money

Преобразовать в тип int Можно Таким образом. StrToInt(onesumnet);

Добавлено через 5 часов 57 минут
Добрый день появился еще один вопрос.

Есть код обработчика
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
void __fastcall TForm1::sBitBtn1Click(TObject *Sender)
{
 
Form2->ADOSity->Active;
Form2->ADOSity->Close();
Form2->ADOSity->SQL->Clear();
AnsiString sity_id;
AnsiString sity;
AnsiString query;
 
 
 
Form2->ADOSity->SQL->Add("SELECT sity_id FROM Sity WHERE Sity LIKE '%"+sSity->Text+"%'");
Form2->ADOSity->Open();
sity_id=Form2->ADOSity->FieldByName("sity_id")->AsInteger;
Form2->ADOSity->Close();
 
    sLabelName->Caption=sity_id;
 
 
  if (sName->Text.Length()== 0 ) {
 
Form2->ADOHotels->SQL->Clear();
Form2->ADOHotels->SQL->Add("SELECT * FROM Hotels WHERE Sity_id='"+sLabelName->Caption+"'");
sBitBtn1->Cursor=crSQLWait;
Form2->DSHotels->DataSet=Form2->ADOHotels;
DBGrid1->DataSource=Form2->DSHotels;
try{
Form2->ADOHotels->Open();
}catch (Exception &exception)
{
Application->MessageBox(L"Ошибка при выполнении запроса либо нет записей,удовлетворяющих заданному критерию.",L"Сообщение", MB_OK);
Form2->ADOHotels->Close();
 sBitBtn1->Cursor=crDefault;
 return;
}
 
  }
   else
   {
Form2->ADOHotels->Close();
Form2->ADOHotels->SQL->Clear();
 
Form2->ADOHotels->SQL->Add("SELECT * FROM Hotels WHERE Name LIKE '%"+sName->Text+"%'");
sBitBtn1->Cursor=crSQLWait;
Form2->DSHotels->DataSet=Form2->ADOHotels;
DBGrid1->DataSource=Form2->DSHotels;
try{
Form2->ADOHotels->Open();
}
catch (Exception &exception)
{
Application->MessageBox(L"Ошибка при выполнении запроса либо нет записей,удовлетворяющих заданному критерию.",L"Сообщение", MB_OK);
Form2->ADOHotels->Close();
 sBitBtn1->Cursor=crDefault;
 return;
}
 
}
   if(Form2->ADOHotels->Fields->Fields[0]->AsString.Length()==0)
 {
 Application->MessageBox(L"Ошибка при выполнении запроса либо нет записей,удовлетворяющих заданному критерию.",L"Сообщение", MB_OK);
  Form2->ADOHotels->Close();return;
 
 }
 
 }
Так вот как сделать, что бы в одном из выводимых столбцов в DBGrid значение поля sity_id поменялось на данные из другой таблицы в зависимо от того что находится в этом поле.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.09.2012, 16:21
Помогаю со студенческими работами здесь

Редактирование в DBGrid нескольких dbf
Я загружаю в 6 DBF таблиц через BDE с помощью SQL запроса в DBGrid: SELECT Polz.ZAVOD_CODE, S_zav.ZAVOD_NAME, Polz.CEX_CODE,...

Вывод данных нескольких таблиц в dbgrid
День добрый! Есть три таблицы (структура одинакова, данные - нет, БД - MySQL, работаю через ADO). Хочется проводить поиск одновременно в...

DBgrid чтобы отображал запись из нескольких таблиц
Добрый день, необходимо понять, как сделать чтобы dbgrid отображал данные из нескольких таблиц одной БД. К примеру: у меня есть таблица...

Как загрузить данные из нескольких таблиц в DBGrid
Здравствуйте! Скажите,как мне открыть несколько таблиц в одном DBGrid если я использую ADOTable ??

Как вывести в DBGrid данные из нескольких таблиц, используя язык запросов?
Приветствую всех! ПИшу программу, создал бд в Access, хочу вывести в DBGrid данные из нескольких таблиц? как это сделать, используя язык...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru