Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

"Перезапись" таблиц [D5, Access]


Галинка ©   (2004-10-06 14:58:00) 

Как организовать презапись таблицы, после получения сообщения, о том что такая таблица уже существует.

Ситуация такая.Я в своей БД (Акцес) создаю таблицы с результатами расчета, для дальнейшего анализа. По умолчанию все имена таблиц имеют общую часть. Причем как таблицы с исходными данными, так и таблицы с результатами. Что-то вроде M44_Epic, M44_Punkty, Rez_M44_Epic, Rez_M44_Radiusy. Это М44 берется из названия главной исходной таблицы методом сору. (Вся заморочка с таблицами потому, что пользователь-заказчик мой привык на уровне ДОСа работать, когда все это было в отдельных файлах. Поэтому, для обеспечения, так сказать мягкого перехода, я сделала пока таблицы из тех самых  файлов. Чтобы им проще было. Но глобальную таблицу сделать буду. И выборку из нее обеспечу.)Так вот, при пересчете исходных таблиц, для которых уже есть результирующие, возникает, совершенно справедливо, ошибка, что таблицы с таким названием уже есть. Так вот вроде как и надо предусмотреть возможность,  для "сохранения", а фактически создания, таблиц с новым общем именем.  Но хочется сделать так как в ворде (по-моему), если возникает ошибка, приложение должно спросить их (таблицы) перезаписать или сохранить (читай создать) по др именем.

Буду рада любым советам.


sniknik   (2004-10-06 16:44:00) [1]

ADOConnection.GetTableNames может помочь, не доводить до ексепта... тем более он может быть и по другому поводу.


Mike Kouzmine   (2004-10-06 16:22:00) [2]

Перед сохранением новых данных старые удалять? А таблицы оставить.


Sergey13   (2004-10-06 16:17:00) [3]

2[6] Галинка ©   (06.10.04 16:11)
>На счет гемороя - это я уже начинаю понимать. Но раз начала...
то надо геморой усиливать до хронической формы? 8-) Почему бы тогда не писать в постоянные таблицы с идентификатором расчета? Все таки лучше будет. А для юзера это вообще фиолетово. Он и не догадается про это. 8-)


Галинка   (2004-10-06 16:11:00) [4]

Для Сергея.
На счет гемороя - это я уже начинаю понимать. Но раз начала... Просто понимаешь, конечным продуктом расчета, является не таблица, а схема, построенная на основе данных выбранных, из результирующих таблиц. Результирующих таблиц две, в одной собраны параметры эпицентров (назовем их так), а в другой, подчиненной, радиусы изосйест, посчитанных для этих эпицентров. По этим радиусам и будут строиться схемы. Я пыталась автоматизировать их выбор в соответствии со строгими условиями, но заказчик сказал, что эта часть алгоритма не формализована, и выбирают они методом научного тыка. Поэтому и пришлось сделать две связанные таблицы (для облегчения просмотра). И всплывающее меню к ним, для выбора конкретного эпицентра, а так же для задания остальных его параметров (таких как географическое положение). Вот...


Sergey13   (2004-10-06 15:55:00) [5]

2Галинка ©
А зачем результаты расчета сохранять, да еще в отдельных таблицах? Сама же потом запутаешься. Может (уж если шибко сохранять надо) просто добавить идентификатор расчета (дата например или еще чего) в одну таблицу. И дополнять ее. ИМХО ты не "мягкий переход" обеспечиваешь, а геморой себе наживаешь на будущее.


Галинка   (2004-10-06 15:50:00) [6]

Пока надума что-то вроде так:
var
TekTabName, NewTabName:string;

begin
****************{Создание таблицы}************************
try
ADOCommand.ComandText:='CreateTable TabName ....'
ADOCommand.Execute;
exception
on E:EOleException do
 begin
  if (MessageDlg('Такая таблица %TABLENAME% существует!'+#13+#10+
                 'Записать данные в другую таблицу?',
                 mtWarning, [mbYes, mbNo], 0)
      = mrYes) then
   if NewTabNameDlg.ShowModal=mrOK then                 {Диалог на новое имя}
    begin
     NewTabName:=NewTabNameDlg.Edit1.Text;
     ADOCommand.ComandText:='CreateTable TabName'+NewTabName+'....'
     ADOCommand.Execute;
     TekTabName:=NewTabName;
    end
  else
   begin
    ADOCommand.ComandText:='Delete from TabName ....'
    ADOCommand.Execute;
    TekTabName:=TabName;
   end;
 end;
end;
*************{Процедура заполнения таблиц}*********************
{ производится уже с конкретным именем таблицы  }

end;


Галинка   (2004-10-06 15:45:00) [7]

Конкретно... Ну что же...

Так вот, при пересчете исходных таблиц, для которых уже есть результирующие, возникает, совершенно справедливо, ошибка, что таблицы с таким названием уже есть. Так вот вроде как и надо предусмотреть возможность,  для "сохранения", а фактически создания, таблиц с новым общем именем.  Но хочется сделать так как в ворде (по-моему), если возникает ошибка, приложение должно спросить их (таблицы) перезаписать или сохранить (читай создать) по др именем.


Sergey13   (2004-10-06 15:30:00) [8]

Присоединяюсь к [1], но из того что я понял (или не понял 8-) мне кажется "Не правильной дорогой идете, товарищи!"


Ольга   (2004-10-06 15:23:00) [9]

Для начала попытайтель четко сформулировать вопрос, не вдаваясь в детали.


Наверх

Титульная страница Поиск, карта сайта Написать письмо