Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2012, 18:12   #1
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию Сохранение данных при переподключении базы

Здраствуйте, подскажите как выдти из затруднительной ситуации...

Вообшем суть пробелмы в том что прога конектится к разным базам и выполняет один запрос.
Допустим есть два DbGrid`a подключаемся к первой базе, выполняем запрос, даныне видим, делаем переподключение к другой базе, данные из перовго DBGrid`a пропадают...
Как сохранять даные в дб гриде при переподключении базы? Использется IBDatabase, использовать несколько датабесов не вариант, т.к. таких подключений может быть неизвесное количество...
Dozent вне форума Ответить с цитированием
Старый 21.04.2012, 18:23   #2
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

Использовать ClientDataSet.
=master= вне форума Ответить с цитированием
Старый 21.04.2012, 18:55   #3
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

Эм, почитал про этот компонент, он мне не совсем подходит...
НУ и немного подумав я понял что проблема не в ДБгрид а в IBQuery, оно делает Close каждый раз когда делается запрос в другую базу, тут возникает вопрос, либо надо создать несколько IBQuery, либо не трогать его пока не опросит все базы, но тут возникает другая проблема результаты запроса из каждой базы надо записывать в новую таблицу для этого скорее както надо организовать разное подключение к DataSource, т.е. надо както сделать так чтоыб при получании данных из новой базы динамически создавался DataSource и новый DBGrid и соотвествено новый IBQruery потмоу что если менять DataSource связть также разорвётся и написав всё это я понял что надо искать другой подход к отображению данных, ну или подскажите как это всё можно организовать)
Dozent вне форума Ответить с цитированием
Старый 21.04.2012, 19:21   #4
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

ок, начнём помаленьку, подскажите пожайлуста, как динамически создать DBGrid на закладке TabControl под номером N ?
Dozent вне форума Ответить с цитированием
Старый 21.04.2012, 19:28   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Dozent
Я избрал вместо DBGrid обычной StringGrid, и при очередном подключении дописывал в конец грида новые данные. Намек понятен?
Цитата:
как динамически создать DBGrid
Ты точно уверен что хочешь несколько гридов? Ведь к ним придется создавать и несколько компонентов наборов.
Даже если так делать то лучше будет если это будет сделано в виде фреймов, на которых свои гриды и свои отдельные компоненты доступа к данным.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.04.2012, 19:33   #6
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

Чтобы запрос пошел на другую базу, надо менять контекст, т.е. именно сменить IBDatabase или переконектить его, что по сути одно и тоже.
Один IBQruery вам не поможет.

А вот что вы хотите в итоге получить не очень понятно.
Если на каждую базу иметь по гриду, тогда придется делать столько же контекстов
( IBDatabaseХ - IBQrueryХ - DataSourceХ - DBGridХ ), и при чем все активные, пока данные хотите видеть.

Вариантов показа хватает, например TabControl, еще MDI можно (но это уже устарело) ...
=master= вне форума Ответить с цитированием
Старый 21.04.2012, 19:39   #7
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

ну как раз на закладках TabControl каждую таблицу и хочу отображать
ДА я понимаю что придётся делать отдельный набор компонентов на каждое подключение, но пока я невижу альтернативного отображение даных, есть конечно вариант, получать в невидимый ДБгрид данные и изнего переносить в стринг грид и просто дописывать даные указывая из какой базы они получены, но этот вариант я оставлю когда уже совсем ни чего не будит получатся...
Dozent вне форума Ответить с цитированием
Старый 21.04.2012, 19:53   #8
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

Подскажите что в парент написать? А то чото ни чо подобрать не могу

Код:
procedure TForm2.Button1Click(Sender: TObject);
var
i:integer;
begin
 for i:=0 to 3 do
  begin
   TabControl1.Tabs.Add(IntToStr(i));
   with TDBGrid.Create(Self) do
    begin
      Name := 'DBGrid';
      Parent:=TabControl1...
      Align := alClient;
     // DataSource := OraDataSource;
      Visible:=true;
    end;
  end;
end;
Dozent вне форума Ответить с цитированием
Старый 21.04.2012, 19:54   #9
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

Ну для переноса данных в StringGrid невидимого дбгрида вовсе ненадо иметь, у вас уже есть датасет (IBQruery), его вполне достаточно.

А откуда взялось много баз и где они расположены? Может сделать еще одну, либо таблицу в какойнить "главной" и туда сливать данные с указанием исходной, а отображать уже оттуда?
=master= вне форума Ответить с цитированием
Старый 21.04.2012, 19:57   #10
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

Цитата:
Подскажите что в парент написать?
Tabs.Add это функция.
=master= вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при создании Базы Данных YaMolekula C/C++ Базы данных 3 31.10.2011 16:03
сохранение/считывание данных при закрытии/открытии программы Ирида C++ Builder 3 21.10.2011 13:48
Проблемы при записи и считыванияиз базы данных Aleksandr Общие вопросы Delphi 5 14.06.2011 23:52
Сохранение данных при совместном доступе ELE-COM Microsoft Office Excel 7 16.05.2010 20:45
Сохранение и загрузка узлов TreeView из базы данных Ko$tello Компоненты Delphi 1 14.11.2006 17:15