CBuilder/Delphi && Interbase

1 отговора 64 прегледа
#1

CBuilder/Delphi && Interbase

Здравейте,
Сблъсках се с проблем, който се дължи най-вече на таова,че съм начинаещ.
Работя със CBuilder/Interbase. Решавам задачка,която изглежда накратко така;
( Коментирам повърхностно кода)
1. Отваря се една таблица - ( TIBTable *tbl с много записи. - О'к )
2. Искам да работя отелно, с някакъв рекордсет от друга таблица по ключ от първата. За целта избрах - TIBDataSet *ds със един SELECT ..... който нормално
ми извади записите от втората таблица. Тях ги набутва в един DBGrid. Избрах
TIBDataSet защото пише че добре работи с dataware компоненти и е LIVE рекордсет.
3. Описах си и другите query за тази компонента.

ds->InsertSQL - INSERT INTO .......
ds->DeleteSQL - DELETE FROM .......
ds->ModifySQL - UPDATE .........
ds->RefreshSQL - SELECT .......

Добре де! Как става тогава обръщението към определено query, според това каква
операция извършвам? Понеже "бързата кучка...", бях си създал убеждение, че ако вмъквам запис примерно:
ds->Insert()
TIBDataSet автоматически ще ми приеме параметрите които назначавам, за такива
към InsertSQL и ще "execut"-ва query-то в InsertSQL. Или пък ако променям данни
чрез dataaware компонент от сорта на TDBedit или TDBcheckBox или нещо такова,
ще има методика за автоматично обръщение към ds->ModifySQL.

Да .... ама не !!!

Моля Ви, да ми спестите излишно лутане, като ми кажете каво не съм видял,
или пък неправилно подходил. А може би избора ми е неправилен.

В кръга на глупостта направих селдното, при вмъкване на запис

ds->SelectSQL=ds->InsertSQL;
ds->Params->ByName(.....)->AsString=......... ;
ds->Prepare();
ds->Open() или ds->ExexSQL(); ( Тъпия метод ExecSQL() не приема аргументи ? )

и всичко мина добре ! (Ха-ха). Но това ми се види дивотия. Ще трябва да прихващам
всяка промяна в TDBxxxxxxx компоненти и да пиша щуротии. Мога да направя и
други неща , ама ще бъда блъскане слепешката.

Мола Ви,дайте малко светлина...
10x

Отговор
в отговор на Stefan #2

Re: CBuilder/Delphi && Interbase

Предназначението на тези SQL-и е точно да си вмъкват/модифицират/изтриват запис в базата. Параметрите в тях обикновено са ти името на колоната, която си си селектнал в SelectSQL-а. Пример:
SelectSQL: select id, number, name from clients order by number
RefreshSQL: select id, number, name from clients where id = :id
InsertSQL: insert into clients(id, number, name) values(:id, :number, :name)
UpdateSQL: update clients set id = :id, :number = :number, name = :name where id = :id
DeleteSQL: delete from clients where id = :id

След това си отваряш DataSet-а с Open и работиш по следния начин:
tb.Append; //или tb.Edit;
tb.FieldByName('NAME').AsString := 'asdsfd'; //или по-добре tbNAME.AsString := 'sdfd';
....
tb.Post;

tb.Delete;

Параметрите ти се попълват автоматично по името на колоната.

Надявам се да са ти се поизяснили нещата

Отговор