Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > AdoDataSet - работа с БД


Автор: Гость_Maverick 3.11.2004, 10:10
Всем привет!
Как с помощью ADODataSet работать напрямую с БД(MSSQL 2000)?
Интересует добавление, редактирование, удаление данных с помощью ADODataSet

Автор: Medved 3.11.2004, 12:19
Да собственно ничего сложного нет, просто исследуйте все методы и свойства этого компонента. Все очень просто.
Но я лучше бы Вам порекомендовал для манипуляции с данными использовать хранимые процедуры. Полезность этого подхода обсуждалась уже не раз, да и вы в процессе работы сами придете к этому.

Автор: Guest 3.11.2004, 13:14
Как раз все время работал с ХП.
Вот решил разобраться как напрямую через ADODataSet.
Просто иногда лучше на прямую сделать манипуляции с данными

Автор: Guest 4.11.2004, 06:28
Так ни кто и неподскажет?

Автор: Vit 4.11.2004, 07:00
Выполнением запросов SQL

Автор: Гость_Maverick 4.11.2004, 07:29
>Vit
Меня больше интересует как напрямую работать.
Через SQL я в курсах как это делается.
короче, хочу использовать ADODataSet как "ADOTable".
Задача:

на форме, к примеру, два DBEdit и один DBLookupCombobox
DBLookupCombobox - это справочник другой таблицы, из которого я выбераю KeyValue записи.

теперь данные хочу эти данные вставить в БД через AdoDataSet по нажатию на кнопку "Сохранить".

что-то типа такого:

with DataModuleArm.ADODataSetStaff do
begin
Insert;
FieldByName('TabNum').Value := DBEditEhTabNum.Text;
FieldByName('LastName').Value := DBEditEhLast.Text;
FieldByName('Id_CatStaff').Value := DBLookupComboboxEhDepartment.KeyValue;
Post;
end;

Только данный пример не работает!

Автор: Vit 5.11.2004, 07:31
Нет никакой такой прямой работы с MS SQL Server, так как этот сервер общается с миром только и исключительно посредством SQL. Чего бы вы не делали, каким бы доступом, протоколом, хоть через RPC - один хрен - на сервер тем или иным способом будет передан именно SQL запрос, а в ответ SQL сервер вернёт результат. Всё! Другого не дано. Даже родной Query Analyzer общается только через SQL...
Добавлено @ 07:38
Цитата
короче, хочу использовать ADODataSet как "ADOTable".


Хех... Реально ни один компонент не будет работать с MS SQL Server как Table, любые манипуляции которые вы проведёте будут сведены к выполнению SQL запросов. Вы можете лишь имитировать поведение как таблицы, при этом проиграете в скорости и заставите сервер использовать неоптимальные блокировки, и всё равно реально на сервер будет передана серия SQL запросов. А присвоение значений полей из визуальных DB компонентов - это вообще ни в какие ворота не лезет...


Давайте сначала, что именно надо сделать в конечном счёте... Так как то куды вы двигаетесь будет работать только в тепличных условиях, при нескольких клиентах и хоть чуть чуть больших таблицах вы просто такими манипуляциями посадите сервер, он захлебнётся и будет умирать - простейшие вещи будут исполняться ну очень медленно...

Автор: Guest 5.11.2004, 15:01
Цитата(Vit @ 5.11.2004, 07:31)
А присвоение значений полей из визуальных DB компонентов - это вообще ни в какие ворота не лезет...


Это я в курсе, что ADO все переведет в запросы.

Как разная напрямую я или нет присваеваю значение?
К примеру вот так:

with DataModuleMashteh.ADOStoredProcOrg do
begin
Close;
Parameters.ParamByName('@OrganizShortName').Value := DBEditNameShort.Text;
Parameters.ParamByName('@OrganizName').Value := DBEditNameOrg.Text;
Parameters.ParamByName('@OrganizINN').Value := DBEditOrganizINN.Text;
Parameters.ParamByName('@ERR').Value := 1;
Prepared;
ExecProc;

И все великолепно работает.


Автор: Vit 5.11.2004, 17:44
Код

with DataModuleArm.ADOQuery1 do
begin
 SQL.text:='Select top 0 * from MyTable';
 Open;
 Insert;
 FieldByName('TabNum').Value := DBEditEhTabNum.Text;
 FieldByName('LastName').Value := DBEditEhLast.Text;
 FieldByName('Id_CatStaff').Value := DBLookupComboboxEhDepartment.KeyValue;
 Post;
end;


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)