![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу. Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста". Название темы слишком короткое или не отражает сути вашего вопроса. Тема исчерпала себя, помните, один вопрос - одна тема Прочитайте правила и заново правильно создайте тему. |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
минимакс
Участник клуба
Регистрация: 11.06.2008
Сообщений: 1,143
|
![]()
Задача. Есть база данных. Все таблицы paradox, их отображения хранятся в модуле данных DMBase и подключеные через Алиас MyBase по путик DataBaseName = MyPath.
Нюанс в том, что база сетевая и путь к ней задается извне и база может быть где угодно, и каждый раз, заходя в программу выбирается свой путь к базе. База растет и меняется и возникается необходимость программно добавить в таблицу Table1 поле Pole. Возникает, зараза, такая проблема. Таблицу для проверки я могу открыть просто указав путь, а вот выполнить запрос не получается, так как не могу для запроса настроить путь к нужной базе. Вот как я это пытаюсь делать try // проверяем есть ли заданное поле T_update.Close; // пустая таблица для соединения с реальным файлом T_update.TableName := DBName+TableName+'.db'; T_update.Open; ts := T_update.FieldByName(PoleName).AsSt ring; T_update.Close; UpdateTable := 2; //поле есть - все хоккей except try {возникол исключения, значит искомого поля нет. создаем поле} Query1.Close; Query1.SQL.Clear; ts := 'ALTER TABLE '+TableName+' ADD '+PoleName+' '+TypePole; Query1.SQL.Add(ts); Query1.ExecSQL; // !!!!!!!!!!!!!!!!11 вот здесь при выполнении запроса -ошибка. так как // квери настроем черти куда. // при попытке сделать // Query1.Database.Params.Values['PATH'] := DBName // возникает исключение, так как пытаемся подключиться к базе, где // еще нет создаваемого поля. Замкнутый круг, как из него выйти? UpdateTable := 1; // поле создано except UpdateTable := 0; // какая-то ошибки создания поля end; Помогите. кто знает. Может это решается иначе? Задача - перед запуском программы по заданным шаблонам проверить таблицы, и если не хватает полей - надо их добавить. Сложности - сеть и путь к базе. Спасибо.
и это пройдет...
|
![]() |
![]() |
#2 |
минимакс
Участник клуба
Регистрация: 11.06.2008
Сообщений: 1,143
|
![]()
Разбираясь с проблемой, обнаружилось, что всего-то надо придумать, как сменить путь к базе для запроса КВЕРИ, чтобы он сделал все верно.
Вариант апдейта базы работает, когда "дефаултный" путь и путь к базе совпадают, тогда таблицы для обновления и квери работают с одним и тем же путем. А как изменить путь?
и это пройдет...
|
![]() |
![]() |
#3 |
SQL-коддинг
Участник клуба
Регистрация: 16.01.2009
Сообщений: 1,192
|
![]()
ну проставьте в компоненте Query1 св-во DatabaseName
только это нужно сделать до выполнения квери Код:
Последний раз редактировалось soleil@mmc; 26.03.2009 в 00:12. |
![]() |
![]() |
#4 |
минимакс
Участник клуба
Регистрация: 11.06.2008
Сообщений: 1,143
|
![]()
function UpdateTable(Path, TableName, PoleName, TypePole : String) : integer;
var st : string; begin try // проверяем есть ли заданное поле T_update.Close; T_update.TableName := DBName+TableName+'.db'; T_update.Open; ts := T_update.FieldByName(PoleName).AsSt ring; T_update.Close; UpdateTable := 2; except try T_update.Close; {создаем поле} RxQueryCreate.Close; RxQueryCreate.SQL.Clear; RxQueryCreate.DatabaseName := DBName; // вот оно, что надо было!!!!!!!!!! ts := 'ALTER TABLE '+TableName+' ADD '+PoleName+' '+TypePole; RxQueryCreate.SQL.Add(ts); RxQueryCreate.ExecSQL; UpdateTable := 1; except On E : EDatabaseError do begin MessageDlg('Ошибка открытия Базы'+#13+ E.Message,mtConfirmation,[mbOk],0); UpdateTable := 0; end; end; end; end;
и это пройдет...
|
![]() |
![]() |
#5 |
минимакс
Участник клуба
Регистрация: 11.06.2008
Сообщений: 1,143
|
![]()
Правда вариант примитивный без учета индексов, создание копии таблицы не случай облома выполнения запроса и прочее. Но уже есть от чего плясать.
и это пройдет...
|
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как обновить Nod32 | jenja | Софт | 1 | 04.03.2009 01:27 |
Как обновить?? | Vremya-Dengy | Общие вопросы Delphi | 6 | 17.02.2009 22:44 |
как обновить листбокс? | counter | Win Api | 2 | 16.02.2009 11:42 |
БД в Delphi - как отказаться от BDE? | JoanM | БД в Delphi | 21 | 09.01.2008 03:40 |
Программно связать таблицы | Таня84 | БД в Delphi | 0 | 20.03.2007 18:43 |