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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.08.2015, 14:30   #11
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию

беда с этим sql запросом(((
cannot perform this operation on a closed dataset
Ernest027 вне форума Ответить с цитированием
Старый 05.08.2015, 14:57   #12
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А как тогда?
То, что ты делаешь сейчас как я понимаю создает в базе дублирование. т.е. избыточность. Любой АБД-перфекционист тебя бы повесил на галстуке за такое.
Не смогу я тебе объяснить как нужно делать. Лексикона не хватит.
если в общем: Для этого таблицы связывают внешними ключами, и проводят в запросах объединения и присоединения по ключевым полям, тогда не приходится из таблицы перегонять копии данных в другую таблицу. Делай конечно как умеешь, но имей ввиду - однажды ты с таким дублированием хлебнешь горя.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.08.2015, 15:37   #13
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию

теперь и locate не работает(((
делфи обозлился на меня
Ernest027 вне форума Ответить с цитированием
Старый 05.08.2015, 15:55   #14
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Делфи тут ни при чем, просто работать с плохой базой будет плохо при любых условиях. Еще раз повторюсь: Не годится так с данными поступать. Не будет лучше, тебе точно, а уж юзеру и подавно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.08.2015, 16:00   #15
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

НЕ экономьте на количестве компонентов общения с БД,
Для показа свой компонент AdoQuery3
Для замены, вставки свой AdoqueryX
И кода и ошибок будет меньше, если для каждого действия будет СВОЙ компонент с заранее написанным и ПРОВЕРЕННЫМ запросом.
А для модификации запросов ЕСТЬ параметры (AdoQuery.Parameters)

В коде программы только заполнение нужных параметров и операции выполнения запросов (Open|Close|execSQL)
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 06.08.2015, 08:21   #16
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию

Код:
procedure TForm11.sBitBtn1Click(Sender: TObject);
begin
DataModule2.ADOQuery3.Close;
DataModule2.ADOQuery3.SQL.Add('insert into Oborudovanie ([Наименование единицы],[Оперативный номер], [Тип оборудования], [Заводской номер], [Технические характеристики], [Год выпуска]');
DataModule2.ADOQuery3.SQL.Add('select [Наименование единицы],[Оперативный номер], [Тип оборудования], [Заводской номер], [Технические характеристики], [Год выпуска]');
DataModule2.ADOQuery3.SQL.Add('from OborudovanieAdd');
DataModule2.ADOQuery3.SQL.Add('where not exists');
DataModule2.ADOQuery3.SQL.Add('select * from Oborudovanie');
DataModule2.ADOQuery3.SQL.Add('where OborudovanieAdd.[Оперативный номер] =Oborudovanie.[Оперативный номер]');
DataModule2.ADOQuery3.ExecSQL;
DataModule2.ADOQuery3.SQL.Clear;
DataModule2.ADOQuery3.SQL.Add('select * from Oborudovanie');
DataModule2.ADOQuery3.Open;
end;
пишет сначала 'Неправильный синтаксис около ключевого слова "select"', а потом много раз выходит сообщение что adoquery3 ... closed dataset

Последний раз редактировалось Stilet; 06.08.2015 в 09:10.
Ernest027 вне форума Ответить с цитированием
Старый 06.08.2015, 08:30   #17
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Выше уже писал - в этом инсерте куча пропущенных скобок как минимум
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.08.2015, 08:50   #18
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию

не могли бы подправить?
Ernest027 вне форума Ответить с цитированием
Старый 06.08.2015, 10:00   #19
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
Stilet если в общем: Для этого таблицы связывают внешними ключами, и проводят в запросах объединения и присоединения по ключевым полям,
в таком случае вы прав да . Тогда я бы делал (Бэкап целиком БД)
Код:
// SaveDialog1 и OpenDialog1 прописать расширение файлов .BAK  свойстве---> DefaultExt 
procedure TForm1.BitB_BekClick(Sender: TObject);
begin // Бэкап бд
 if SaveDialogFullBD.Execute then // SaveDialogFullBD = SaveDialog1
 begin
    Screen.Cursor:=crHandPoint;
    with Module.FullBDQuery do begin // Module.FullBDQuery = ADOQuery 
      Close;
       SQL.Clear;
        SQL.Add('backup database Имя_БД to disk='''+SaveDialogFullBD.FileName+''' ');
       ExecSQL;
      Close;
    end;
    Screen.Cursor:=crDefault;
    Application.MessageBox(PChar('Резервное копирование сохранено успешно!'),'Архив', MB_ICONEXCLAMATION+MB_OK);
  end;


end;

procedure TForm1.BitB_RestorClick(Sender: TObject);
var
  S: String;
begin // восстановление БД 
  if OpenDialogFullBD.Execute then begin // OpenDialogFullBD = OpenDialog1
     Screen.Cursor:=crHandPoint;
      Module.DbConn.Connected:=False; //  Module.DbConn = ADOConnection1
        S := 'ALTER DATABASE Имя_БД  SET SINGLE_USER WITH ROLLBACK IMMEDIATE; use master;  drop database Имя_БД ;'+
             'restore database Имя_БД  from disk = ''' + OpenDialogFullBD.filename + '''; ALTER DATABASE Имя_БД  SET MULTI_USER ';
        Module.DbConn.Execute(S);
       Module.DbConn.Connected:=True;
      Screen.Cursor:=crDefault;
      Application.MessageBox(PChar('Восстановление завершено успешно!'+chr(13)+'Следует заново войти в программу!'),'Архив', MB_ICONEXCLAMATION+MB_OK);
    Application.Terminate;
  end;

end;
xxbesoxx вне форума Ответить с цитированием
Старый 06.08.2015, 10:10   #20
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию

DataModule2.ADOQuery3.Close;
DataModule2.ADOQuery3.SQL.Add('inse rt into Oborudovanie ([Наименование единицы],[Оперативный номер], [Тип оборудования], [Заводской номер], [Технические характеристики], [Год выпуска])');
DataModule2.ADOQuery3.SQL.Add('sele ct ([Наименование единицы],[Оперативный номер], [Тип оборудования], [Заводской номер], [Технические характеристики], [Год выпуска])');
DataModule2.ADOQuery3.SQL.Add('from OborudovanieAdd');
DataModule2.ADOQuery3.SQL.Add('wher e not exists');
DataModule2.ADOQuery3.SQL.Add('(sel ect * from Oborudovanie');
DataModule2.ADOQuery3.SQL.Add('wher e OborudovanieAdd.[Оперативный номер] =Oborudovanie.[Оперативный номер])');
DataModule2.ADOQuery3.ExecSQL;
DataModule2.ADOQuery3.SQL.Clear;
DataModule2.ADOQuery3.SQL.Add('sele ct * from Oborudovanie');
DataModule2.ADOQuery3.Open;

что не так то? скобки добавил
Ernest027 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перемещение ОДНОЙ записи из одной таблицы в другую Vongud БД в Delphi 28 10.04.2015 21:47
Добавление значений из одной таблицы в другую. Abay19941308 БД в Delphi 5 04.12.2013 15:56
перенос из одной таблицы БД в другую WishHunter Помощь студентам 9 21.02.2013 08:15
MS SQL SERVER 2005 копирование таблицы из ОДНОЙ БД В другую или перенести все строки из одной таблицы в другую reihtmonbern БД в Delphi 4 17.07.2012 23:25
Передача данных из одной таблицы в другую, при выборе одной ячейки MickMick Microsoft Office Excel 6 06.10.2008 13:57