Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.59 MB
Время: 0.021 c
6-13749
SevaPetrov
2002-05-23 22:00
2002.08.05
Программное закрыти консольного приложения


14-13787
restless
2002-07-10 13:10
2002.08.05
Чем Delphi лучше С или С++


3-13574
whiteman
2002-07-16 10:29
2002.08.05
IB (ссылочная целостность)


14-13804
pave1
2002-07-11 09:57
2002.08.05
Вопрос о литературе ...


1-13586
Goblinus
2002-07-22 18:13
2002.08.05
Иконка





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский