| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > [C++ Builder] Модификация уже существующей БД |
| Автор: NordWolf 21.8.2007, 13:35 |
| Дело такое. Вот моя локальная БД. http://slil.ru/24762177 Таблицы в формате PARADOX. Среда программирования: C++ Builder 6. Установлен Interbase 6.5, но я его никак не использовал и пользоваться им не пробовал (не умею). Нужно модифицировать её так, чтобы таблицы находились на каком-либо сервере и при работе с данным я вызывал по определённому запросу (Весь список, либо по определённому критерию) нужную информацию, мог изменять её, добавлять новый элемент списка и сохранять. Если у вас получится это сделать (а я уверен, что для вас это тривиальная задача), то просьба объяснить как вы это сделали? Вообще это моя курсовая. Буду благодарен за любую помощь |
| Автор: NordWolf 22.8.2007, 12:40 |
| На сколько я знаю Paradox - локальная БД. И реализовать запросы для выборки определённой информации с таблицы можно только через InterBase. Я так понимаю? |
| Автор: Rodman 23.8.2007, 16:24 |
| Interbase и Paradox разные вещи... судя по твоим словам - ты открываешь Paradox'овские таблицы при помощи Interbase. просто не совсем понятна суть вопроса, вот и тишина... сформулируй по подробнее... если сам не совсем рубишь в этих делах, то друга (или спеца) какого нить попроси чтобы он написал на понятном языке (конечно предварительно обьяснив ситуацию ему)! |
| Автор: NordWolf 23.8.2007, 22:45 |
| Вообщем так. Использую я таблицы парадоксовские. А вот как сделать чтобы инфа этих таблиц хранилась на каком-либо сервере. При нажатии на команды ВЕСЬ СПИСОК, ИСПРАВИТЬ и др можно было бы загружать эту информацию к себе на комп, исправлять и отсылать в на сервер эти исправления. Наверное так будет понятней. Прошу прощения за неумелость объяснить всё по-человечески. собственно я уже пробовал сделать это здесь: http://forum.vingrad.ru/forum/act-ST/f-94/t-168665/unread-1.html Но там дают советы, которые я честно говоря не знаю как реализовать. |
| Автор: Rodman 27.8.2007, 12:05 |
| NordWolf, качай IBExpert - при помощи него создавай новую базу, потом при помощи DataPump (я не знаю что это, но думаю для экспорта базы из одной СУБД в другую) и перекидывай таблицы и данные. а дальше уже можно запускать билдер! Ясно? |
| Автор: Damarus 27.8.2007, 12:27 | ||||
Можно и без IBExpert'а. Так примерно (NordWolf.sql):
Добавлено через 14 минут и 51 секунду NordWolf, но IBExpert тебе пригодится |
| Автор: NordWolf 28.8.2007, 14:59 |
| IB Expert 1.2 Выполнил - ИНСТРУМЕНТЫ > РЕДАКТОР SQL. Выбрал файл nordwolf.sql. Запусти скрипт. Получил файл NORDWOLF.FDB. Запускаем DataPump. Выбираем нашу парадоксовскую базу (из которой нужно данные перекинуть), жмём далее. Базы с названием NORDWOLF.FDB нету. Что сделать, чтобы она появилась? Как выбрать чтобы именно в неё вставлялись данные из парадоксовский базы? У меня есть предположение что тут как раз надо настроить ту базу которая отображается как IB Local чтобы она работала с NORDWOLF.FDB (через SQL Explorer, BDE Administrator)? |
| Автор: Rodman 28.8.2007, 15:54 |
ты хелп по нему не читал? у тебя создана база FireBird - как я понимаю... вот при выборе базы твоей она не проходит фильтр, т.е. отображаются не FBD... |
| Автор: NordWolf 28.8.2007, 16:31 |
| Я установил IB Expert 1.2 и Firebird-1.5.2.4731-Win32 на всякий случай. запустил IB Expert 1.2 и вставил там в интрументах > SQL редакторе присланный мне код. В итоге получился файл NORDWOLF.FDB. Кстати, если удалить Firebird и проделать всё тоже самое в IB Expert, то пишет ошибку. При этом никаких настроек в IBExpert я не производил и новых баз у меня не зарегистрировано. |
| Автор: Rodman 28.8.2007, 16:41 | ||
ну а как же... это сервер, а без него как без рук... добейся чтобы у тя появился файл NORDWOLF.gdb... потом конвертация должна пойти как по маслу!!! |
| Автор: NordWolf 28.8.2007, 16:50 |
| Добился. в скрипте просто исправил CREATE DATABASE 'NordWolf.fdb' на CREATE DATABASE 'NordWolf.gdb'. Файл получился NordWolf.gdb причём абсолютно такого же размера. Повтрю, что никаких настроек в IBExpert я не производил и новых баз у меня не зарегистрировано. |
| Автор: NordWolf 28.8.2007, 17:08 |
| да тоже самое. =( я так понимаю, чтобы новая база была видна, её нужно зарегистрировать в самом IB Expert. Регитрирую. Server — Local Введите путь к файлу БД, например:путь до файла NORDWOLF.gdb Alias: NordWolf_DB Login: SYSDBA Password: masterkey Нажму кнопку Register Выполняю подключение базы, запускаю DataPump. Выбираю из парадоксов, жму next и ничего. Те же базы. Новой нету. |
| Автор: Damarus 28.8.2007, 19:06 | ||||
Так. Будем действовать по порядку. 1. Создаём базу Interbase/FireBird (я использовал FireBird):
Можно и через IBExpert. 2. Алиас для базы PARADOX в BDE Administrator'е. У тебя наверное уже есть. 3. DataPump. Я использовал эту: http://www.clevercomponents.com/downloads/datapump/dpdownload.asp. Ставим. Запускаем. Указываем базы: http://img205.imageshack.us/my.php?image=44734635xc7.png Далее. Закладка Step2: Order. Жмём Get Definitions. Затем Build Relations. Должно получится так: http://img209.imageshack.us/my.php?image=25728175zi1.png Далее. Закладка Step3: Pump. Жми Start. Всё. Теперь в базе NordWolf.fdb данные из базы PARADOX. |
| Автор: NordWolf 29.8.2007, 12:15 |
| так, попрорбую получить данный файл самостоятельно. Обдумывал тут прошлой ночью все действия и понял что можно ещё попробовать инным путём. Ведь у нас есть стандартная база в С++ под именем IBLocal, в настройках через ДБЕ Админ есть путь к стандартному файлу в поле Server name: c:\Program Files\Common Files\Borland Shared\Data\employee.gdb. NordWolf.gdb у нас получен. Так может просто поменять этот стандартный employee.gdb на путь к файлу NordWolf.gdb и потом туда перенести данные из парадокс-базы. Как такой варинат, прокатит? |
| Автор: NordWolf 29.8.2007, 16:14 | ||
| при установке DataPump вылазиет ошибка номер 401 (момент установки - updating interbase SQL links Configuration) "string variable is not large enought for string. check the string decarations." Жму ОК. Создаю точный путь. E:\Development\NordWolf>. туда кидаю NordWolf.sql. Копирую из FireBird утилиту isql. Набираю в компандной строке E:\Development\NordWolf>isql -i NordWolf.sql. Вылазиет окошко досовское и скрывается. Никакой NORDWOLF.FDB не создаётся. Скачиваю архив и кидаю в ту папку. Делаю всё по интрукции. Нажимаю в последней закладке - START. 12 ошибок.
|
| Автор: Damarus 29.8.2007, 17:51 | ||||||||
Не обращай внимания. У меня тоже такое было. Не надо копировать. Пропиши путь к isql (по умолчанию C:\Program Files\Firebird\Firebird_1_5\bin) в PATH. Потом открывай командную строку. Переходи в директорию с NordWolf.sql:
Затем пиши:
Просто в этой базе уже есть данные из базы PARADOX. И, соответственно, у тебя получаются одинаковые PRIMARY KEY. |
| Автор: NordWolf 29.8.2007, 23:57 |
Ну давай попробуем. Напиши порядок действий... 2Damarus - извини, поздно увидел. Завтра попробую, отпишусь. С ТАКИМИ ПРОГРАММЕРАМИ КАК ВЫ Я НАДЕЮСЬ МЫ ДОБЬЁМ ЭТОТ КУРСАЧ! ;) |
| Автор: NordWolf 30.8.2007, 11:22 |
вообщем получается такая штука: |
| Автор: NordWolf 30.8.2007, 17:27 |
| уф.. установил я вообщем IB Expert 1.2, Firebird 1.5 и попробовал сделать то что ты сказал... 2Rodman - напиши на всякой случай как вручную всё сделать. Ладно, у нас есть файл готовый (NordWolf.fdb), переноса данных добились. Теперь я так понимаю нужно работать непосредственно с компонентами С++. Расскажите что и как? |
| Автор: NordWolf 4.9.2007, 16:02 |
| Запустил DataPump, всё перенёс без проблем(All fine). Запускаю проект в с++ 1)Добавляю компоненты IBDataSetl: TIBDataSet; DataSourcel: TdataSource, IBTransaction: Transaction 2) Указываю свойства у IBTransaction: DefaultDatabase->IBDataBase Transaction Editor - Read Commited 3)Свойства у IBDataSetl Database->IBDatabase1 Transaction->IBTransaction1 4) У DataSourcel задаю свойство DataSet равным IBDataSetl, 5)DBGridl задаю свойство DataSource равным DataSourcel. 6) в свойстве SelectSQL у IBDataSetl прописываю: select * from GLAVN. ОК. Указываю на свойстве этого же компонента ACTIVE - TRUE. 7) Запускаю. Жму ФАЙЛЫ - ВЕСЬ СПИСОК и ошибка. "Project Projectl.exe raised exception class EDatabaseError with message 'Table2: Cannot perform this operation on a closed dataset'. Process stopped. Use Step or Run to continue." Что нужно исправить? |
| Автор: Rodman 4.9.2007, 16:17 |
где взялась Table2??? |
| Автор: NordWolf 4.9.2007, 22:16 |
| Он как-то связан с ANKETA.DB |
| Автор: Rodman 5.9.2007, 08:29 |
| покажи код и где вылетает! |
| Автор: NordWolf 6.9.2007, 16:59 | ||
указывает на этот код:
в частности на строку после Table2->Refresh(); (Form4->ComboBox1->Items->Clear();) |
| Автор: Rodman 7.9.2007, 09:18 |
| а Table2 у тебя открыт. так как рефрешь мона делать на открытой таблице! |
| Автор: NordWolf 8.9.2007, 12:48 |
| а как её скрыть? |
| Автор: Rodman 10.9.2007, 08:27 |
ну у темя в этом компоненте есть поле TableName... |
| Автор: NordWolf 11.9.2007, 00:51 |
| усё, я всё сделал! ))) Огромное спасибо за помощь, курсовая зачтена. Rodman,Damarus - отдельное спасибо Rodman - Смотрю ты украинец.У меня недавно знакомая из Одессы приехала, говорит видел на центральной трассе плакат с надписью: МЫ НЕ ЯНКИ, МЫ СЛАВЯНЕ НАШИ БРАТЬЯ - РОССИЯНЕ! ))) |