Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.05;
Скачать: CL | DM;

Вниз

Как связать воедино 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
3-13557
zomba
2002-07-16 08:41
2002.08.05
TreeView


1-13677
иван
2002-07-23 19:09
2002.08.05
Атрибуты файла


3-13549
Griffin
2002-07-11 16:14
2002.08.05
Поиск по дереву записанному в таблице БД


14-13769
Igorek
2002-07-03 19:02
2002.08.05
Логические компьютерные игры


1-13621
maxim2
2002-07-25 09:28
2002.08.05
Как получить из компонента MonthCalendar выбранную дату ...