ClientDataSet и Insert
Използвайки DBGrid, потребителят може да въвежда данни вClientDataSet. Освен това би било желателно да се запише вземане на проби от полета един select-ohm в DB (например mdb-файл). Не разбирам какво да напиша в конструкциятаInsert. изберете. fromкакво е името на таблицата (изглежда, че няма таблица, но ако се опитате да напишете типа ClientDataSet1.FileName:="aa.mdb", и направите селекция от ClientDataSet1.FileName, тогава се генерира грешка). Помощ, моля, или е невъзможно да се направи това в случая на ClientDataSet?
Не разбирам какво да напиша в конструкцията Insert. изберете. от кое име на таблица
Без име. Тъй като няма маса
И как да запиша ВСИЧКИ записи в таблицата ONE select th?
Дори ако Access не поддържа това, тогава за MS SQL това е нормална конструкция.
> тогава за MS SQL това е нормална конструкция. Не разказвайте приказки. никой двигател / sql сървър няма да "види" в заявката ClientDataSet. заявката се изпълнява "там", а ClientDataSet е "тук".
Може би съм го написал неправилно, но insert into table1 select * from table2 е нормално за MS SQL (където table1 и table2 са таблици на сървъра)
И как да пиша в случай на използване на ClientDataSet вместо table2?
> Може би съм го написал грешно, но > вмъкване в таблица1 изберете * от таблица2 > за MS SQL е добре (където table1 и table2 са таблици на сървъра) за достъп също ще е добре, няма разлика.
> И как се пише в случай на използване на ClientDataSet вместо table2? Няма начин. ClientDataSet не се намира на сървъра и няма връзка с него (isam/openrowset). само „класическа“ заявка със стойности, по-добри параметри и един запис наведнъж, но можете също да управлявате стойности от целия набор от данни в нея. (и след това започнете да питате за ограничениятаискани дължини. ).
Не трябваше да питам за ограниченията за дължината на заявките. въпреки че има заявки с много броя на редовете.
Мислех, че запазването (например в xml) може да ми помогне. Жалко, че не става.
> Мислех, че запазването (в xml например) ще ми даде > помощно какво общо има xml с това?
Мислех, че запазването (напр. в xml) може да ми помогне. Жалко, че нищо.
лесно записвате целия пакет или само делтата в xml, след това го трансформирате с xsl и получавате готови вмъквания.sql
> въпреки че има заявки с много броя на редовете. засега късмет.
> това съхраняване (напр. в xml) може да ми помогне. защо xml е по-добър от ClientDataSet, ако е в паметта? Сега, ако това е файл на диск в xml формат, тогава можете да търсите, може би има isam за него. въпреки че е по-добре да използвате съществуващия dBase/Paradox/Text/ODBC/. истината отново ще има проблем при преместването на данните от ClientDataSet, които вече са в него. който ще се върне към решение с "класическа" заявка с параметри за всеки запис. и за какво тогава излишни действия?
> и получавате готови вмъквания.sql т.е. вариант с пълен трансфер на данни на ClientDataSet-и при поискване, само чрез посредника. и със същото ограничение за размера на заявката, ако не го направите през Query Analyzer или не напишете "package executor" към него, прави ли повече от една команда там? и пакет от команди. тогава между другото +, за достъп (джет) няма да работи, т.к не разбира повече от една команда наведнъж.
Какво е толкова трудно за този код:
var bm: TBookMark; begin CDS1.DisbaleControls; bm := CDS1.GetBookMark; CDS1.Първи; С TADOCommand.Create(nil) направете опитайте Връзка := ; CommandText := "INSERT INTO TABLE (FLD1,FLD2.FLDN) VALUES(:fld1,:fld2. fldn)"; Connection.BeginTrans; докато не CDS1.Eof започват Parameters.ParaByName("fld1").Value := CDS1.FieldByName("Fld1").AsString; Parameters.ParaByName(" fld2").Value := CDS1.FieldByName("Fld2").AsInteger; . Parameters.ParaByName("fldn").Value := CDS1.FieldByName("Fld1").AsDateTime; опитайте Execute; освен ShowMessage("Ooops "); прекъсване; край; ако CDS.Eof тогава Connection.CommitTrans иначе Connection.RollbackTrans; накрая край; CDS1.GoToBookMark(bm); CDS1.FreeBookMark(bm); CDS1.EnableControls; край;
По дяволите, след почивката има още два реда
Нищо сложно. Обикновено пиша Connection.RollbackTrans в try ..except.
опитайте Изпълни; с изключение на ShowMessage("Ooops");Connection.RollbackTrans;прекъсване; край;
Но би било желателно без цикъл една заявка.
> След това искам да напиша селекция от полетата с едно избиране > в базата данниидеята е правилна> (напр. mdb файл).При достъп ще излезе хрян (въпреки че може да греша, не знам тънкостите на новите версии)
дори и на "възрастни" бази, това не става нито чрез BDE, нито чрез ADO, поне .НЕ, поне не.НЕ, само чрез специални компоненти