С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 09.05.2011
Сообщений: 57

SQL-запрос на загрузку таблиц из БД

08.02.2012, 23:21. Показов 2133. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Народ, как сделать так чтоб из объекта ComboBox1 можно было выбрать нужную таблицу, нажать кнопку "3агрузить" и в объект DBGrid1 загружалась выбранная таблица
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.02.2012, 23:21
Ответы с готовыми решениями:

Один sql запрос и несколько таблиц
Добрый вечер, подскажите как одним sql запросом внести данные в несколько таблиц сразу. Пишу begin Sozd_Query.Close; ...

SQL запрос из 9 таблиц и одинаковыми заголовками
Доброго времени суток. Вопрос такой: Есть 9 таблиц с абсолютно одинаковыми заголовками, но разными данными. Таблицы называются также по...

SQL запрос на вывод списка имеющихся таблиц в БД
Здравствуйте, подскажите пожалуйста, как написать SQL запрос в Delphi,так что бы можно было вывести список таблиц, которые есть в БД...

12
 Аватар для Укрпошта
10 / 12 / 1
Регистрация: 07.02.2012
Сообщений: 25
08.02.2012, 23:30
Сначала тебе нужно узнать запросом название столбцов таблицы.
А потом динамически присвоить их DBGrid1.
0
71 / 71 / 7
Регистрация: 19.07.2011
Сообщений: 357
08.02.2012, 23:35
1) На форме должен быть компонент DBGrid без всяких полей, голый
2) Datasource (например, MyDataSource) без указанного dataset
3) DBGrid должен брать данные из datasource MyDataSource.
4) При смене item в комбобоксе передавать выбранный Item в качестве имени dataset для этого MyDataSource
5) Открыть dataset - после этого в гриде должны показаться записи из выбранной таблицы
1
0 / 0 / 0
Регистрация: 09.05.2011
Сообщений: 57
08.02.2012, 23:42  [ТС]
zremas, ну а код можешь показать примерный
0
71 / 71 / 7
Регистрация: 19.07.2011
Сообщений: 357
09.02.2012, 00:08
Уточняю:

1) На форме должен быть компонент DBGrid без всяких полей, голый
2) Datasource (например, MyDataSource) с указанным dataset = Table1 (Database: DBDEMOS)
3) DBGrid должен брать данные из datasource MyDataSource.
4) При смене item в комбобоксе передавать выбранный Item в качестве имени таблицы для этого Table1
5) Открыть dataset - после этого в гриде должны показаться записи из выбранной таблицы

6) в ComboBox1 вписать для примера biolife.db, customer.db


Delphi
1
2
3
4
5
6
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
     Table1.Close;
     Table1.TableName:=ComboBox1.Text;
     Table1.Open;
end;
0
60 / 60 / 9
Регистрация: 04.02.2012
Сообщений: 214
09.02.2012, 00:09
На OnChange вешаешь:
Delphi
1
2
3
4
5
6
7
8
case combobox1.ItemIndex of
  1: begin 
        dbGrid1.datasource.dataset.active := false;
        dbGrid1.datasource.dataset := <другая таблица>;
        dbGrid1.datasource.dataset.active := true;
      end;
  ...
  // количество таблиц
0
71 / 71 / 7
Регистрация: 19.07.2011
Сообщений: 357
09.02.2012, 00:11
проектик для теста
Вложения
Тип файла: zip Projects.zip (5.2 Кб, 30 просмотров)
0
60 / 60 / 9
Регистрация: 04.02.2012
Сообщений: 214
09.02.2012, 00:15
Delphi
1
2
3
4
5
6
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
     Table1.Close;
     Table1.TableName:=ComboBox1.Text;
     Table1.Open;
end;
не соглашусь, а если на форме отображаются название таблиц на кириллице?
0
71 / 71 / 7
Регистрация: 19.07.2011
Сообщений: 357
09.02.2012, 00:19
Это же чисто пример, к тому же, если человек каким-то образом НАПОЛНЯЕТ комбобокс списком таблиц, подразумевается, что они валидные.
Согласен, что можно сделать вообще связку с неким третим датасетом, хранящим названия таблиц, и оброащаться к именам по коду через комбо.
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
09.02.2012, 12:03
Delphi
1
2
Сначала тебе нужно узнать запросом название столбцов таблицы.
А потом динамически присвоить их DBGrid1.
Бред

По теме.
При работе с любой базой ОБЯЗАТЕЛЬНО использовать объект-"концентратор". TADOConnection - для ADO, TDataBase - для BDE, TIBdataBase для Interbase/Firebird и т.д.
Через этот объект открывать и закрывать соединения (сессии), а также можно использовать некоторые функции "общего" плана. Например, получать список таблиц базы (GetTableNames) или список полей конкретной таблицы, управлять транзакциями и блокировками, собирать и анализировать диагностику и много другое)
Для выборки данных из любой таблицы (хранимки, функции, вью, скрипта и т.д.) нужно только одно - компонент, обеспечивающий передачу на сервер текста запроса и получения от него результатов выборки. Компонент опять же зависит от того, с какой СУБД Вы работаете. Если с BDE, то это TTable/TQuery/TStoredProc, если ADO-TADODataSet, если IB, то TIBTable/TIBQuery/TIBDataSet
Объект можно создать как статически (в дизайне), после чего изменять нужные свойства для переключения с одной таблицы БД на другую, так и в ран-тайме, создавая по мере надобности (как это сделано в большинстве "штатных" клиентских СУБД-приложений: Query Analizer/DataBase DeskTop/IBExpert,Pl/SQL Developerl и т.д.) в многооконном интерфейсе.
Для отображения полученного датасета лучше и проще использовать TDBGrid, связанный с датасетом источником данных TDataSource. При этом надо помнить, что один источник данных может обслуживать только один датасет. Другими словами - сколько у Вас должно быть одновременно существующих датасетов для отображения (не обязательно видимых, например расположенных на разных вкладках TPageControl), столько же должно быть и источников данных и гридов соответственно.
При этом при открытии датасета происходит автонастройка как его, так и связанного с ним грида.
При этом проверяются "ручные" настройки, сделанные в дизайне. Поэтому если Вы хотите, чтобы один грид и один датасет соотв-но служил Вам для разных таблиц как универсальный, то в дизайне не следует настраивать ни датасет (не вызывать редактор полей, а если вызвали и создали коллекцию, то уничтожить ее, почистив список). Конечно, тут проблемка - в гриде отобразятся колонки таблицы БД в их "нативном" виде (как правило - на англицом), к тому же ширины колонок будут не совсем оптимальны (чаще всего совсем не оптимальны и работать с таким интерфейсом будет не очень приятно. Чтобы облагородить интнрфейс и получить, скажем что-то похожее на интерфейсы вышеприведенных штатных клиентов, нужно приложить немало усилий и времени, но это уже такое...
1
0 / 0 / 0
Регистрация: 09.05.2011
Сообщений: 57
09.02.2012, 13:11  [ТС]
MsGuns, я понимаю что вы все умные, могли и не доказывать.
Просто я лучше понимаю, когда вижу рабочий код.
Мне нужно сделать так, чтобы например в ComboBox1 я выбрал 10Б класс, нажал кнопку, и мне из БД загрузилась таблица 10Б класса в объект DBGrid1, потом например, я выбрал из списка 11В, и таблица 11В класса загрузилась бы в DBGrid1
Я такое на Бейсике видел, теперь мне на Делфи надо
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
09.02.2012, 13:42
Delphi
1
MsGuns, я понимаю что вы все умные, могли и не доказывать.
Да нет, не умные, а получается, что очень даже дураки.
Если пытаемся объяснить человеку причины его ошибок вместо того, чтобы просто написать за него готовый код )а лучше целиком проект)
У Вас нет необходимости в динамической перенастройке компонентов при смене таблиц т.к. таблицы однитипны (сама по себе идея строить БД по принципу "по таблице на класс - идиотическая" и говорит о полном непонимании сущности реляционных баз) и Вам для переключения с одной таблицы на другую просто надо что-то такое:
Delphi
1
2
3
Table1.Close;
Table1.TableName := 't11B';
Table1.Open;
Delphi
1
Я такое на Бейсике видел, теперь мне на Делфи надо
Так что ж Вам мешает портануть васиковский код в делфи, заменив при этом васиковское ADODB на компоненты закладки ADO ?

Добавлено через 3 минуты
Пардон, забыл салфетку, свечечку и пожелать "приятного аппетита":

Delphi
1
2
3
4
5
6
procedure TForm1.Button1Click(SEnter: TObject);
begin
  Table1.Close;
  Table1.TableName := ComboBox1.Text;
  Table1.Open;
end;
0
0 / 0 / 0
Регистрация: 09.05.2011
Сообщений: 57
09.02.2012, 13:56  [ТС]
MsGuns, я и не знал, что вы такой "вежливый"

Добавлено через 1 минуту
MsGuns, я к вашу сведенью, еще школьник, поэтому не знаю этот язык на вашем уровне. Можно было рассказать, научить, а не язвить!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.02.2012, 13:56
Помогаю со студенческими работами здесь

Доработать sql - запрос с выборкой из нескольких таблиц
Есть 3 таблицы все они связаны с одной по одному и тому же полю. Создал sql - запрос на выборку полей из этих таблиц. Запрос с...

QuickRep с выводом нескольких таблиц через SQL запрос
Нужна помощь с отчетом в QuickRep с выводом с помощью нескольких таблиц. Есть две таблицы - Заказ и Спец_заказ, связываются по номеру...

SQL-запрос: выбрать и считать отличающиеся записи двух таблиц
В двух таблицах есть организации, у которых одинаковый код, но изредка бывают разные названия. Как их считать? Выловить я их смог так: ...

Добавление данных в несколько таблиц (как правильно написать SQL-запрос?)
Добрый день. Уважаемые форумчане, пожалуйста, помогите:help:. Делаю диплом, но сроки уже поджимают. И темы читала, и ролики смотрела, не...

SQL запрос использование 2-х таблиц
Парни помогите понять в чем ошибка Мне нужно Найти Из Таблицы Договор по Коду_Договора, Код_Услуги из Таблицы Договор_Услуги и всю...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
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 с разными данными.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru