Форум: "Базы";
Текущий архив: 2002.08.05;
Скачать: [xml.tar.bz2];
ВнизКак связать воедино INSERT и DBLookupCombobox-ы? Найти похожие ветки
← →
awaken (2002-06-25 02:49) [0]мне нужно сделать форму ввода данных сразу в две связанные таблицы, но которые "прозрачно" показываются как одна
База MS SQL 2000, таблицы Account и Address связаны по полю ID
при этом поле в первой таблице автогенерируемое (IDENTITY)
на SQL все это пишется довольно прозрачно:
(не пинайте за синтаксис считайте это псевдокодом, реально
я буду использовать процедуру из ADO а не begin tran чтобы оформить транзакцию)
BEGIN TRAN
INSERT INTO ACCOUNT(NAME,PASSWORD,FNAME,LNAME,...) VALUES(...)
SELECT ID FROM ACCOUNT WHERE ID=@@IDENTITY
INSERT INTO ADDRESS(ACCID, STREET, CITY, ...) VALUES(ID, ...)
COMMIT TRAN
но если все делать напрямую через SQL-операторы то я лишаюсь возможности использовать DBEdit и DBLookupCombo компоненты, ибо придется форму переделать на простой Edit. а Lookup ОЧЕНЬ нужен!
насколько я понимаю DBEdit-компоненты работают только с "простым" датасетом вида select * from но тогда она будет грузить всю таблицу выборки в память которая может быть немаленькая
какие есть идеи на этот счет?
← →
awaken (2002-06-26 10:32) [1]неужто никто не знает?
я выкрутился таким образом:
создал два ADO Datasetа и забил в них
select * from account where account=@@identity
select * from address where accid=@@identity
подцепил их к полям формы, при открытии запускаю транзакцию и делаю ds1.Insert
и ds2.Insert
при закрытии формы по кнопке транзакция завершается таким образом
fSucceed := False;
if trnType = 0 then
try
ds1.Post; // UPDATE ACCOUNT SET f=v,
ds2.Post; // UPDATE ADDRESS SET f=v
fSucceed:=True;
except
fSucceed:=False;
end
else
try
ds1.Post; // INSERT INTO ACCOUNT(,) VALUES(,)
res := TADODataSet.Create(Self);
res.Connection := DM.SQLConn;
res.CommandType := cmdText;
res.CommandText := "SELECT ID FROM ACCOUNT WHERE ID=@@IDENTITY";
res.Open;
AccID := res.Fields[0].AsInteger;
res.Close;
res.Free;
ds2.FieldByName("ACCID").AsInteger:=AccID;
ds2.Post; // INSERT INTO ADDRESS(,) VALUES(,)
DM.SQLconn.CommitTrans;
fSucceed:=True;
except
DM.SQLconn.RollbackTrans;
fSucceed:=False;
end;
← →
P&$ (2002-07-09 11:41) [2]У меня не ответ, а вопрос ! -)
А Grid`ы не использовал? В них с LookUp полями ваще такие глюки! И AutoCalc выключать приходится!
← →
Johnmen (2002-07-09 12:21) [3]>P&$ (09.07.02 11:41)
>В них с LookUp полями ваще такие глюки! И AutoCalc выключать
>приходится!
Какие такие глюки ? И причем здесь AutoCalc ? :)))
← →
awaken (2002-07-15 06:24) [4]я никогда не использую гриды для большего чем просмотр результатов запроса БЕЗ возможности редактирования. работать в гридах с SQL server пример "неправильного" мышления заимствованного из DBASE. все вышесказанное - имхо
зы. с однонаправленными курсорами вообще нельзя использовать гриды (например с DBExpress)
← →
Johnmen (2002-07-15 09:35) [5]>awaken (15.07.02 06:24)
>...работать в гридах с SQL server пример "неправильного"
>мышления заимствованного из DBASE....
ЧУШЬ !!!
← →
jonik pegas (2002-07-15 10:26) [6]Почему чушь?
Как я понял awaken имел в виду то что запросы должнs изменятся явно INSERTом,UPDATE или DELETE а не неявно из Select-а а что имели в виду вы?
← →
Anatoly Podgoretsky (2002-07-15 10:41) [7]SQL развивался на телетайпах в 50 бод
← →
Johnmen (2002-07-15 10:45) [8]>jonik pegas © (15.07.02 10:26)
А я его понял так, что он считает "неправильным" редактирование с использованием грида (непонятно, причем здесь DBASE).
Вот именно это и является ЧУШЬЮ ! :)))
← →
Anatoly Podgoretsky (2002-07-15 11:01) [9]DBASE конечно не причем, использовать или не использовать гриды относится совсем к другой области, при том это не базы
← →
awaken (2002-07-15 13:49) [10]>А я его понял так, что он считает "неправильным" редактирование >с использованием грида (непонятно, причем здесь DBASE).
>Вот именно это и является ЧУШЬЮ ! :)))
именно. попробуйте открыть грид содержащий тысячи записей с клиента работающего по удаленной выделенке и вы поймете что я имел в виду :-). а dbase приплел потому что такого рода интерфейсы - прямой наследник команды BROWSE.
← →
roottim (2002-07-15 13:55) [11]2awaken (15.07.02 13:49)
странные у вас понятия!..
Grid это контрол и не более того...
вытаскивать "тысячи записей" в НД никто не заставляет..
собственно о чем спор то ведете ? :))
← →
Johnmen (2002-07-15 14:00) [12]>awaken (15.07.02 13:49)
Смею утверждать, что твои подходы в корне ошибочны !
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.08.05;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c