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

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

Запись данных в подченненую табл SQL-запросом [D7, MSSQL]


Страницы:   1 2

vturkevich ©   (2009-10-08 14:21:00) 

Имеются две таблицы:
основная-
create table gorn_key_dok(
  key Long NOT NULL,                                          --
  key_gorn_tip_dok Long NOT NULL default 0,             |
  key_dok Long NOT NULL default 0                          |
)                                                                         |
подчиненная-                                                       |
create table gorn_oper(                                           |
  key Long NOT NULL,                                             |
  key_gorn_dok Long NULL default 0,                       <-
  data_oper DateTime NULL,
  lschet VarChar(11) NULL,
  glava VarChar(50) NULL,
  razdel VarChar(50) NULL,
  statia VarChar(50) NULL,
  vid VarChar(50) NULL,
  klass VarChar(50) NULL,
  add_klass VarChar(50) NULL
)

Помогите составить SQL-запрос на запись данных в эти таблицы.
Зарание благодарю


vturkevich   (2009-10-23 06:48:00) [1]

Спасибо всем кто оказался небезучастен к моей проблеме, все разрешилось, и работает прекрасно полная отработка доков спустилась с 3 минут до 14 сек. Ваш , выше изложенный, диалог мне в этом очень помог.
Еще раз всех благодарю.


ANB   (2009-10-16 11:28:00) [2]


> но вообще вы оба упускаете одну вещь, хотя структура таблиц
> у вас перед глазами (в [0]), автоинкрементов у него нет.
> ..

Млин. А какие тогда проблемы могут быть ? Разве что он триггером ID заполняет.
Но тогда в самом триггере тормоза и будут, потому как явно макс+1 использует. Генераторов в мс скл нету. Может недавно появились ?

Вывод - автору учить основы заново. А потом уже писать программы.


Anatoly Podgoretsky   (2009-10-16 11:23:00) [3]


> но вообще вы оба упускаете одну вещь, хотя структура таблиц
> у вас перед глазами (в [0]), автоинкрементов у него нет.
> ..

Из приведеной структуры это не ясно, может есть, а может нет.
Ведь объяем и качество предоставленой операции соответствует уровню начинащиего.


Anatoly Podgoretsky   (2009-10-16 11:20:00) [4]

хз   (15.10.09 19:26) [14] '
Ни, только Open


sniknik   (2009-10-16 11:18:00) [5]

он имеет ввиду открывать пакет из 2х команд, инсерта и тут же запроса с @@identity, правда написал так "понятно", что лучше бы вообще не писал... того кто сам не знает только запутает.

но вообще вы оба упускаете одну вещь, хотя структура таблиц у вас перед глазами (в [0]), автоинкрементов у него нет...


ANB   (2009-10-16 11:09:00) [6]


> Опен не возвращает резалтсет.
> Екзэк тут нужен.

??????????? Ничего не перепутал ??????????


хз   (2009-10-15 19:28:00) [7]

@@Identity вернет последний сгенерированный ключ для автоинкрементного поля, например, после инсерта. А если там таймстамп или ручное чего?


хз   (2009-10-15 19:26:00) [8]


> Инсерт в мастер таблицу нужно выполнять через опен.

Опен не возвращает резалтсет.
Екзэк тут нужен.


ANB   (2009-10-15 17:39:00) [9]

@@identiti - вроде так. примера по рукой нет. Если не лень - гляди в БОЛ.

Инсерт в мастер таблицу нужно выполнять через опен.


sniknik   (2009-10-09 16:17:00) [10]

> Вставить запись в мастер, получить ИД(это у тебя KEY)
получать нужно если оно генерится (автоинкремент/дефаулт), а у него простое значение, т.е. просто - придумываем значение ключа (генерим сами), и с этим значением пишем и в мастер таблицу и в подчиненную.  (сюда - key и сюда - key_gorn_dok, если правильно понял его связь), все, по этому потом можно построить мастер детайл/обьеденение в запросе/диаграмму/... х.з. чего еще, главное связь есть.


Медвежонок Пятачок   (2009-10-09 13:04:00) [11]

Если бы я знал как реализуется на SQL , при записи, конструкция мастер-детайл

В SQL такая конструкция никак не реализуется потому чт ее нет.
Это чисто умозрительное понятие


Виталий Панасенко   (2009-10-09 12:25:00) [12]

сам сиквел о мастер-детали, я думаю, не знает абсолютно ничего.. он знает, что в такой-то таблице можгут хранится в таком-то поле данные, которые ОБЯЗАТЕЛЬНО есть в другой таблице.. это я о детали и мастере соответственно


Виталий Панасенко   (2009-10-09 12:22:00) [13]

У АДО компонет есть такое св-во, как dataSource.. это DataSource мастер-таблицы.. в детали пишешь правильныйзапрос и все отлично работает, без всяких рефрешев и т.д.


Виталий Панасенко   (2009-10-09 12:20:00) [14]

Вставить запись в мастер, получить ИД(это у тебя KEY), при вставке в деталь подставлять полученное значение в KEY_GORN_DOK


vturkevich   (2009-10-09 11:46:00) [15]

За полетом мысли я слежу...

Если бы я знал как реализуется на SQL , при записи, конструкция мастер-детайл, то уже реализовал бы


vturkevich   (2009-10-09 11:41:00) [16]

rez:=false;
 try
        datamodule2.tip_dok.locate('tip_dok',tip_dok,[]);
        datamodule2.gorn_key_dok.append;
        datamodule2.gorn_key_dok.fieldbyname('key_gorn_tip_dok').asinteger:=datamodule2. tip_dok.fieldbyname('key').asinteger;
        datamodule2.gorn_key_dok.fieldbyname('key_dok').asinteger:=key_dok;
        datamodule2.gorn_key_dok.post;
        datamodule2.gorn_key_dok.refresh;
          datamodule2.gorn_oper.append;
          datamodule2.gorn_oper.fieldbyname('key_gorn_dok').asinteger:=datamodule2.gorn_ke y_dok.fieldbyname('key').asinteger;
          datamodule2.gorn_oper.fieldbyname('data_oper').asdatetime:=data;
          datamodule2.gorn_oper.fieldbyname('lschet').asstring:=ls;
          datamodule2.gorn_oper.fieldbyname('glava').asstring:=gl;
          datamodule2.gorn_oper.fieldbyname('razdel').asstring:=rz;
          datamodule2.gorn_oper.fieldbyname('statia').asstring:=st;
          datamodule2.gorn_oper.fieldbyname('vid').asstring:=vid;
          datamodule2.gorn_oper.fieldbyname('klass').asstring:=kl;
          datamodule2.gorn_oper.fieldbyname('add_klass').asstring:=add_kl;
          datamodule2.gorn_oper.fieldbyname('summa').asfloat:=summa;
          datamodule2.gorn_oper.fieldbyname('operacia').asboolean:=prihod;
          datamodule2.gorn_oper.post;
          rez:=true;
        datamodule2.gorn_oper.refresh;
 except
 if not rez then
    begin
      if datamodule2.Gorn_key_dok.State in [dsEdit,dsInsert] then
          datamodule2.Gorn_key_dok.Cancel
      else
         if datamodule2.gorn_oper.State in [dsEdit,dsInsert] then
           begin
             datamodule2.gorn_oper.Cancel;
             datamodule2.gorn_key_dok.Delete;
           end;                                    
    end;
 end;
 result:=rez;

Этот набор повторяется в цикле для всех выделенных докаментов
и из-за повторения команд   { .refresh } запись протекает достаточно долго, и без них выдает ошибки.
Потому и хочу реализовать это в виде SQL -запроса, а обнавлять набор данных по завершении цикла.
Убедительная просьба знатокам SQL, помочь. СПАСИБО!


Медвежонок Пятачок   (2009-10-09 10:06:00) [17]

теперь смотри за полетом своей мысли:

на самом деле ты:
1. Вот я и не знаю как реализовать этот мастер-детайл в SQL-запросе.

а спрашиваешь:
2. Помогите составить SQL- запрос на записьданных в эти таблицы.


Sergey13   (2009-10-09 09:34:00) [18]

> [3] vturkevich ©   (09.10.09 06:59)
> Вот я и не знаю как реализовать этот мастер-детайл в SQL-запросе.

так вот же тебе ответили.
> [1] Медвежонок Пятачок ©   (08.10.09 15:10)

чего еще хочется?

> [3] vturkevich ©   (09.10.09 06:59)
> А средствами ADO все работает но уж очень медленно (10-15
> записей около 3 минут).

Ну так показывай свою реализацию.


vturkevich   (2009-10-09 06:59:00) [19]

Вот я и не знаю как реализовать этот мастер-детайл в SQL-запросе.
А средствами ADO все работает но уж очень медленно (10-15 записей около 3 минут).


Виталий Панасенко(дом)   (2009-10-08 17:41:00) [20]

"копай" в сторону связи master-detail


Страницы:   1 2

Наверх

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