![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запись данных в подченненую табл SQL-запросом [D7, MSSQL]
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