Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2011.04.03;
Скачать: [xml.tar.bz2];

Вниз

Запись данных в подченненую табл SQL-запросом   Найти похожие ветки 

 
vturkevich ©   (2009-10-08 14:21) [0]

Имеются две таблицы:
основная-
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-запрос на запись данных в эти таблицы.
Зарание благодарю


 
Медвежонок Пятачок ©   (2009-10-08 15:10) [1]

insert into table1() values()
insert into table2() values()


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

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


 
vturkevich ©   (2009-10-09 06:59) [3]

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


 
Sergey13 ©   (2009-10-09 09:34) [4]

> [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 минут).

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


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

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

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

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


 
vturkevich ©   (2009-10-09 11:41) [6]

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, помочь. СПАСИБО!


 
vturkevich ©   (2009-10-09 11:46) [7]

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

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


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

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


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

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


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

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


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

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

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


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

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


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

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

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


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


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

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


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

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


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


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

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


 
sniknik ©   (2009-10-16 11:18) [17]

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

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


 
Anatoly Podgoretsky ©   (2009-10-16 11:20) [18]

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


 
Anatoly Podgoretsky ©   (2009-10-16 11:23) [19]


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

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


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


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

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

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


 
vturkevich ©   (2009-10-23 06:48) [21]

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



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2011.04.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.004 c
15-1292621393
Юрий
2010-12-18 00:29
2011.04.03
С днем рождения ! 18 декабря 2010 суббота


15-1292493434
Kerk
2010-12-16 12:57
2011.04.03
Полное дорожное видео трассы «Москва - Владивосток»


3-1256201853
Viktor
2009-10-22 12:57
2011.04.03
Как в Access сделать откат


2-1294230079
IStream
2011-01-05 15:21
2011.04.03
IStream


6-1235830494
AlkonaVT
2009-02-28 17:14
2011.04.03
Глюк кодировки FTPServer а в FPiette.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский