CBuilder/Delphi && Interbase
1 отговора
64 прегледа
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
Сблъсках се с проблем, който се дължи най-вече на таова,че съм начинаещ.
Работя със 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
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;
Параметрите ти се попълват автоматично по името на колоната.
Надявам се да са ти се поизяснили нещата
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;
Параметрите ти се попълват автоматично по името на колоната.
Надявам се да са ти се поизяснили нещата